1
2
3 package generic
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 move := v_1
14793 if move.Op != ssaop.OpMove {
14794 break
14795 }
14796 n := ssa.AuxIntToInt64(move.AuxInt)
14797 mem := move.Args[2]
14798 p2 := move.Args[0]
14799 src := move.Args[1]
14800 if !(t1.Size() <= n && ssa.IsSamePtr(p1, p2) && !ssa.IsVolatile(src)) {
14801 break
14802 }
14803 b = move.Block
14804 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14805 v.CopyOf(v0)
14806 v0.AddArg2(src, mem)
14807 return true
14808 }
14809
14810
14811
14812 for {
14813 t1 := v.Type
14814 p1 := v_0
14815 if v_1.Op != ssaop.OpStore {
14816 break
14817 }
14818 t2 := ssa.AuxToType(v_1.Aux)
14819 _ = v_1.Args[1]
14820 p2 := v_1.Args[0]
14821 v_1_1 := v_1.Args[1]
14822 if v_1_1.Op != ssaop.OpConst64 {
14823 break
14824 }
14825 x := ssa.AuxIntToInt64(v_1_1.AuxInt)
14826 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 8 && ssa.Is64BitFloat(t1) && !math.IsNaN(math.Float64frombits(uint64(x)))) {
14827 break
14828 }
14829 v.Reset(ssaop.OpConst64F)
14830 v.AuxInt = ssa.Float64ToAuxInt(math.Float64frombits(uint64(x)))
14831 return true
14832 }
14833
14834
14835
14836 for {
14837 t1 := v.Type
14838 p1 := v_0
14839 if v_1.Op != ssaop.OpStore {
14840 break
14841 }
14842 t2 := ssa.AuxToType(v_1.Aux)
14843 _ = v_1.Args[1]
14844 p2 := v_1.Args[0]
14845 v_1_1 := v_1.Args[1]
14846 if v_1_1.Op != ssaop.OpConst32 {
14847 break
14848 }
14849 x := ssa.AuxIntToInt32(v_1_1.AuxInt)
14850 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 4 && ssa.Is32BitFloat(t1) && !math.IsNaN(float64(math.Float32frombits(uint32(x))))) {
14851 break
14852 }
14853 v.Reset(ssaop.OpConst32F)
14854 v.AuxInt = ssa.Float32ToAuxInt(math.Float32frombits(uint32(x)))
14855 return true
14856 }
14857
14858
14859
14860 for {
14861 t1 := v.Type
14862 p1 := v_0
14863 if v_1.Op != ssaop.OpStore {
14864 break
14865 }
14866 t2 := ssa.AuxToType(v_1.Aux)
14867 _ = v_1.Args[1]
14868 p2 := v_1.Args[0]
14869 v_1_1 := v_1.Args[1]
14870 if v_1_1.Op != ssaop.OpConst64F {
14871 break
14872 }
14873 x := ssa.AuxIntToFloat64(v_1_1.AuxInt)
14874 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 8 && ssa.Is64BitInt(t1)) {
14875 break
14876 }
14877 v.Reset(ssaop.OpConst64)
14878 v.AuxInt = ssa.Int64ToAuxInt(int64(math.Float64bits(x)))
14879 return true
14880 }
14881
14882
14883
14884 for {
14885 t1 := v.Type
14886 p1 := v_0
14887 if v_1.Op != ssaop.OpStore {
14888 break
14889 }
14890 t2 := ssa.AuxToType(v_1.Aux)
14891 _ = v_1.Args[1]
14892 p2 := v_1.Args[0]
14893 v_1_1 := v_1.Args[1]
14894 if v_1_1.Op != ssaop.OpConst32F {
14895 break
14896 }
14897 x := ssa.AuxIntToFloat32(v_1_1.AuxInt)
14898 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 4 && ssa.Is32BitInt(t1)) {
14899 break
14900 }
14901 v.Reset(ssaop.OpConst32)
14902 v.AuxInt = ssa.Int32ToAuxInt(int32(math.Float32bits(x)))
14903 return true
14904 }
14905
14906
14907
14908 for {
14909 t1 := v.Type
14910 op1 := v_0
14911 if op1.Op != ssaop.OpOffPtr {
14912 break
14913 }
14914 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14915 p1 := op1.Args[0]
14916 if v_1.Op != ssaop.OpStore {
14917 break
14918 }
14919 t2 := ssa.AuxToType(v_1.Aux)
14920 _ = v_1.Args[2]
14921 p2 := v_1.Args[0]
14922 mem := v_1.Args[2]
14923 if mem.Op != ssaop.OpZero {
14924 break
14925 }
14926 n := ssa.AuxIntToInt64(mem.AuxInt)
14927 p3 := mem.Args[0]
14928 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p3) && ssa.CanSSA(t1) && ssa.Disjoint(op1, t1, p2, t2)) {
14929 break
14930 }
14931 b = mem.Block
14932 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14933 v.CopyOf(v0)
14934 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
14935 v1.AuxInt = ssa.Int64ToAuxInt(o1)
14936 v1.AddArg(p3)
14937 v0.AddArg2(v1, mem)
14938 return true
14939 }
14940
14941
14942
14943 for {
14944 t1 := v.Type
14945 op1 := v_0
14946 if op1.Op != ssaop.OpOffPtr {
14947 break
14948 }
14949 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14950 p1 := op1.Args[0]
14951 if v_1.Op != ssaop.OpStore {
14952 break
14953 }
14954 t2 := ssa.AuxToType(v_1.Aux)
14955 _ = v_1.Args[2]
14956 p2 := v_1.Args[0]
14957 v_1_2 := v_1.Args[2]
14958 if v_1_2.Op != ssaop.OpStore {
14959 break
14960 }
14961 t3 := ssa.AuxToType(v_1_2.Aux)
14962 _ = v_1_2.Args[2]
14963 p3 := v_1_2.Args[0]
14964 mem := v_1_2.Args[2]
14965 if mem.Op != ssaop.OpZero {
14966 break
14967 }
14968 n := ssa.AuxIntToInt64(mem.AuxInt)
14969 p4 := mem.Args[0]
14970 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)) {
14971 break
14972 }
14973 b = mem.Block
14974 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14975 v.CopyOf(v0)
14976 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
14977 v1.AuxInt = ssa.Int64ToAuxInt(o1)
14978 v1.AddArg(p4)
14979 v0.AddArg2(v1, mem)
14980 return true
14981 }
14982
14983
14984
14985 for {
14986 t1 := v.Type
14987 op1 := v_0
14988 if op1.Op != ssaop.OpOffPtr {
14989 break
14990 }
14991 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14992 p1 := op1.Args[0]
14993 if v_1.Op != ssaop.OpStore {
14994 break
14995 }
14996 t2 := ssa.AuxToType(v_1.Aux)
14997 _ = v_1.Args[2]
14998 p2 := v_1.Args[0]
14999 v_1_2 := v_1.Args[2]
15000 if v_1_2.Op != ssaop.OpStore {
15001 break
15002 }
15003 t3 := ssa.AuxToType(v_1_2.Aux)
15004 _ = v_1_2.Args[2]
15005 p3 := v_1_2.Args[0]
15006 v_1_2_2 := v_1_2.Args[2]
15007 if v_1_2_2.Op != ssaop.OpStore {
15008 break
15009 }
15010 t4 := ssa.AuxToType(v_1_2_2.Aux)
15011 _ = v_1_2_2.Args[2]
15012 p4 := v_1_2_2.Args[0]
15013 mem := v_1_2_2.Args[2]
15014 if mem.Op != ssaop.OpZero {
15015 break
15016 }
15017 n := ssa.AuxIntToInt64(mem.AuxInt)
15018 p5 := mem.Args[0]
15019 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)) {
15020 break
15021 }
15022 b = mem.Block
15023 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
15024 v.CopyOf(v0)
15025 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
15026 v1.AuxInt = ssa.Int64ToAuxInt(o1)
15027 v1.AddArg(p5)
15028 v0.AddArg2(v1, mem)
15029 return true
15030 }
15031
15032
15033
15034 for {
15035 t1 := v.Type
15036 op1 := v_0
15037 if op1.Op != ssaop.OpOffPtr {
15038 break
15039 }
15040 o1 := ssa.AuxIntToInt64(op1.AuxInt)
15041 p1 := op1.Args[0]
15042 if v_1.Op != ssaop.OpStore {
15043 break
15044 }
15045 t2 := ssa.AuxToType(v_1.Aux)
15046 _ = v_1.Args[2]
15047 p2 := v_1.Args[0]
15048 v_1_2 := v_1.Args[2]
15049 if v_1_2.Op != ssaop.OpStore {
15050 break
15051 }
15052 t3 := ssa.AuxToType(v_1_2.Aux)
15053 _ = v_1_2.Args[2]
15054 p3 := v_1_2.Args[0]
15055 v_1_2_2 := v_1_2.Args[2]
15056 if v_1_2_2.Op != ssaop.OpStore {
15057 break
15058 }
15059 t4 := ssa.AuxToType(v_1_2_2.Aux)
15060 _ = v_1_2_2.Args[2]
15061 p4 := v_1_2_2.Args[0]
15062 v_1_2_2_2 := v_1_2_2.Args[2]
15063 if v_1_2_2_2.Op != ssaop.OpStore {
15064 break
15065 }
15066 t5 := ssa.AuxToType(v_1_2_2_2.Aux)
15067 _ = v_1_2_2_2.Args[2]
15068 p5 := v_1_2_2_2.Args[0]
15069 mem := v_1_2_2_2.Args[2]
15070 if mem.Op != ssaop.OpZero {
15071 break
15072 }
15073 n := ssa.AuxIntToInt64(mem.AuxInt)
15074 p6 := mem.Args[0]
15075 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)) {
15076 break
15077 }
15078 b = mem.Block
15079 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
15080 v.CopyOf(v0)
15081 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
15082 v1.AuxInt = ssa.Int64ToAuxInt(o1)
15083 v1.AddArg(p6)
15084 v0.AddArg2(v1, mem)
15085 return true
15086 }
15087
15088
15089
15090 for {
15091 t1 := v.Type
15092 if v_0.Op != ssaop.OpOffPtr {
15093 break
15094 }
15095 o := ssa.AuxIntToInt64(v_0.AuxInt)
15096 p1 := v_0.Args[0]
15097 if v_1.Op != ssaop.OpZero {
15098 break
15099 }
15100 n := ssa.AuxIntToInt64(v_1.AuxInt)
15101 p2 := v_1.Args[0]
15102 if !(t1.IsBoolean() && ssa.IsSamePtr(p1, p2) && n >= o+1) {
15103 break
15104 }
15105 v.Reset(ssaop.OpConstBool)
15106 v.AuxInt = ssa.BoolToAuxInt(false)
15107 return true
15108 }
15109
15110
15111
15112 for {
15113 t1 := v.Type
15114 if v_0.Op != ssaop.OpOffPtr {
15115 break
15116 }
15117 o := ssa.AuxIntToInt64(v_0.AuxInt)
15118 p1 := v_0.Args[0]
15119 if v_1.Op != ssaop.OpZero {
15120 break
15121 }
15122 n := ssa.AuxIntToInt64(v_1.AuxInt)
15123 p2 := v_1.Args[0]
15124 if !(ssa.Is8BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+1) {
15125 break
15126 }
15127 v.Reset(ssaop.OpConst8)
15128 v.AuxInt = ssa.Int8ToAuxInt(0)
15129 return true
15130 }
15131
15132
15133
15134 for {
15135 t1 := v.Type
15136 if v_0.Op != ssaop.OpOffPtr {
15137 break
15138 }
15139 o := ssa.AuxIntToInt64(v_0.AuxInt)
15140 p1 := v_0.Args[0]
15141 if v_1.Op != ssaop.OpZero {
15142 break
15143 }
15144 n := ssa.AuxIntToInt64(v_1.AuxInt)
15145 p2 := v_1.Args[0]
15146 if !(ssa.Is16BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+2) {
15147 break
15148 }
15149 v.Reset(ssaop.OpConst16)
15150 v.AuxInt = ssa.Int16ToAuxInt(0)
15151 return true
15152 }
15153
15154
15155
15156 for {
15157 t1 := v.Type
15158 if v_0.Op != ssaop.OpOffPtr {
15159 break
15160 }
15161 o := ssa.AuxIntToInt64(v_0.AuxInt)
15162 p1 := v_0.Args[0]
15163 if v_1.Op != ssaop.OpZero {
15164 break
15165 }
15166 n := ssa.AuxIntToInt64(v_1.AuxInt)
15167 p2 := v_1.Args[0]
15168 if !(ssa.Is32BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+4) {
15169 break
15170 }
15171 v.Reset(ssaop.OpConst32)
15172 v.AuxInt = ssa.Int32ToAuxInt(0)
15173 return true
15174 }
15175
15176
15177
15178 for {
15179 t1 := v.Type
15180 if v_0.Op != ssaop.OpOffPtr {
15181 break
15182 }
15183 o := ssa.AuxIntToInt64(v_0.AuxInt)
15184 p1 := v_0.Args[0]
15185 if v_1.Op != ssaop.OpZero {
15186 break
15187 }
15188 n := ssa.AuxIntToInt64(v_1.AuxInt)
15189 p2 := v_1.Args[0]
15190 if !(ssa.Is64BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+8) {
15191 break
15192 }
15193 v.Reset(ssaop.OpConst64)
15194 v.AuxInt = ssa.Int64ToAuxInt(0)
15195 return true
15196 }
15197
15198
15199
15200 for {
15201 t1 := v.Type
15202 if v_0.Op != ssaop.OpOffPtr {
15203 break
15204 }
15205 o := ssa.AuxIntToInt64(v_0.AuxInt)
15206 p1 := v_0.Args[0]
15207 if v_1.Op != ssaop.OpZero {
15208 break
15209 }
15210 n := ssa.AuxIntToInt64(v_1.AuxInt)
15211 p2 := v_1.Args[0]
15212 if !(ssa.Is32BitFloat(t1) && ssa.IsSamePtr(p1, p2) && n >= o+4) {
15213 break
15214 }
15215 v.Reset(ssaop.OpConst32F)
15216 v.AuxInt = ssa.Float32ToAuxInt(0)
15217 return true
15218 }
15219
15220
15221
15222 for {
15223 t1 := v.Type
15224 if v_0.Op != ssaop.OpOffPtr {
15225 break
15226 }
15227 o := ssa.AuxIntToInt64(v_0.AuxInt)
15228 p1 := v_0.Args[0]
15229 if v_1.Op != ssaop.OpZero {
15230 break
15231 }
15232 n := ssa.AuxIntToInt64(v_1.AuxInt)
15233 p2 := v_1.Args[0]
15234 if !(ssa.Is64BitFloat(t1) && ssa.IsSamePtr(p1, p2) && n >= o+8) {
15235 break
15236 }
15237 v.Reset(ssaop.OpConst64F)
15238 v.AuxInt = ssa.Float64ToAuxInt(0)
15239 return true
15240 }
15241
15242
15243
15244 for {
15245 t := v.Type
15246 if !(t.IsStruct() && t.Size() > 0 && ssa.CanSSA(t) && !t.IsSIMD()) {
15247 break
15248 }
15249 v.CopyOf(rewriteStructLoad(v))
15250 return true
15251 }
15252
15253
15254
15255 for {
15256 t := v.Type
15257 ptr := v_0
15258 mem := v_1
15259 if !(t.IsArray() && t.NumElem() == 1 && t.Size() > 0 && ssa.CanSSA(t)) {
15260 break
15261 }
15262 v.Reset(ssaop.OpArrayMake1)
15263 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t.Elem())
15264 v0.AddArg2(ptr, mem)
15265 v.AddArg(v0)
15266 return true
15267 }
15268
15269
15270
15271 for {
15272 t := v.Type
15273 if !(t.Size() == 0) {
15274 break
15275 }
15276 v.Reset(ssaop.OpEmpty)
15277 return true
15278 }
15279
15280
15281
15282 for {
15283 if v.Type != typ.Int8 {
15284 break
15285 }
15286 sptr := v_0
15287 if sptr.Op != ssaop.OpAddr {
15288 break
15289 }
15290 scon := ssa.AuxToSym(sptr.Aux)
15291 sptr_0 := sptr.Args[0]
15292 if sptr_0.Op != ssaop.OpSB {
15293 break
15294 }
15295 if !(ssa.SymIsRO(scon)) {
15296 break
15297 }
15298 v.Reset(ssaop.OpConst8)
15299 v.Type = typ.Int8
15300 v.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
15301 return true
15302 }
15303
15304
15305
15306 for {
15307 if v.Type != typ.Int16 {
15308 break
15309 }
15310 sptr := v_0
15311 if sptr.Op != ssaop.OpAddr {
15312 break
15313 }
15314 scon := ssa.AuxToSym(sptr.Aux)
15315 sptr_0 := sptr.Args[0]
15316 if sptr_0.Op != ssaop.OpSB {
15317 break
15318 }
15319 if !(ssa.SymIsRO(scon)) {
15320 break
15321 }
15322 v.Reset(ssaop.OpConst16)
15323 v.Type = typ.Int16
15324 v.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
15325 return true
15326 }
15327
15328
15329
15330 for {
15331 if v.Type != typ.Int32 {
15332 break
15333 }
15334 sptr := v_0
15335 if sptr.Op != ssaop.OpAddr {
15336 break
15337 }
15338 scon := ssa.AuxToSym(sptr.Aux)
15339 sptr_0 := sptr.Args[0]
15340 if sptr_0.Op != ssaop.OpSB {
15341 break
15342 }
15343 if !(ssa.SymIsRO(scon)) {
15344 break
15345 }
15346 v.Reset(ssaop.OpConst32)
15347 v.Type = typ.Int32
15348 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
15349 return true
15350 }
15351
15352
15353
15354 for {
15355 if v.Type != typ.Int64 {
15356 break
15357 }
15358 sptr := v_0
15359 if sptr.Op != ssaop.OpAddr {
15360 break
15361 }
15362 scon := ssa.AuxToSym(sptr.Aux)
15363 sptr_0 := sptr.Args[0]
15364 if sptr_0.Op != ssaop.OpSB {
15365 break
15366 }
15367 if !(ssa.SymIsRO(scon)) {
15368 break
15369 }
15370 v.Reset(ssaop.OpConst64)
15371 v.Type = typ.Int64
15372 v.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
15373 return true
15374 }
15375
15376
15377
15378 for {
15379 if v_0.Op != ssaop.OpAddr {
15380 break
15381 }
15382 s := ssa.AuxToSym(v_0.Aux)
15383 sb := v_0.Args[0]
15384 if !(isFixedLoad(v, s, 0)) {
15385 break
15386 }
15387 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15388 return true
15389 }
15390
15391
15392
15393 for {
15394 if v_0.Op != ssaop.OpConvert {
15395 break
15396 }
15397 v_0_0 := v_0.Args[0]
15398 if v_0_0.Op != ssaop.OpAddr {
15399 break
15400 }
15401 s := ssa.AuxToSym(v_0_0.Aux)
15402 sb := v_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.OpAddr {
15422 break
15423 }
15424 s := ssa.AuxToSym(v_0_0_0.Aux)
15425 sb := v_0_0_0.Args[0]
15426 if !(isFixedLoad(v, s, 0)) {
15427 break
15428 }
15429 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15430 return true
15431 }
15432
15433
15434
15435 for {
15436 if v_0.Op != ssaop.OpITab {
15437 break
15438 }
15439 v_0_0 := v_0.Args[0]
15440 if v_0_0.Op != ssaop.OpIMake {
15441 break
15442 }
15443 v_0_0_0 := v_0_0.Args[0]
15444 if v_0_0_0.Op != ssaop.OpConvert {
15445 break
15446 }
15447 v_0_0_0_0 := v_0_0_0.Args[0]
15448 if v_0_0_0_0.Op != ssaop.OpAddr {
15449 break
15450 }
15451 s := ssa.AuxToSym(v_0_0_0_0.Aux)
15452 sb := v_0_0_0_0.Args[0]
15453 if !(isFixedLoad(v, s, 0)) {
15454 break
15455 }
15456 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15457 return true
15458 }
15459
15460
15461
15462 for {
15463 if v_0.Op != ssaop.OpOffPtr {
15464 break
15465 }
15466 off := ssa.AuxIntToInt64(v_0.AuxInt)
15467 v_0_0 := v_0.Args[0]
15468 if v_0_0.Op != ssaop.OpAddr {
15469 break
15470 }
15471 s := ssa.AuxToSym(v_0_0.Aux)
15472 sb := v_0_0.Args[0]
15473 if !(isFixedLoad(v, s, off)) {
15474 break
15475 }
15476 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15477 return true
15478 }
15479
15480
15481
15482 for {
15483 if v_0.Op != ssaop.OpOffPtr {
15484 break
15485 }
15486 off := ssa.AuxIntToInt64(v_0.AuxInt)
15487 v_0_0 := v_0.Args[0]
15488 if v_0_0.Op != ssaop.OpConvert {
15489 break
15490 }
15491 v_0_0_0 := v_0_0.Args[0]
15492 if v_0_0_0.Op != ssaop.OpAddr {
15493 break
15494 }
15495 s := ssa.AuxToSym(v_0_0_0.Aux)
15496 sb := v_0_0_0.Args[0]
15497 if !(isFixedLoad(v, s, off)) {
15498 break
15499 }
15500 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15501 return true
15502 }
15503
15504
15505
15506 for {
15507 if v_0.Op != ssaop.OpOffPtr {
15508 break
15509 }
15510 off := ssa.AuxIntToInt64(v_0.AuxInt)
15511 v_0_0 := v_0.Args[0]
15512 if v_0_0.Op != ssaop.OpITab {
15513 break
15514 }
15515 v_0_0_0 := v_0_0.Args[0]
15516 if v_0_0_0.Op != ssaop.OpIMake {
15517 break
15518 }
15519 v_0_0_0_0 := v_0_0_0.Args[0]
15520 if v_0_0_0_0.Op != ssaop.OpAddr {
15521 break
15522 }
15523 s := ssa.AuxToSym(v_0_0_0_0.Aux)
15524 sb := v_0_0_0_0.Args[0]
15525 if !(isFixedLoad(v, s, off)) {
15526 break
15527 }
15528 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15529 return true
15530 }
15531
15532
15533
15534 for {
15535 if v_0.Op != ssaop.OpOffPtr {
15536 break
15537 }
15538 off := ssa.AuxIntToInt64(v_0.AuxInt)
15539 v_0_0 := v_0.Args[0]
15540 if v_0_0.Op != ssaop.OpITab {
15541 break
15542 }
15543 v_0_0_0 := v_0_0.Args[0]
15544 if v_0_0_0.Op != ssaop.OpIMake {
15545 break
15546 }
15547 v_0_0_0_0 := v_0_0_0.Args[0]
15548 if v_0_0_0_0.Op != ssaop.OpConvert {
15549 break
15550 }
15551 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
15552 if v_0_0_0_0_0.Op != ssaop.OpAddr {
15553 break
15554 }
15555 s := ssa.AuxToSym(v_0_0_0_0_0.Aux)
15556 sb := v_0_0_0_0_0.Args[0]
15557 if !(isFixedLoad(v, s, off)) {
15558 break
15559 }
15560 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15561 return true
15562 }
15563 return false
15564 }
15565 func rewriteValue_OpLsh16x16(v *ssa.Value) bool {
15566 v_1 := v.Args[1]
15567 v_0 := v.Args[0]
15568 b := v.Block
15569
15570
15571 for {
15572 x := v_0
15573 if v_1.Op != ssaop.OpConst16 {
15574 break
15575 }
15576 c := ssa.AuxIntToInt16(v_1.AuxInt)
15577 v.Reset(ssaop.OpLsh16x64)
15578 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
15579 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
15580 v.AddArg2(x, v0)
15581 return true
15582 }
15583
15584
15585 for {
15586 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15587 break
15588 }
15589 v.Reset(ssaop.OpConst16)
15590 v.AuxInt = ssa.Int16ToAuxInt(0)
15591 return true
15592 }
15593
15594
15595
15596 for {
15597 if ssa.AuxIntToBool(v.AuxInt) != false {
15598 break
15599 }
15600 x := v_0
15601 con := v_1
15602 if con.Op != ssaop.OpConst16 {
15603 break
15604 }
15605 c := ssa.AuxIntToInt16(con.AuxInt)
15606 if !(0 < c && c < 16) {
15607 break
15608 }
15609 v.Reset(ssaop.OpLsh16x16)
15610 v.AuxInt = ssa.BoolToAuxInt(true)
15611 v.AddArg2(x, con)
15612 return true
15613 }
15614 return false
15615 }
15616 func rewriteValue_OpLsh16x32(v *ssa.Value) bool {
15617 v_1 := v.Args[1]
15618 v_0 := v.Args[0]
15619 b := v.Block
15620
15621
15622 for {
15623 x := v_0
15624 if v_1.Op != ssaop.OpConst32 {
15625 break
15626 }
15627 c := ssa.AuxIntToInt32(v_1.AuxInt)
15628 v.Reset(ssaop.OpLsh16x64)
15629 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
15630 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
15631 v.AddArg2(x, v0)
15632 return true
15633 }
15634
15635
15636 for {
15637 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15638 break
15639 }
15640 v.Reset(ssaop.OpConst16)
15641 v.AuxInt = ssa.Int16ToAuxInt(0)
15642 return true
15643 }
15644
15645
15646
15647 for {
15648 if ssa.AuxIntToBool(v.AuxInt) != false {
15649 break
15650 }
15651 x := v_0
15652 con := v_1
15653 if con.Op != ssaop.OpConst32 {
15654 break
15655 }
15656 c := ssa.AuxIntToInt32(con.AuxInt)
15657 if !(0 < c && c < 16) {
15658 break
15659 }
15660 v.Reset(ssaop.OpLsh16x32)
15661 v.AuxInt = ssa.BoolToAuxInt(true)
15662 v.AddArg2(x, con)
15663 return true
15664 }
15665 return false
15666 }
15667 func rewriteValue_OpLsh16x64(v *ssa.Value) bool {
15668 v_1 := v.Args[1]
15669 v_0 := v.Args[0]
15670 b := v.Block
15671 typ := &b.Func.Config.Types
15672
15673
15674 for {
15675 if v_0.Op != ssaop.OpConst16 {
15676 break
15677 }
15678 c := ssa.AuxIntToInt16(v_0.AuxInt)
15679 if v_1.Op != ssaop.OpConst64 {
15680 break
15681 }
15682 d := ssa.AuxIntToInt64(v_1.AuxInt)
15683 v.Reset(ssaop.OpConst16)
15684 v.AuxInt = ssa.Int16ToAuxInt(c << uint64(d))
15685 return true
15686 }
15687
15688
15689 for {
15690 x := v_0
15691 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
15692 break
15693 }
15694 v.CopyOf(x)
15695 return true
15696 }
15697
15698
15699 for {
15700 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15701 break
15702 }
15703 v.Reset(ssaop.OpConst16)
15704 v.AuxInt = ssa.Int16ToAuxInt(0)
15705 return true
15706 }
15707
15708
15709
15710 for {
15711 if v_1.Op != ssaop.OpConst64 {
15712 break
15713 }
15714 c := ssa.AuxIntToInt64(v_1.AuxInt)
15715 if !(uint64(c) >= 16) {
15716 break
15717 }
15718 v.Reset(ssaop.OpConst16)
15719 v.AuxInt = ssa.Int16ToAuxInt(0)
15720 return true
15721 }
15722
15723
15724
15725 for {
15726 t := v.Type
15727 if v_0.Op != ssaop.OpLsh16x64 {
15728 break
15729 }
15730 _ = v_0.Args[1]
15731 x := v_0.Args[0]
15732 v_0_1 := v_0.Args[1]
15733 if v_0_1.Op != ssaop.OpConst64 {
15734 break
15735 }
15736 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
15737 if v_1.Op != ssaop.OpConst64 {
15738 break
15739 }
15740 d := ssa.AuxIntToInt64(v_1.AuxInt)
15741 if !(!uaddOvf(c, d)) {
15742 break
15743 }
15744 v.Reset(ssaop.OpLsh16x64)
15745 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
15746 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
15747 v.AddArg2(x, v0)
15748 return true
15749 }
15750
15751
15752
15753 for {
15754 i := v_0
15755 if i.Op != ssaop.OpRsh16x64 {
15756 break
15757 }
15758 _ = i.Args[1]
15759 x := i.Args[0]
15760 i_1 := i.Args[1]
15761 if i_1.Op != ssaop.OpConst64 {
15762 break
15763 }
15764 c := ssa.AuxIntToInt64(i_1.AuxInt)
15765 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
15766 break
15767 }
15768 v.Reset(ssaop.OpAnd16)
15769 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
15770 v0.AuxInt = ssa.Int16ToAuxInt(int16(-1) << c)
15771 v.AddArg2(x, v0)
15772 return true
15773 }
15774
15775
15776
15777 for {
15778 i := v_0
15779 if i.Op != ssaop.OpRsh16Ux64 {
15780 break
15781 }
15782 _ = i.Args[1]
15783 x := i.Args[0]
15784 i_1 := i.Args[1]
15785 if i_1.Op != ssaop.OpConst64 {
15786 break
15787 }
15788 c := ssa.AuxIntToInt64(i_1.AuxInt)
15789 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
15790 break
15791 }
15792 v.Reset(ssaop.OpAnd16)
15793 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
15794 v0.AuxInt = ssa.Int16ToAuxInt(int16(-1) << c)
15795 v.AddArg2(x, v0)
15796 return true
15797 }
15798
15799
15800
15801 for {
15802 if v_0.Op != ssaop.OpRsh16Ux64 {
15803 break
15804 }
15805 _ = v_0.Args[1]
15806 v_0_0 := v_0.Args[0]
15807 if v_0_0.Op != ssaop.OpLsh16x64 {
15808 break
15809 }
15810 _ = v_0_0.Args[1]
15811 x := v_0_0.Args[0]
15812 v_0_0_1 := v_0_0.Args[1]
15813 if v_0_0_1.Op != ssaop.OpConst64 {
15814 break
15815 }
15816 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15817 v_0_1 := v_0.Args[1]
15818 if v_0_1.Op != ssaop.OpConst64 {
15819 break
15820 }
15821 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
15822 if v_1.Op != ssaop.OpConst64 {
15823 break
15824 }
15825 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
15826 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
15827 break
15828 }
15829 v.Reset(ssaop.OpLsh16x64)
15830 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
15831 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
15832 v.AddArg2(x, v0)
15833 return true
15834 }
15835
15836
15837
15838 for {
15839 if v_0.Op != ssaop.OpAnd16 {
15840 break
15841 }
15842 _ = v_0.Args[1]
15843 v_0_0 := v_0.Args[0]
15844 v_0_1 := v_0.Args[1]
15845 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15846 if v_0_0.Op != ssaop.OpRsh16x64 {
15847 continue
15848 }
15849 t := v_0_0.Type
15850 _ = v_0_0.Args[1]
15851 x := v_0_0.Args[0]
15852 v_0_0_1 := v_0_0.Args[1]
15853 if v_0_0_1.Op != ssaop.OpConst64 {
15854 continue
15855 }
15856 t2 := v_0_0_1.Type
15857 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15858 if v_0_1.Op != ssaop.OpConst16 {
15859 continue
15860 }
15861 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15862 if v_1.Op != ssaop.OpConst64 {
15863 continue
15864 }
15865 e := ssa.AuxIntToInt64(v_1.AuxInt)
15866 if !(c >= e) {
15867 continue
15868 }
15869 v.Reset(ssaop.OpAnd16)
15870 v0 := b.NewValue0(v.Pos, ssaop.OpRsh16x64, t)
15871 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15872 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
15873 v0.AddArg2(x, v1)
15874 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15875 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15876 v.AddArg2(v0, v2)
15877 return true
15878 }
15879 break
15880 }
15881
15882
15883
15884 for {
15885 if v_0.Op != ssaop.OpAnd16 {
15886 break
15887 }
15888 _ = v_0.Args[1]
15889 v_0_0 := v_0.Args[0]
15890 v_0_1 := v_0.Args[1]
15891 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15892 if v_0_0.Op != ssaop.OpRsh16Ux64 {
15893 continue
15894 }
15895 t := v_0_0.Type
15896 _ = v_0_0.Args[1]
15897 x := v_0_0.Args[0]
15898 v_0_0_1 := v_0_0.Args[1]
15899 if v_0_0_1.Op != ssaop.OpConst64 {
15900 continue
15901 }
15902 t2 := v_0_0_1.Type
15903 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15904 if v_0_1.Op != ssaop.OpConst16 {
15905 continue
15906 }
15907 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15908 if v_1.Op != ssaop.OpConst64 {
15909 continue
15910 }
15911 e := ssa.AuxIntToInt64(v_1.AuxInt)
15912 if !(c >= e) {
15913 continue
15914 }
15915 v.Reset(ssaop.OpAnd16)
15916 v0 := b.NewValue0(v.Pos, ssaop.OpRsh16Ux64, t)
15917 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15918 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
15919 v0.AddArg2(x, v1)
15920 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15921 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15922 v.AddArg2(v0, v2)
15923 return true
15924 }
15925 break
15926 }
15927
15928
15929
15930 for {
15931 if v_0.Op != ssaop.OpAnd16 {
15932 break
15933 }
15934 _ = v_0.Args[1]
15935 v_0_0 := v_0.Args[0]
15936 v_0_1 := v_0.Args[1]
15937 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15938 if v_0_0.Op != ssaop.OpRsh16x64 {
15939 continue
15940 }
15941 t := v_0_0.Type
15942 _ = v_0_0.Args[1]
15943 x := v_0_0.Args[0]
15944 v_0_0_1 := v_0_0.Args[1]
15945 if v_0_0_1.Op != ssaop.OpConst64 {
15946 continue
15947 }
15948 t2 := v_0_0_1.Type
15949 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15950 if v_0_1.Op != ssaop.OpConst16 {
15951 continue
15952 }
15953 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15954 if v_1.Op != ssaop.OpConst64 {
15955 continue
15956 }
15957 e := ssa.AuxIntToInt64(v_1.AuxInt)
15958 if !(c < e) {
15959 continue
15960 }
15961 v.Reset(ssaop.OpAnd16)
15962 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
15963 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15964 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
15965 v0.AddArg2(x, v1)
15966 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15967 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15968 v.AddArg2(v0, v2)
15969 return true
15970 }
15971 break
15972 }
15973
15974
15975
15976 for {
15977 if v_0.Op != ssaop.OpAnd16 {
15978 break
15979 }
15980 _ = v_0.Args[1]
15981 v_0_0 := v_0.Args[0]
15982 v_0_1 := v_0.Args[1]
15983 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15984 if v_0_0.Op != ssaop.OpRsh16Ux64 {
15985 continue
15986 }
15987 t := v_0_0.Type
15988 _ = v_0_0.Args[1]
15989 x := v_0_0.Args[0]
15990 v_0_0_1 := v_0_0.Args[1]
15991 if v_0_0_1.Op != ssaop.OpConst64 {
15992 continue
15993 }
15994 t2 := v_0_0_1.Type
15995 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15996 if v_0_1.Op != ssaop.OpConst16 {
15997 continue
15998 }
15999 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
16000 if v_1.Op != ssaop.OpConst64 {
16001 continue
16002 }
16003 e := ssa.AuxIntToInt64(v_1.AuxInt)
16004 if !(c < e) {
16005 continue
16006 }
16007 v.Reset(ssaop.OpAnd16)
16008 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
16009 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16010 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16011 v0.AddArg2(x, v1)
16012 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
16013 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
16014 v.AddArg2(v0, v2)
16015 return true
16016 }
16017 break
16018 }
16019
16020
16021
16022 for {
16023 if ssa.AuxIntToBool(v.AuxInt) != false {
16024 break
16025 }
16026 x := v_0
16027 con := v_1
16028 if con.Op != ssaop.OpConst64 {
16029 break
16030 }
16031 c := ssa.AuxIntToInt64(con.AuxInt)
16032 if !(0 < c && c < 16) {
16033 break
16034 }
16035 v.Reset(ssaop.OpLsh16x64)
16036 v.AuxInt = ssa.BoolToAuxInt(true)
16037 v.AddArg2(x, con)
16038 return true
16039 }
16040 return false
16041 }
16042 func rewriteValue_OpLsh16x8(v *ssa.Value) bool {
16043 v_1 := v.Args[1]
16044 v_0 := v.Args[0]
16045 b := v.Block
16046
16047
16048 for {
16049 x := v_0
16050 if v_1.Op != ssaop.OpConst8 {
16051 break
16052 }
16053 c := ssa.AuxIntToInt8(v_1.AuxInt)
16054 v.Reset(ssaop.OpLsh16x64)
16055 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16056 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
16057 v.AddArg2(x, v0)
16058 return true
16059 }
16060
16061
16062 for {
16063 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
16064 break
16065 }
16066 v.Reset(ssaop.OpConst16)
16067 v.AuxInt = ssa.Int16ToAuxInt(0)
16068 return true
16069 }
16070
16071
16072
16073 for {
16074 if ssa.AuxIntToBool(v.AuxInt) != false {
16075 break
16076 }
16077 x := v_0
16078 con := v_1
16079 if con.Op != ssaop.OpConst8 {
16080 break
16081 }
16082 c := ssa.AuxIntToInt8(con.AuxInt)
16083 if !(0 < c && c < 16) {
16084 break
16085 }
16086 v.Reset(ssaop.OpLsh16x8)
16087 v.AuxInt = ssa.BoolToAuxInt(true)
16088 v.AddArg2(x, con)
16089 return true
16090 }
16091 return false
16092 }
16093 func rewriteValue_OpLsh32x16(v *ssa.Value) bool {
16094 v_1 := v.Args[1]
16095 v_0 := v.Args[0]
16096 b := v.Block
16097
16098
16099 for {
16100 x := v_0
16101 if v_1.Op != ssaop.OpConst16 {
16102 break
16103 }
16104 c := ssa.AuxIntToInt16(v_1.AuxInt)
16105 v.Reset(ssaop.OpLsh32x64)
16106 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16107 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
16108 v.AddArg2(x, v0)
16109 return true
16110 }
16111
16112
16113 for {
16114 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16115 break
16116 }
16117 v.Reset(ssaop.OpConst32)
16118 v.AuxInt = ssa.Int32ToAuxInt(0)
16119 return true
16120 }
16121
16122
16123
16124 for {
16125 if ssa.AuxIntToBool(v.AuxInt) != false {
16126 break
16127 }
16128 x := v_0
16129 con := v_1
16130 if con.Op != ssaop.OpConst16 {
16131 break
16132 }
16133 c := ssa.AuxIntToInt16(con.AuxInt)
16134 if !(0 < c && c < 32) {
16135 break
16136 }
16137 v.Reset(ssaop.OpLsh32x16)
16138 v.AuxInt = ssa.BoolToAuxInt(true)
16139 v.AddArg2(x, con)
16140 return true
16141 }
16142 return false
16143 }
16144 func rewriteValue_OpLsh32x32(v *ssa.Value) bool {
16145 v_1 := v.Args[1]
16146 v_0 := v.Args[0]
16147 b := v.Block
16148
16149
16150 for {
16151 x := v_0
16152 if v_1.Op != ssaop.OpConst32 {
16153 break
16154 }
16155 c := ssa.AuxIntToInt32(v_1.AuxInt)
16156 v.Reset(ssaop.OpLsh32x64)
16157 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16158 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
16159 v.AddArg2(x, v0)
16160 return true
16161 }
16162
16163
16164 for {
16165 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16166 break
16167 }
16168 v.Reset(ssaop.OpConst32)
16169 v.AuxInt = ssa.Int32ToAuxInt(0)
16170 return true
16171 }
16172
16173
16174
16175 for {
16176 if ssa.AuxIntToBool(v.AuxInt) != false {
16177 break
16178 }
16179 x := v_0
16180 con := v_1
16181 if con.Op != ssaop.OpConst32 {
16182 break
16183 }
16184 c := ssa.AuxIntToInt32(con.AuxInt)
16185 if !(0 < c && c < 32) {
16186 break
16187 }
16188 v.Reset(ssaop.OpLsh32x32)
16189 v.AuxInt = ssa.BoolToAuxInt(true)
16190 v.AddArg2(x, con)
16191 return true
16192 }
16193 return false
16194 }
16195 func rewriteValue_OpLsh32x64(v *ssa.Value) bool {
16196 v_1 := v.Args[1]
16197 v_0 := v.Args[0]
16198 b := v.Block
16199 typ := &b.Func.Config.Types
16200
16201
16202 for {
16203 if v_0.Op != ssaop.OpConst32 {
16204 break
16205 }
16206 c := ssa.AuxIntToInt32(v_0.AuxInt)
16207 if v_1.Op != ssaop.OpConst64 {
16208 break
16209 }
16210 d := ssa.AuxIntToInt64(v_1.AuxInt)
16211 v.Reset(ssaop.OpConst32)
16212 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
16213 return true
16214 }
16215
16216
16217 for {
16218 x := v_0
16219 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
16220 break
16221 }
16222 v.CopyOf(x)
16223 return true
16224 }
16225
16226
16227 for {
16228 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16229 break
16230 }
16231 v.Reset(ssaop.OpConst32)
16232 v.AuxInt = ssa.Int32ToAuxInt(0)
16233 return true
16234 }
16235
16236
16237
16238 for {
16239 if v_1.Op != ssaop.OpConst64 {
16240 break
16241 }
16242 c := ssa.AuxIntToInt64(v_1.AuxInt)
16243 if !(uint64(c) >= 32) {
16244 break
16245 }
16246 v.Reset(ssaop.OpConst32)
16247 v.AuxInt = ssa.Int32ToAuxInt(0)
16248 return true
16249 }
16250
16251
16252
16253 for {
16254 t := v.Type
16255 if v_0.Op != ssaop.OpLsh32x64 {
16256 break
16257 }
16258 _ = v_0.Args[1]
16259 x := v_0.Args[0]
16260 v_0_1 := v_0.Args[1]
16261 if v_0_1.Op != ssaop.OpConst64 {
16262 break
16263 }
16264 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
16265 if v_1.Op != ssaop.OpConst64 {
16266 break
16267 }
16268 d := ssa.AuxIntToInt64(v_1.AuxInt)
16269 if !(!uaddOvf(c, d)) {
16270 break
16271 }
16272 v.Reset(ssaop.OpLsh32x64)
16273 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16274 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
16275 v.AddArg2(x, v0)
16276 return true
16277 }
16278
16279
16280
16281 for {
16282 i := v_0
16283 if i.Op != ssaop.OpRsh32x64 {
16284 break
16285 }
16286 _ = i.Args[1]
16287 x := i.Args[0]
16288 i_1 := i.Args[1]
16289 if i_1.Op != ssaop.OpConst64 {
16290 break
16291 }
16292 c := ssa.AuxIntToInt64(i_1.AuxInt)
16293 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
16294 break
16295 }
16296 v.Reset(ssaop.OpAnd32)
16297 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
16298 v0.AuxInt = ssa.Int32ToAuxInt(int32(-1) << c)
16299 v.AddArg2(x, v0)
16300 return true
16301 }
16302
16303
16304
16305 for {
16306 i := v_0
16307 if i.Op != ssaop.OpRsh32Ux64 {
16308 break
16309 }
16310 _ = i.Args[1]
16311 x := i.Args[0]
16312 i_1 := i.Args[1]
16313 if i_1.Op != ssaop.OpConst64 {
16314 break
16315 }
16316 c := ssa.AuxIntToInt64(i_1.AuxInt)
16317 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
16318 break
16319 }
16320 v.Reset(ssaop.OpAnd32)
16321 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
16322 v0.AuxInt = ssa.Int32ToAuxInt(int32(-1) << c)
16323 v.AddArg2(x, v0)
16324 return true
16325 }
16326
16327
16328
16329 for {
16330 if v_0.Op != ssaop.OpRsh32Ux64 {
16331 break
16332 }
16333 _ = v_0.Args[1]
16334 v_0_0 := v_0.Args[0]
16335 if v_0_0.Op != ssaop.OpLsh32x64 {
16336 break
16337 }
16338 _ = v_0_0.Args[1]
16339 x := v_0_0.Args[0]
16340 v_0_0_1 := v_0_0.Args[1]
16341 if v_0_0_1.Op != ssaop.OpConst64 {
16342 break
16343 }
16344 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16345 v_0_1 := v_0.Args[1]
16346 if v_0_1.Op != ssaop.OpConst64 {
16347 break
16348 }
16349 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
16350 if v_1.Op != ssaop.OpConst64 {
16351 break
16352 }
16353 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
16354 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
16355 break
16356 }
16357 v.Reset(ssaop.OpLsh32x64)
16358 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
16359 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
16360 v.AddArg2(x, v0)
16361 return true
16362 }
16363
16364
16365
16366 for {
16367 if v_0.Op != ssaop.OpAnd32 {
16368 break
16369 }
16370 _ = v_0.Args[1]
16371 v_0_0 := v_0.Args[0]
16372 v_0_1 := v_0.Args[1]
16373 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16374 if v_0_0.Op != ssaop.OpRsh32x64 {
16375 continue
16376 }
16377 t := v_0_0.Type
16378 _ = v_0_0.Args[1]
16379 x := v_0_0.Args[0]
16380 v_0_0_1 := v_0_0.Args[1]
16381 if v_0_0_1.Op != ssaop.OpConst64 {
16382 continue
16383 }
16384 t2 := v_0_0_1.Type
16385 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16386 if v_0_1.Op != ssaop.OpConst32 {
16387 continue
16388 }
16389 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16390 if v_1.Op != ssaop.OpConst64 {
16391 continue
16392 }
16393 e := ssa.AuxIntToInt64(v_1.AuxInt)
16394 if !(c >= e) {
16395 continue
16396 }
16397 v.Reset(ssaop.OpAnd32)
16398 v0 := b.NewValue0(v.Pos, ssaop.OpRsh32x64, t)
16399 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16400 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16401 v0.AddArg2(x, v1)
16402 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16403 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16404 v.AddArg2(v0, v2)
16405 return true
16406 }
16407 break
16408 }
16409
16410
16411
16412 for {
16413 if v_0.Op != ssaop.OpAnd32 {
16414 break
16415 }
16416 _ = v_0.Args[1]
16417 v_0_0 := v_0.Args[0]
16418 v_0_1 := v_0.Args[1]
16419 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16420 if v_0_0.Op != ssaop.OpRsh32Ux64 {
16421 continue
16422 }
16423 t := v_0_0.Type
16424 _ = v_0_0.Args[1]
16425 x := v_0_0.Args[0]
16426 v_0_0_1 := v_0_0.Args[1]
16427 if v_0_0_1.Op != ssaop.OpConst64 {
16428 continue
16429 }
16430 t2 := v_0_0_1.Type
16431 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16432 if v_0_1.Op != ssaop.OpConst32 {
16433 continue
16434 }
16435 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16436 if v_1.Op != ssaop.OpConst64 {
16437 continue
16438 }
16439 e := ssa.AuxIntToInt64(v_1.AuxInt)
16440 if !(c >= e) {
16441 continue
16442 }
16443 v.Reset(ssaop.OpAnd32)
16444 v0 := b.NewValue0(v.Pos, ssaop.OpRsh32Ux64, t)
16445 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16446 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16447 v0.AddArg2(x, v1)
16448 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16449 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16450 v.AddArg2(v0, v2)
16451 return true
16452 }
16453 break
16454 }
16455
16456
16457
16458 for {
16459 if v_0.Op != ssaop.OpAnd32 {
16460 break
16461 }
16462 _ = v_0.Args[1]
16463 v_0_0 := v_0.Args[0]
16464 v_0_1 := v_0.Args[1]
16465 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16466 if v_0_0.Op != ssaop.OpRsh32x64 {
16467 continue
16468 }
16469 t := v_0_0.Type
16470 _ = v_0_0.Args[1]
16471 x := v_0_0.Args[0]
16472 v_0_0_1 := v_0_0.Args[1]
16473 if v_0_0_1.Op != ssaop.OpConst64 {
16474 continue
16475 }
16476 t2 := v_0_0_1.Type
16477 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16478 if v_0_1.Op != ssaop.OpConst32 {
16479 continue
16480 }
16481 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16482 if v_1.Op != ssaop.OpConst64 {
16483 continue
16484 }
16485 e := ssa.AuxIntToInt64(v_1.AuxInt)
16486 if !(c < e) {
16487 continue
16488 }
16489 v.Reset(ssaop.OpAnd32)
16490 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
16491 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16492 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16493 v0.AddArg2(x, v1)
16494 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16495 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16496 v.AddArg2(v0, v2)
16497 return true
16498 }
16499 break
16500 }
16501
16502
16503
16504 for {
16505 if v_0.Op != ssaop.OpAnd32 {
16506 break
16507 }
16508 _ = v_0.Args[1]
16509 v_0_0 := v_0.Args[0]
16510 v_0_1 := v_0.Args[1]
16511 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16512 if v_0_0.Op != ssaop.OpRsh32Ux64 {
16513 continue
16514 }
16515 t := v_0_0.Type
16516 _ = v_0_0.Args[1]
16517 x := v_0_0.Args[0]
16518 v_0_0_1 := v_0_0.Args[1]
16519 if v_0_0_1.Op != ssaop.OpConst64 {
16520 continue
16521 }
16522 t2 := v_0_0_1.Type
16523 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16524 if v_0_1.Op != ssaop.OpConst32 {
16525 continue
16526 }
16527 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16528 if v_1.Op != ssaop.OpConst64 {
16529 continue
16530 }
16531 e := ssa.AuxIntToInt64(v_1.AuxInt)
16532 if !(c < e) {
16533 continue
16534 }
16535 v.Reset(ssaop.OpAnd32)
16536 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
16537 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16538 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16539 v0.AddArg2(x, v1)
16540 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16541 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16542 v.AddArg2(v0, v2)
16543 return true
16544 }
16545 break
16546 }
16547
16548
16549
16550 for {
16551 if ssa.AuxIntToBool(v.AuxInt) != false {
16552 break
16553 }
16554 x := v_0
16555 con := v_1
16556 if con.Op != ssaop.OpConst64 {
16557 break
16558 }
16559 c := ssa.AuxIntToInt64(con.AuxInt)
16560 if !(0 < c && c < 32) {
16561 break
16562 }
16563 v.Reset(ssaop.OpLsh32x64)
16564 v.AuxInt = ssa.BoolToAuxInt(true)
16565 v.AddArg2(x, con)
16566 return true
16567 }
16568 return false
16569 }
16570 func rewriteValue_OpLsh32x8(v *ssa.Value) bool {
16571 v_1 := v.Args[1]
16572 v_0 := v.Args[0]
16573 b := v.Block
16574
16575
16576 for {
16577 x := v_0
16578 if v_1.Op != ssaop.OpConst8 {
16579 break
16580 }
16581 c := ssa.AuxIntToInt8(v_1.AuxInt)
16582 v.Reset(ssaop.OpLsh32x64)
16583 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16584 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
16585 v.AddArg2(x, v0)
16586 return true
16587 }
16588
16589
16590 for {
16591 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16592 break
16593 }
16594 v.Reset(ssaop.OpConst32)
16595 v.AuxInt = ssa.Int32ToAuxInt(0)
16596 return true
16597 }
16598
16599
16600
16601 for {
16602 if ssa.AuxIntToBool(v.AuxInt) != false {
16603 break
16604 }
16605 x := v_0
16606 con := v_1
16607 if con.Op != ssaop.OpConst8 {
16608 break
16609 }
16610 c := ssa.AuxIntToInt8(con.AuxInt)
16611 if !(0 < c && c < 32) {
16612 break
16613 }
16614 v.Reset(ssaop.OpLsh32x8)
16615 v.AuxInt = ssa.BoolToAuxInt(true)
16616 v.AddArg2(x, con)
16617 return true
16618 }
16619 return false
16620 }
16621 func rewriteValue_OpLsh64x16(v *ssa.Value) bool {
16622 v_1 := v.Args[1]
16623 v_0 := v.Args[0]
16624 b := v.Block
16625
16626
16627 for {
16628 x := v_0
16629 if v_1.Op != ssaop.OpConst16 {
16630 break
16631 }
16632 c := ssa.AuxIntToInt16(v_1.AuxInt)
16633 v.Reset(ssaop.OpLsh64x64)
16634 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16635 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
16636 v.AddArg2(x, v0)
16637 return true
16638 }
16639
16640
16641 for {
16642 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16643 break
16644 }
16645 v.Reset(ssaop.OpConst64)
16646 v.AuxInt = ssa.Int64ToAuxInt(0)
16647 return true
16648 }
16649
16650
16651
16652 for {
16653 if ssa.AuxIntToBool(v.AuxInt) != false {
16654 break
16655 }
16656 x := v_0
16657 con := v_1
16658 if con.Op != ssaop.OpConst16 {
16659 break
16660 }
16661 c := ssa.AuxIntToInt16(con.AuxInt)
16662 if !(0 < c && c < 64) {
16663 break
16664 }
16665 v.Reset(ssaop.OpLsh64x16)
16666 v.AuxInt = ssa.BoolToAuxInt(true)
16667 v.AddArg2(x, con)
16668 return true
16669 }
16670 return false
16671 }
16672 func rewriteValue_OpLsh64x32(v *ssa.Value) bool {
16673 v_1 := v.Args[1]
16674 v_0 := v.Args[0]
16675 b := v.Block
16676
16677
16678 for {
16679 x := v_0
16680 if v_1.Op != ssaop.OpConst32 {
16681 break
16682 }
16683 c := ssa.AuxIntToInt32(v_1.AuxInt)
16684 v.Reset(ssaop.OpLsh64x64)
16685 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16686 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
16687 v.AddArg2(x, v0)
16688 return true
16689 }
16690
16691
16692 for {
16693 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16694 break
16695 }
16696 v.Reset(ssaop.OpConst64)
16697 v.AuxInt = ssa.Int64ToAuxInt(0)
16698 return true
16699 }
16700
16701
16702
16703 for {
16704 if ssa.AuxIntToBool(v.AuxInt) != false {
16705 break
16706 }
16707 x := v_0
16708 con := v_1
16709 if con.Op != ssaop.OpConst32 {
16710 break
16711 }
16712 c := ssa.AuxIntToInt32(con.AuxInt)
16713 if !(0 < c && c < 64) {
16714 break
16715 }
16716 v.Reset(ssaop.OpLsh64x32)
16717 v.AuxInt = ssa.BoolToAuxInt(true)
16718 v.AddArg2(x, con)
16719 return true
16720 }
16721 return false
16722 }
16723 func rewriteValue_OpLsh64x64(v *ssa.Value) bool {
16724 v_1 := v.Args[1]
16725 v_0 := v.Args[0]
16726 b := v.Block
16727 typ := &b.Func.Config.Types
16728
16729
16730 for {
16731 if v_0.Op != ssaop.OpConst64 {
16732 break
16733 }
16734 c := ssa.AuxIntToInt64(v_0.AuxInt)
16735 if v_1.Op != ssaop.OpConst64 {
16736 break
16737 }
16738 d := ssa.AuxIntToInt64(v_1.AuxInt)
16739 v.Reset(ssaop.OpConst64)
16740 v.AuxInt = ssa.Int64ToAuxInt(c << uint64(d))
16741 return true
16742 }
16743
16744
16745 for {
16746 x := v_0
16747 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
16748 break
16749 }
16750 v.CopyOf(x)
16751 return true
16752 }
16753
16754
16755 for {
16756 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16757 break
16758 }
16759 v.Reset(ssaop.OpConst64)
16760 v.AuxInt = ssa.Int64ToAuxInt(0)
16761 return true
16762 }
16763
16764
16765
16766 for {
16767 if v_1.Op != ssaop.OpConst64 {
16768 break
16769 }
16770 c := ssa.AuxIntToInt64(v_1.AuxInt)
16771 if !(uint64(c) >= 64) {
16772 break
16773 }
16774 v.Reset(ssaop.OpConst64)
16775 v.AuxInt = ssa.Int64ToAuxInt(0)
16776 return true
16777 }
16778
16779
16780
16781 for {
16782 t := v.Type
16783 if v_0.Op != ssaop.OpLsh64x64 {
16784 break
16785 }
16786 _ = v_0.Args[1]
16787 x := v_0.Args[0]
16788 v_0_1 := v_0.Args[1]
16789 if v_0_1.Op != ssaop.OpConst64 {
16790 break
16791 }
16792 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
16793 if v_1.Op != ssaop.OpConst64 {
16794 break
16795 }
16796 d := ssa.AuxIntToInt64(v_1.AuxInt)
16797 if !(!uaddOvf(c, d)) {
16798 break
16799 }
16800 v.Reset(ssaop.OpLsh64x64)
16801 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16802 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
16803 v.AddArg2(x, v0)
16804 return true
16805 }
16806
16807
16808
16809 for {
16810 i := v_0
16811 if i.Op != ssaop.OpRsh64x64 {
16812 break
16813 }
16814 _ = i.Args[1]
16815 x := i.Args[0]
16816 i_1 := i.Args[1]
16817 if i_1.Op != ssaop.OpConst64 {
16818 break
16819 }
16820 c := ssa.AuxIntToInt64(i_1.AuxInt)
16821 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
16822 break
16823 }
16824 v.Reset(ssaop.OpAnd64)
16825 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
16826 v0.AuxInt = ssa.Int64ToAuxInt(int64(-1) << c)
16827 v.AddArg2(x, v0)
16828 return true
16829 }
16830
16831
16832
16833 for {
16834 i := v_0
16835 if i.Op != ssaop.OpRsh64Ux64 {
16836 break
16837 }
16838 _ = i.Args[1]
16839 x := i.Args[0]
16840 i_1 := i.Args[1]
16841 if i_1.Op != ssaop.OpConst64 {
16842 break
16843 }
16844 c := ssa.AuxIntToInt64(i_1.AuxInt)
16845 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
16846 break
16847 }
16848 v.Reset(ssaop.OpAnd64)
16849 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
16850 v0.AuxInt = ssa.Int64ToAuxInt(int64(-1) << c)
16851 v.AddArg2(x, v0)
16852 return true
16853 }
16854
16855
16856
16857 for {
16858 if v_0.Op != ssaop.OpRsh64Ux64 {
16859 break
16860 }
16861 _ = v_0.Args[1]
16862 v_0_0 := v_0.Args[0]
16863 if v_0_0.Op != ssaop.OpLsh64x64 {
16864 break
16865 }
16866 _ = v_0_0.Args[1]
16867 x := v_0_0.Args[0]
16868 v_0_0_1 := v_0_0.Args[1]
16869 if v_0_0_1.Op != ssaop.OpConst64 {
16870 break
16871 }
16872 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16873 v_0_1 := v_0.Args[1]
16874 if v_0_1.Op != ssaop.OpConst64 {
16875 break
16876 }
16877 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
16878 if v_1.Op != ssaop.OpConst64 {
16879 break
16880 }
16881 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
16882 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
16883 break
16884 }
16885 v.Reset(ssaop.OpLsh64x64)
16886 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
16887 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
16888 v.AddArg2(x, v0)
16889 return true
16890 }
16891
16892
16893
16894 for {
16895 if v_0.Op != ssaop.OpAnd64 {
16896 break
16897 }
16898 _ = v_0.Args[1]
16899 v_0_0 := v_0.Args[0]
16900 v_0_1 := v_0.Args[1]
16901 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16902 if v_0_0.Op != ssaop.OpRsh64x64 {
16903 continue
16904 }
16905 t := v_0_0.Type
16906 _ = v_0_0.Args[1]
16907 x := v_0_0.Args[0]
16908 v_0_0_1 := v_0_0.Args[1]
16909 if v_0_0_1.Op != ssaop.OpConst64 {
16910 continue
16911 }
16912 t2 := v_0_0_1.Type
16913 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16914 if v_0_1.Op != ssaop.OpConst64 {
16915 continue
16916 }
16917 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
16918 if v_1.Op != ssaop.OpConst64 {
16919 continue
16920 }
16921 e := ssa.AuxIntToInt64(v_1.AuxInt)
16922 if !(c >= e) {
16923 continue
16924 }
16925 v.Reset(ssaop.OpAnd64)
16926 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64x64, t)
16927 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16928 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16929 v0.AddArg2(x, v1)
16930 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16931 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
16932 v.AddArg2(v0, v2)
16933 return true
16934 }
16935 break
16936 }
16937
16938
16939
16940 for {
16941 if v_0.Op != ssaop.OpAnd64 {
16942 break
16943 }
16944 _ = v_0.Args[1]
16945 v_0_0 := v_0.Args[0]
16946 v_0_1 := v_0.Args[1]
16947 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16948 if v_0_0.Op != ssaop.OpRsh64Ux64 {
16949 continue
16950 }
16951 t := v_0_0.Type
16952 _ = v_0_0.Args[1]
16953 x := v_0_0.Args[0]
16954 v_0_0_1 := v_0_0.Args[1]
16955 if v_0_0_1.Op != ssaop.OpConst64 {
16956 continue
16957 }
16958 t2 := v_0_0_1.Type
16959 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16960 if v_0_1.Op != ssaop.OpConst64 {
16961 continue
16962 }
16963 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
16964 if v_1.Op != ssaop.OpConst64 {
16965 continue
16966 }
16967 e := ssa.AuxIntToInt64(v_1.AuxInt)
16968 if !(c >= e) {
16969 continue
16970 }
16971 v.Reset(ssaop.OpAnd64)
16972 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64Ux64, t)
16973 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16974 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16975 v0.AddArg2(x, v1)
16976 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16977 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
16978 v.AddArg2(v0, v2)
16979 return true
16980 }
16981 break
16982 }
16983
16984
16985
16986 for {
16987 if v_0.Op != ssaop.OpAnd64 {
16988 break
16989 }
16990 _ = v_0.Args[1]
16991 v_0_0 := v_0.Args[0]
16992 v_0_1 := v_0.Args[1]
16993 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16994 if v_0_0.Op != ssaop.OpRsh64x64 {
16995 continue
16996 }
16997 t := v_0_0.Type
16998 _ = v_0_0.Args[1]
16999 x := v_0_0.Args[0]
17000 v_0_0_1 := v_0_0.Args[1]
17001 if v_0_0_1.Op != ssaop.OpConst64 {
17002 continue
17003 }
17004 t2 := v_0_0_1.Type
17005 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17006 if v_0_1.Op != ssaop.OpConst64 {
17007 continue
17008 }
17009 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
17010 if v_1.Op != ssaop.OpConst64 {
17011 continue
17012 }
17013 e := ssa.AuxIntToInt64(v_1.AuxInt)
17014 if !(c < e) {
17015 continue
17016 }
17017 v.Reset(ssaop.OpAnd64)
17018 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
17019 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17020 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17021 v0.AddArg2(x, v1)
17022 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17023 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
17024 v.AddArg2(v0, v2)
17025 return true
17026 }
17027 break
17028 }
17029
17030
17031
17032 for {
17033 if v_0.Op != ssaop.OpAnd64 {
17034 break
17035 }
17036 _ = v_0.Args[1]
17037 v_0_0 := v_0.Args[0]
17038 v_0_1 := v_0.Args[1]
17039 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17040 if v_0_0.Op != ssaop.OpRsh64Ux64 {
17041 continue
17042 }
17043 t := v_0_0.Type
17044 _ = v_0_0.Args[1]
17045 x := v_0_0.Args[0]
17046 v_0_0_1 := v_0_0.Args[1]
17047 if v_0_0_1.Op != ssaop.OpConst64 {
17048 continue
17049 }
17050 t2 := v_0_0_1.Type
17051 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17052 if v_0_1.Op != ssaop.OpConst64 {
17053 continue
17054 }
17055 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
17056 if v_1.Op != ssaop.OpConst64 {
17057 continue
17058 }
17059 e := ssa.AuxIntToInt64(v_1.AuxInt)
17060 if !(c < e) {
17061 continue
17062 }
17063 v.Reset(ssaop.OpAnd64)
17064 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
17065 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17066 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17067 v0.AddArg2(x, v1)
17068 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17069 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
17070 v.AddArg2(v0, v2)
17071 return true
17072 }
17073 break
17074 }
17075
17076
17077
17078 for {
17079 if ssa.AuxIntToBool(v.AuxInt) != false {
17080 break
17081 }
17082 x := v_0
17083 con := v_1
17084 if con.Op != ssaop.OpConst64 {
17085 break
17086 }
17087 c := ssa.AuxIntToInt64(con.AuxInt)
17088 if !(0 < c && c < 64) {
17089 break
17090 }
17091 v.Reset(ssaop.OpLsh64x64)
17092 v.AuxInt = ssa.BoolToAuxInt(true)
17093 v.AddArg2(x, con)
17094 return true
17095 }
17096 return false
17097 }
17098 func rewriteValue_OpLsh64x8(v *ssa.Value) bool {
17099 v_1 := v.Args[1]
17100 v_0 := v.Args[0]
17101 b := v.Block
17102
17103
17104 for {
17105 x := v_0
17106 if v_1.Op != ssaop.OpConst8 {
17107 break
17108 }
17109 c := ssa.AuxIntToInt8(v_1.AuxInt)
17110 v.Reset(ssaop.OpLsh64x64)
17111 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17112 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
17113 v.AddArg2(x, v0)
17114 return true
17115 }
17116
17117
17118 for {
17119 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
17120 break
17121 }
17122 v.Reset(ssaop.OpConst64)
17123 v.AuxInt = ssa.Int64ToAuxInt(0)
17124 return true
17125 }
17126
17127
17128
17129 for {
17130 if ssa.AuxIntToBool(v.AuxInt) != false {
17131 break
17132 }
17133 x := v_0
17134 con := v_1
17135 if con.Op != ssaop.OpConst8 {
17136 break
17137 }
17138 c := ssa.AuxIntToInt8(con.AuxInt)
17139 if !(0 < c && c < 64) {
17140 break
17141 }
17142 v.Reset(ssaop.OpLsh64x8)
17143 v.AuxInt = ssa.BoolToAuxInt(true)
17144 v.AddArg2(x, con)
17145 return true
17146 }
17147 return false
17148 }
17149 func rewriteValue_OpLsh8x16(v *ssa.Value) bool {
17150 v_1 := v.Args[1]
17151 v_0 := v.Args[0]
17152 b := v.Block
17153
17154
17155 for {
17156 x := v_0
17157 if v_1.Op != ssaop.OpConst16 {
17158 break
17159 }
17160 c := ssa.AuxIntToInt16(v_1.AuxInt)
17161 v.Reset(ssaop.OpLsh8x64)
17162 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17163 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
17164 v.AddArg2(x, v0)
17165 return true
17166 }
17167
17168
17169 for {
17170 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17171 break
17172 }
17173 v.Reset(ssaop.OpConst8)
17174 v.AuxInt = ssa.Int8ToAuxInt(0)
17175 return true
17176 }
17177
17178
17179
17180 for {
17181 if ssa.AuxIntToBool(v.AuxInt) != false {
17182 break
17183 }
17184 x := v_0
17185 con := v_1
17186 if con.Op != ssaop.OpConst16 {
17187 break
17188 }
17189 c := ssa.AuxIntToInt16(con.AuxInt)
17190 if !(0 < c && c < 8) {
17191 break
17192 }
17193 v.Reset(ssaop.OpLsh8x16)
17194 v.AuxInt = ssa.BoolToAuxInt(true)
17195 v.AddArg2(x, con)
17196 return true
17197 }
17198 return false
17199 }
17200 func rewriteValue_OpLsh8x32(v *ssa.Value) bool {
17201 v_1 := v.Args[1]
17202 v_0 := v.Args[0]
17203 b := v.Block
17204
17205
17206 for {
17207 x := v_0
17208 if v_1.Op != ssaop.OpConst32 {
17209 break
17210 }
17211 c := ssa.AuxIntToInt32(v_1.AuxInt)
17212 v.Reset(ssaop.OpLsh8x64)
17213 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17214 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
17215 v.AddArg2(x, v0)
17216 return true
17217 }
17218
17219
17220 for {
17221 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17222 break
17223 }
17224 v.Reset(ssaop.OpConst8)
17225 v.AuxInt = ssa.Int8ToAuxInt(0)
17226 return true
17227 }
17228
17229
17230
17231 for {
17232 if ssa.AuxIntToBool(v.AuxInt) != false {
17233 break
17234 }
17235 x := v_0
17236 con := v_1
17237 if con.Op != ssaop.OpConst32 {
17238 break
17239 }
17240 c := ssa.AuxIntToInt32(con.AuxInt)
17241 if !(0 < c && c < 8) {
17242 break
17243 }
17244 v.Reset(ssaop.OpLsh8x32)
17245 v.AuxInt = ssa.BoolToAuxInt(true)
17246 v.AddArg2(x, con)
17247 return true
17248 }
17249 return false
17250 }
17251 func rewriteValue_OpLsh8x64(v *ssa.Value) bool {
17252 v_1 := v.Args[1]
17253 v_0 := v.Args[0]
17254 b := v.Block
17255 typ := &b.Func.Config.Types
17256
17257
17258 for {
17259 if v_0.Op != ssaop.OpConst8 {
17260 break
17261 }
17262 c := ssa.AuxIntToInt8(v_0.AuxInt)
17263 if v_1.Op != ssaop.OpConst64 {
17264 break
17265 }
17266 d := ssa.AuxIntToInt64(v_1.AuxInt)
17267 v.Reset(ssaop.OpConst8)
17268 v.AuxInt = ssa.Int8ToAuxInt(c << uint64(d))
17269 return true
17270 }
17271
17272
17273 for {
17274 x := v_0
17275 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
17276 break
17277 }
17278 v.CopyOf(x)
17279 return true
17280 }
17281
17282
17283 for {
17284 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17285 break
17286 }
17287 v.Reset(ssaop.OpConst8)
17288 v.AuxInt = ssa.Int8ToAuxInt(0)
17289 return true
17290 }
17291
17292
17293
17294 for {
17295 if v_1.Op != ssaop.OpConst64 {
17296 break
17297 }
17298 c := ssa.AuxIntToInt64(v_1.AuxInt)
17299 if !(uint64(c) >= 8) {
17300 break
17301 }
17302 v.Reset(ssaop.OpConst8)
17303 v.AuxInt = ssa.Int8ToAuxInt(0)
17304 return true
17305 }
17306
17307
17308
17309 for {
17310 t := v.Type
17311 if v_0.Op != ssaop.OpLsh8x64 {
17312 break
17313 }
17314 _ = v_0.Args[1]
17315 x := v_0.Args[0]
17316 v_0_1 := v_0.Args[1]
17317 if v_0_1.Op != ssaop.OpConst64 {
17318 break
17319 }
17320 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
17321 if v_1.Op != ssaop.OpConst64 {
17322 break
17323 }
17324 d := ssa.AuxIntToInt64(v_1.AuxInt)
17325 if !(!uaddOvf(c, d)) {
17326 break
17327 }
17328 v.Reset(ssaop.OpLsh8x64)
17329 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17330 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
17331 v.AddArg2(x, v0)
17332 return true
17333 }
17334
17335
17336
17337 for {
17338 i := v_0
17339 if i.Op != ssaop.OpRsh8x64 {
17340 break
17341 }
17342 _ = i.Args[1]
17343 x := i.Args[0]
17344 i_1 := i.Args[1]
17345 if i_1.Op != ssaop.OpConst64 {
17346 break
17347 }
17348 c := ssa.AuxIntToInt64(i_1.AuxInt)
17349 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
17350 break
17351 }
17352 v.Reset(ssaop.OpAnd8)
17353 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
17354 v0.AuxInt = ssa.Int8ToAuxInt(int8(-1) << c)
17355 v.AddArg2(x, v0)
17356 return true
17357 }
17358
17359
17360
17361 for {
17362 i := v_0
17363 if i.Op != ssaop.OpRsh8Ux64 {
17364 break
17365 }
17366 _ = i.Args[1]
17367 x := i.Args[0]
17368 i_1 := i.Args[1]
17369 if i_1.Op != ssaop.OpConst64 {
17370 break
17371 }
17372 c := ssa.AuxIntToInt64(i_1.AuxInt)
17373 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
17374 break
17375 }
17376 v.Reset(ssaop.OpAnd8)
17377 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
17378 v0.AuxInt = ssa.Int8ToAuxInt(int8(-1) << c)
17379 v.AddArg2(x, v0)
17380 return true
17381 }
17382
17383
17384
17385 for {
17386 if v_0.Op != ssaop.OpRsh8Ux64 {
17387 break
17388 }
17389 _ = v_0.Args[1]
17390 v_0_0 := v_0.Args[0]
17391 if v_0_0.Op != ssaop.OpLsh8x64 {
17392 break
17393 }
17394 _ = v_0_0.Args[1]
17395 x := v_0_0.Args[0]
17396 v_0_0_1 := v_0_0.Args[1]
17397 if v_0_0_1.Op != ssaop.OpConst64 {
17398 break
17399 }
17400 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17401 v_0_1 := v_0.Args[1]
17402 if v_0_1.Op != ssaop.OpConst64 {
17403 break
17404 }
17405 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
17406 if v_1.Op != ssaop.OpConst64 {
17407 break
17408 }
17409 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
17410 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
17411 break
17412 }
17413 v.Reset(ssaop.OpLsh8x64)
17414 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
17415 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
17416 v.AddArg2(x, v0)
17417 return true
17418 }
17419
17420
17421
17422 for {
17423 if v_0.Op != ssaop.OpAnd8 {
17424 break
17425 }
17426 _ = v_0.Args[1]
17427 v_0_0 := v_0.Args[0]
17428 v_0_1 := v_0.Args[1]
17429 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17430 if v_0_0.Op != ssaop.OpRsh8x64 {
17431 continue
17432 }
17433 t := v_0_0.Type
17434 _ = v_0_0.Args[1]
17435 x := v_0_0.Args[0]
17436 v_0_0_1 := v_0_0.Args[1]
17437 if v_0_0_1.Op != ssaop.OpConst64 {
17438 continue
17439 }
17440 t2 := v_0_0_1.Type
17441 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17442 if v_0_1.Op != ssaop.OpConst8 {
17443 continue
17444 }
17445 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17446 if v_1.Op != ssaop.OpConst64 {
17447 continue
17448 }
17449 e := ssa.AuxIntToInt64(v_1.AuxInt)
17450 if !(c >= e) {
17451 continue
17452 }
17453 v.Reset(ssaop.OpAnd8)
17454 v0 := b.NewValue0(v.Pos, ssaop.OpRsh8x64, t)
17455 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17456 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
17457 v0.AddArg2(x, v1)
17458 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17459 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17460 v.AddArg2(v0, v2)
17461 return true
17462 }
17463 break
17464 }
17465
17466
17467
17468 for {
17469 if v_0.Op != ssaop.OpAnd8 {
17470 break
17471 }
17472 _ = v_0.Args[1]
17473 v_0_0 := v_0.Args[0]
17474 v_0_1 := v_0.Args[1]
17475 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17476 if v_0_0.Op != ssaop.OpRsh8Ux64 {
17477 continue
17478 }
17479 t := v_0_0.Type
17480 _ = v_0_0.Args[1]
17481 x := v_0_0.Args[0]
17482 v_0_0_1 := v_0_0.Args[1]
17483 if v_0_0_1.Op != ssaop.OpConst64 {
17484 continue
17485 }
17486 t2 := v_0_0_1.Type
17487 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17488 if v_0_1.Op != ssaop.OpConst8 {
17489 continue
17490 }
17491 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17492 if v_1.Op != ssaop.OpConst64 {
17493 continue
17494 }
17495 e := ssa.AuxIntToInt64(v_1.AuxInt)
17496 if !(c >= e) {
17497 continue
17498 }
17499 v.Reset(ssaop.OpAnd8)
17500 v0 := b.NewValue0(v.Pos, ssaop.OpRsh8Ux64, t)
17501 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17502 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
17503 v0.AddArg2(x, v1)
17504 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17505 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17506 v.AddArg2(v0, v2)
17507 return true
17508 }
17509 break
17510 }
17511
17512
17513
17514 for {
17515 if v_0.Op != ssaop.OpAnd8 {
17516 break
17517 }
17518 _ = v_0.Args[1]
17519 v_0_0 := v_0.Args[0]
17520 v_0_1 := v_0.Args[1]
17521 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17522 if v_0_0.Op != ssaop.OpRsh8x64 {
17523 continue
17524 }
17525 t := v_0_0.Type
17526 _ = v_0_0.Args[1]
17527 x := v_0_0.Args[0]
17528 v_0_0_1 := v_0_0.Args[1]
17529 if v_0_0_1.Op != ssaop.OpConst64 {
17530 continue
17531 }
17532 t2 := v_0_0_1.Type
17533 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17534 if v_0_1.Op != ssaop.OpConst8 {
17535 continue
17536 }
17537 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17538 if v_1.Op != ssaop.OpConst64 {
17539 continue
17540 }
17541 e := ssa.AuxIntToInt64(v_1.AuxInt)
17542 if !(c < e) {
17543 continue
17544 }
17545 v.Reset(ssaop.OpAnd8)
17546 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
17547 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17548 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17549 v0.AddArg2(x, v1)
17550 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17551 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17552 v.AddArg2(v0, v2)
17553 return true
17554 }
17555 break
17556 }
17557
17558
17559
17560 for {
17561 if v_0.Op != ssaop.OpAnd8 {
17562 break
17563 }
17564 _ = v_0.Args[1]
17565 v_0_0 := v_0.Args[0]
17566 v_0_1 := v_0.Args[1]
17567 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17568 if v_0_0.Op != ssaop.OpRsh8Ux64 {
17569 continue
17570 }
17571 t := v_0_0.Type
17572 _ = v_0_0.Args[1]
17573 x := v_0_0.Args[0]
17574 v_0_0_1 := v_0_0.Args[1]
17575 if v_0_0_1.Op != ssaop.OpConst64 {
17576 continue
17577 }
17578 t2 := v_0_0_1.Type
17579 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17580 if v_0_1.Op != ssaop.OpConst8 {
17581 continue
17582 }
17583 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17584 if v_1.Op != ssaop.OpConst64 {
17585 continue
17586 }
17587 e := ssa.AuxIntToInt64(v_1.AuxInt)
17588 if !(c < e) {
17589 continue
17590 }
17591 v.Reset(ssaop.OpAnd8)
17592 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
17593 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17594 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17595 v0.AddArg2(x, v1)
17596 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17597 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17598 v.AddArg2(v0, v2)
17599 return true
17600 }
17601 break
17602 }
17603
17604
17605
17606 for {
17607 if ssa.AuxIntToBool(v.AuxInt) != false {
17608 break
17609 }
17610 x := v_0
17611 con := v_1
17612 if con.Op != ssaop.OpConst64 {
17613 break
17614 }
17615 c := ssa.AuxIntToInt64(con.AuxInt)
17616 if !(0 < c && c < 8) {
17617 break
17618 }
17619 v.Reset(ssaop.OpLsh8x64)
17620 v.AuxInt = ssa.BoolToAuxInt(true)
17621 v.AddArg2(x, con)
17622 return true
17623 }
17624 return false
17625 }
17626 func rewriteValue_OpLsh8x8(v *ssa.Value) bool {
17627 v_1 := v.Args[1]
17628 v_0 := v.Args[0]
17629 b := v.Block
17630
17631
17632 for {
17633 x := v_0
17634 if v_1.Op != ssaop.OpConst8 {
17635 break
17636 }
17637 c := ssa.AuxIntToInt8(v_1.AuxInt)
17638 v.Reset(ssaop.OpLsh8x64)
17639 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17640 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
17641 v.AddArg2(x, v0)
17642 return true
17643 }
17644
17645
17646 for {
17647 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17648 break
17649 }
17650 v.Reset(ssaop.OpConst8)
17651 v.AuxInt = ssa.Int8ToAuxInt(0)
17652 return true
17653 }
17654
17655
17656
17657 for {
17658 if ssa.AuxIntToBool(v.AuxInt) != false {
17659 break
17660 }
17661 x := v_0
17662 con := v_1
17663 if con.Op != ssaop.OpConst8 {
17664 break
17665 }
17666 c := ssa.AuxIntToInt8(con.AuxInt)
17667 if !(0 < c && c < 8) {
17668 break
17669 }
17670 v.Reset(ssaop.OpLsh8x8)
17671 v.AuxInt = ssa.BoolToAuxInt(true)
17672 v.AddArg2(x, con)
17673 return true
17674 }
17675 return false
17676 }
17677 func rewriteValue_OpMemEq(v *ssa.Value) bool {
17678 v_3 := v.Args[3]
17679 v_2 := v.Args[2]
17680 v_1 := v.Args[1]
17681 v_0 := v.Args[0]
17682 b := v.Block
17683 config := b.Func.Config
17684 typ := &b.Func.Config.Types
17685
17686
17687 for {
17688 sptr := v_0
17689 tptr := v_1
17690 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 {
17691 break
17692 }
17693 mem := v_3
17694 v.Reset(ssaop.OpEq8)
17695 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17696 v0.AddArg2(sptr, mem)
17697 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17698 v1.AddArg2(tptr, mem)
17699 v.AddArg2(v0, v1)
17700 return true
17701 }
17702
17703
17704
17705 for {
17706 sptr := v_0
17707 tptr := v_1
17708 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 {
17709 break
17710 }
17711 mem := v_3
17712 if !(canLoadUnaligned(config)) {
17713 break
17714 }
17715 v.Reset(ssaop.OpEq16)
17716 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17717 v0.AddArg2(sptr, mem)
17718 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17719 v1.AddArg2(tptr, mem)
17720 v.AddArg2(v0, v1)
17721 return true
17722 }
17723
17724
17725
17726 for {
17727 sptr := v_0
17728 tptr := v_1
17729 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 {
17730 break
17731 }
17732 mem := v_3
17733 if !(canLoadUnaligned(config)) {
17734 break
17735 }
17736 v.Reset(ssaop.OpEq32)
17737 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17738 v0.AddArg2(sptr, mem)
17739 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17740 v1.AddArg2(tptr, mem)
17741 v.AddArg2(v0, v1)
17742 return true
17743 }
17744
17745
17746
17747 for {
17748 sptr := v_0
17749 tptr := v_1
17750 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 8 {
17751 break
17752 }
17753 mem := v_3
17754 if !(canLoadUnaligned(config) && config.PtrSize == 8) {
17755 break
17756 }
17757 v.Reset(ssaop.OpEq64)
17758 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17759 v0.AddArg2(sptr, mem)
17760 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17761 v1.AddArg2(tptr, mem)
17762 v.AddArg2(v0, v1)
17763 return true
17764 }
17765
17766
17767 for {
17768 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 {
17769 break
17770 }
17771 v.Reset(ssaop.OpConstBool)
17772 v.Type = typ.Bool
17773 v.AuxInt = ssa.BoolToAuxInt(true)
17774 return true
17775 }
17776
17777
17778
17779 for {
17780 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
17781 p := v_0
17782 q := v_1
17783 if !(ssa.IsSamePtr(p, q)) {
17784 continue
17785 }
17786 v.Reset(ssaop.OpConstBool)
17787 v.Type = typ.Bool
17788 v.AuxInt = ssa.BoolToAuxInt(true)
17789 return true
17790 }
17791 break
17792 }
17793
17794
17795
17796 for {
17797 p := v_0
17798 q := v_1
17799 if v_2.Op != ssaop.OpConst64 {
17800 break
17801 }
17802 c := ssa.AuxIntToInt64(v_2.AuxInt)
17803 mem := v_3
17804 if !((c == 3 || c == 5 || c == 9 || c == 17) && canLoadUnaligned(config) && config.RegSize == 8) {
17805 break
17806 }
17807 v.Reset(ssaop.OpAndB)
17808 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17809 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17810 v1.AuxInt = ssa.Int64ToAuxInt(c - 1)
17811 v0.AddArg4(p, q, v1, mem)
17812 v2 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
17813 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17814 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17815 v4.AuxInt = ssa.Int64ToAuxInt(c - 1)
17816 v4.AddArg(p)
17817 v3.AddArg2(v4, mem)
17818 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17819 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17820 v6.AuxInt = ssa.Int64ToAuxInt(c - 1)
17821 v6.AddArg(q)
17822 v5.AddArg2(v6, mem)
17823 v2.AddArg2(v3, v5)
17824 v.AddArg2(v0, v2)
17825 return true
17826 }
17827
17828
17829
17830 for {
17831 p := v_0
17832 q := v_1
17833 if v_2.Op != ssaop.OpConst64 {
17834 break
17835 }
17836 c := ssa.AuxIntToInt64(v_2.AuxInt)
17837 mem := v_3
17838 if !((c == 6 || c == 10 || c == 18) && canLoadUnaligned(config) && config.RegSize == 8) {
17839 break
17840 }
17841 v.Reset(ssaop.OpAndB)
17842 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17843 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17844 v1.AuxInt = ssa.Int64ToAuxInt(c - 2)
17845 v0.AddArg4(p, q, v1, mem)
17846 v2 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
17847 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17848 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17849 v4.AuxInt = ssa.Int64ToAuxInt(c - 2)
17850 v4.AddArg(p)
17851 v3.AddArg2(v4, mem)
17852 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17853 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17854 v6.AuxInt = ssa.Int64ToAuxInt(c - 2)
17855 v6.AddArg(q)
17856 v5.AddArg2(v6, mem)
17857 v2.AddArg2(v3, v5)
17858 v.AddArg2(v0, v2)
17859 return true
17860 }
17861
17862
17863
17864 for {
17865 p := v_0
17866 q := v_1
17867 if v_2.Op != ssaop.OpConst64 {
17868 break
17869 }
17870 c := ssa.AuxIntToInt64(v_2.AuxInt)
17871 mem := v_3
17872 if !((c == 7 || c == 11 || c == 19 || c == 20) && canLoadUnaligned(config) && config.RegSize == 8) {
17873 break
17874 }
17875 v.Reset(ssaop.OpAndB)
17876 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17877 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17878 v1.AuxInt = ssa.Int64ToAuxInt(min(c-3, 16))
17879 v0.AddArg4(p, q, v1, mem)
17880 v2 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
17881 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17882 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17883 v4.AuxInt = ssa.Int64ToAuxInt(c - 4)
17884 v4.AddArg(p)
17885 v3.AddArg2(v4, mem)
17886 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17887 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17888 v6.AuxInt = ssa.Int64ToAuxInt(c - 4)
17889 v6.AddArg(q)
17890 v5.AddArg2(v6, mem)
17891 v2.AddArg2(v3, v5)
17892 v.AddArg2(v0, v2)
17893 return true
17894 }
17895
17896
17897
17898 for {
17899 p := v_0
17900 q := v_1
17901 if v_2.Op != ssaop.OpConst64 {
17902 break
17903 }
17904 c := ssa.AuxIntToInt64(v_2.AuxInt)
17905 mem := v_3
17906 if !(((c >= 12 && c <= 16) || (c >= 21 && c <= 24)) && canLoadUnaligned(config) && config.RegSize == 8) {
17907 break
17908 }
17909 v.Reset(ssaop.OpAndB)
17910 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17911 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17912 v1.AuxInt = ssa.Int64ToAuxInt(8 + int64(bool2int(c > 16))*8)
17913 v0.AddArg4(p, q, v1, mem)
17914 v2 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
17915 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17916 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17917 v4.AuxInt = ssa.Int64ToAuxInt(c - 8)
17918 v4.AddArg(p)
17919 v3.AddArg2(v4, mem)
17920 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17921 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17922 v6.AuxInt = ssa.Int64ToAuxInt(c - 8)
17923 v6.AddArg(q)
17924 v5.AddArg2(v6, mem)
17925 v2.AddArg2(v3, v5)
17926 v.AddArg2(v0, v2)
17927 return true
17928 }
17929
17930
17931
17932 for {
17933 p := v_0
17934 q := v_1
17935 if v_2.Op != ssaop.OpConst64 {
17936 break
17937 }
17938 c := ssa.AuxIntToInt64(v_2.AuxInt)
17939 mem := v_3
17940 if !(c >= 25 && c <= 32 && canLoadUnaligned(config) && config.RegSize == 8) {
17941 break
17942 }
17943 v.Reset(ssaop.OpAndB)
17944 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17945 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17946 v1.AuxInt = ssa.Int64ToAuxInt(16)
17947 v0.AddArg4(p, q, v1, mem)
17948 v2 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17949 v3 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17950 v3.AuxInt = ssa.Int64ToAuxInt(16)
17951 v3.AddArg(p)
17952 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17953 v4.AuxInt = ssa.Int64ToAuxInt(16)
17954 v4.AddArg(q)
17955 v5 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17956 v5.AuxInt = ssa.Int64ToAuxInt(c - 16)
17957 v2.AddArg4(v3, v4, v5, mem)
17958 v.AddArg2(v0, v2)
17959 return true
17960 }
17961 return false
17962 }
17963 func rewriteValue_OpMod16(v *ssa.Value) bool {
17964 v_1 := v.Args[1]
17965 v_0 := v.Args[0]
17966 b := v.Block
17967
17968
17969
17970 for {
17971 if v_0.Op != ssaop.OpConst16 {
17972 break
17973 }
17974 c := ssa.AuxIntToInt16(v_0.AuxInt)
17975 if v_1.Op != ssaop.OpConst16 {
17976 break
17977 }
17978 d := ssa.AuxIntToInt16(v_1.AuxInt)
17979 if !(d != 0) {
17980 break
17981 }
17982 v.Reset(ssaop.OpConst16)
17983 v.AuxInt = ssa.Int16ToAuxInt(c % d)
17984 return true
17985 }
17986
17987
17988
17989 for {
17990 t := v.Type
17991 n := v_0
17992 if v_1.Op != ssaop.OpConst16 {
17993 break
17994 }
17995 c := ssa.AuxIntToInt16(v_1.AuxInt)
17996 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
17997 break
17998 }
17999 v.Reset(ssaop.OpAnd16)
18000 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18001 v0.AuxInt = ssa.Int16ToAuxInt(c - 1)
18002 v.AddArg2(n, v0)
18003 return true
18004 }
18005
18006
18007
18008 for {
18009 t := v.Type
18010 n := v_0
18011 if v_1.Op != ssaop.OpConst16 {
18012 break
18013 }
18014 c := ssa.AuxIntToInt16(v_1.AuxInt)
18015 if !(c < 0 && c != -1<<15) {
18016 break
18017 }
18018 v.Reset(ssaop.OpMod16)
18019 v.Type = t
18020 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18021 v0.AuxInt = ssa.Int16ToAuxInt(-c)
18022 v.AddArg2(n, v0)
18023 return true
18024 }
18025
18026
18027
18028 for {
18029 t := v.Type
18030 x := v_0
18031 if v_1.Op != ssaop.OpConst16 {
18032 break
18033 }
18034 c := ssa.AuxIntToInt16(v_1.AuxInt)
18035 if !(x.Op != ssaop.OpConst16 && (c > 0 || c == -1<<15)) {
18036 break
18037 }
18038 v.Reset(ssaop.OpSub16)
18039 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
18040 v1 := b.NewValue0(v.Pos, ssaop.OpDiv16, t)
18041 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18042 v2.AuxInt = ssa.Int16ToAuxInt(c)
18043 v1.AddArg2(x, v2)
18044 v0.AddArg2(v1, v2)
18045 v.AddArg2(x, v0)
18046 return true
18047 }
18048 return false
18049 }
18050 func rewriteValue_OpMod16u(v *ssa.Value) bool {
18051 v_1 := v.Args[1]
18052 v_0 := v.Args[0]
18053 b := v.Block
18054
18055
18056
18057 for {
18058 if v_0.Op != ssaop.OpConst16 {
18059 break
18060 }
18061 c := ssa.AuxIntToInt16(v_0.AuxInt)
18062 if v_1.Op != ssaop.OpConst16 {
18063 break
18064 }
18065 d := ssa.AuxIntToInt16(v_1.AuxInt)
18066 if !(d != 0) {
18067 break
18068 }
18069 v.Reset(ssaop.OpConst16)
18070 v.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) % uint16(d)))
18071 return true
18072 }
18073
18074
18075
18076 for {
18077 t := v.Type
18078 n := v_0
18079 if v_1.Op != ssaop.OpConst16 {
18080 break
18081 }
18082 c := ssa.AuxIntToInt16(v_1.AuxInt)
18083 if !(ssa.IsPowerOfTwo(uint16(c))) {
18084 break
18085 }
18086 v.Reset(ssaop.OpAnd16)
18087 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18088 v0.AuxInt = ssa.Int16ToAuxInt(c - 1)
18089 v.AddArg2(n, v0)
18090 return true
18091 }
18092
18093
18094
18095 for {
18096 t := v.Type
18097 x := v_0
18098 if v_1.Op != ssaop.OpConst16 {
18099 break
18100 }
18101 c := ssa.AuxIntToInt16(v_1.AuxInt)
18102 if !(x.Op != ssaop.OpConst16 && c != 0) {
18103 break
18104 }
18105 v.Reset(ssaop.OpSub16)
18106 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
18107 v1 := b.NewValue0(v.Pos, ssaop.OpDiv16u, t)
18108 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18109 v2.AuxInt = ssa.Int16ToAuxInt(c)
18110 v1.AddArg2(x, v2)
18111 v0.AddArg2(v1, v2)
18112 v.AddArg2(x, v0)
18113 return true
18114 }
18115 return false
18116 }
18117 func rewriteValue_OpMod32(v *ssa.Value) bool {
18118 v_1 := v.Args[1]
18119 v_0 := v.Args[0]
18120 b := v.Block
18121
18122
18123
18124 for {
18125 if v_0.Op != ssaop.OpConst32 {
18126 break
18127 }
18128 c := ssa.AuxIntToInt32(v_0.AuxInt)
18129 if v_1.Op != ssaop.OpConst32 {
18130 break
18131 }
18132 d := ssa.AuxIntToInt32(v_1.AuxInt)
18133 if !(d != 0) {
18134 break
18135 }
18136 v.Reset(ssaop.OpConst32)
18137 v.AuxInt = ssa.Int32ToAuxInt(c % d)
18138 return true
18139 }
18140
18141
18142
18143 for {
18144 t := v.Type
18145 n := v_0
18146 if v_1.Op != ssaop.OpConst32 {
18147 break
18148 }
18149 c := ssa.AuxIntToInt32(v_1.AuxInt)
18150 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18151 break
18152 }
18153 v.Reset(ssaop.OpAnd32)
18154 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18155 v0.AuxInt = ssa.Int32ToAuxInt(c - 1)
18156 v.AddArg2(n, v0)
18157 return true
18158 }
18159
18160
18161
18162 for {
18163 t := v.Type
18164 n := v_0
18165 if v_1.Op != ssaop.OpConst32 {
18166 break
18167 }
18168 c := ssa.AuxIntToInt32(v_1.AuxInt)
18169 if !(c < 0 && c != -1<<31) {
18170 break
18171 }
18172 v.Reset(ssaop.OpMod32)
18173 v.Type = t
18174 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18175 v0.AuxInt = ssa.Int32ToAuxInt(-c)
18176 v.AddArg2(n, v0)
18177 return true
18178 }
18179
18180
18181
18182 for {
18183 t := v.Type
18184 x := v_0
18185 if v_1.Op != ssaop.OpConst32 {
18186 break
18187 }
18188 c := ssa.AuxIntToInt32(v_1.AuxInt)
18189 if !(x.Op != ssaop.OpConst32 && (c > 0 || c == -1<<31)) {
18190 break
18191 }
18192 v.Reset(ssaop.OpSub32)
18193 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
18194 v1 := b.NewValue0(v.Pos, ssaop.OpDiv32, t)
18195 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18196 v2.AuxInt = ssa.Int32ToAuxInt(c)
18197 v1.AddArg2(x, v2)
18198 v0.AddArg2(v1, v2)
18199 v.AddArg2(x, v0)
18200 return true
18201 }
18202 return false
18203 }
18204 func rewriteValue_OpMod32u(v *ssa.Value) bool {
18205 v_1 := v.Args[1]
18206 v_0 := v.Args[0]
18207 b := v.Block
18208
18209
18210
18211 for {
18212 if v_0.Op != ssaop.OpConst32 {
18213 break
18214 }
18215 c := ssa.AuxIntToInt32(v_0.AuxInt)
18216 if v_1.Op != ssaop.OpConst32 {
18217 break
18218 }
18219 d := ssa.AuxIntToInt32(v_1.AuxInt)
18220 if !(d != 0) {
18221 break
18222 }
18223 v.Reset(ssaop.OpConst32)
18224 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) % uint32(d)))
18225 return true
18226 }
18227
18228
18229
18230 for {
18231 t := v.Type
18232 n := v_0
18233 if v_1.Op != ssaop.OpConst32 {
18234 break
18235 }
18236 c := ssa.AuxIntToInt32(v_1.AuxInt)
18237 if !(ssa.IsPowerOfTwo(uint32(c))) {
18238 break
18239 }
18240 v.Reset(ssaop.OpAnd32)
18241 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18242 v0.AuxInt = ssa.Int32ToAuxInt(c - 1)
18243 v.AddArg2(n, v0)
18244 return true
18245 }
18246
18247
18248
18249 for {
18250 t := v.Type
18251 x := v_0
18252 if v_1.Op != ssaop.OpConst32 {
18253 break
18254 }
18255 c := ssa.AuxIntToInt32(v_1.AuxInt)
18256 if !(x.Op != ssaop.OpConst32 && c != 0) {
18257 break
18258 }
18259 v.Reset(ssaop.OpSub32)
18260 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
18261 v1 := b.NewValue0(v.Pos, ssaop.OpDiv32u, t)
18262 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18263 v2.AuxInt = ssa.Int32ToAuxInt(c)
18264 v1.AddArg2(x, v2)
18265 v0.AddArg2(v1, v2)
18266 v.AddArg2(x, v0)
18267 return true
18268 }
18269 return false
18270 }
18271 func rewriteValue_OpMod64(v *ssa.Value) bool {
18272 v_1 := v.Args[1]
18273 v_0 := v.Args[0]
18274 b := v.Block
18275
18276
18277
18278 for {
18279 if v_0.Op != ssaop.OpConst64 {
18280 break
18281 }
18282 c := ssa.AuxIntToInt64(v_0.AuxInt)
18283 if v_1.Op != ssaop.OpConst64 {
18284 break
18285 }
18286 d := ssa.AuxIntToInt64(v_1.AuxInt)
18287 if !(d != 0) {
18288 break
18289 }
18290 v.Reset(ssaop.OpConst64)
18291 v.AuxInt = ssa.Int64ToAuxInt(c % d)
18292 return true
18293 }
18294
18295
18296
18297 for {
18298 t := v.Type
18299 n := v_0
18300 if v_1.Op != ssaop.OpConst64 {
18301 break
18302 }
18303 c := ssa.AuxIntToInt64(v_1.AuxInt)
18304 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18305 break
18306 }
18307 v.Reset(ssaop.OpAnd64)
18308 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18309 v0.AuxInt = ssa.Int64ToAuxInt(c - 1)
18310 v.AddArg2(n, v0)
18311 return true
18312 }
18313
18314
18315
18316 for {
18317 n := v_0
18318 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != -1<<63 || !(isNonNegative(n)) {
18319 break
18320 }
18321 v.CopyOf(n)
18322 return true
18323 }
18324
18325
18326
18327 for {
18328 t := v.Type
18329 n := v_0
18330 if v_1.Op != ssaop.OpConst64 {
18331 break
18332 }
18333 c := ssa.AuxIntToInt64(v_1.AuxInt)
18334 if !(c < 0 && c != -1<<63) {
18335 break
18336 }
18337 v.Reset(ssaop.OpMod64)
18338 v.Type = t
18339 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18340 v0.AuxInt = ssa.Int64ToAuxInt(-c)
18341 v.AddArg2(n, v0)
18342 return true
18343 }
18344
18345
18346
18347 for {
18348 t := v.Type
18349 x := v_0
18350 if v_1.Op != ssaop.OpConst64 {
18351 break
18352 }
18353 c := ssa.AuxIntToInt64(v_1.AuxInt)
18354 if !(x.Op != ssaop.OpConst64 && (c > 0 || c == -1<<63)) {
18355 break
18356 }
18357 v.Reset(ssaop.OpSub64)
18358 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
18359 v1 := b.NewValue0(v.Pos, ssaop.OpDiv64, t)
18360 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18361 v2.AuxInt = ssa.Int64ToAuxInt(c)
18362 v1.AddArg2(x, v2)
18363 v0.AddArg2(v1, v2)
18364 v.AddArg2(x, v0)
18365 return true
18366 }
18367 return false
18368 }
18369 func rewriteValue_OpMod64u(v *ssa.Value) bool {
18370 v_1 := v.Args[1]
18371 v_0 := v.Args[0]
18372 b := v.Block
18373
18374
18375
18376 for {
18377 if v_0.Op != ssaop.OpConst64 {
18378 break
18379 }
18380 c := ssa.AuxIntToInt64(v_0.AuxInt)
18381 if v_1.Op != ssaop.OpConst64 {
18382 break
18383 }
18384 d := ssa.AuxIntToInt64(v_1.AuxInt)
18385 if !(d != 0) {
18386 break
18387 }
18388 v.Reset(ssaop.OpConst64)
18389 v.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) % uint64(d)))
18390 return true
18391 }
18392
18393
18394
18395 for {
18396 t := v.Type
18397 n := v_0
18398 if v_1.Op != ssaop.OpConst64 {
18399 break
18400 }
18401 c := ssa.AuxIntToInt64(v_1.AuxInt)
18402 if !(ssa.IsPowerOfTwo(uint64(c))) {
18403 break
18404 }
18405 v.Reset(ssaop.OpAnd64)
18406 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18407 v0.AuxInt = ssa.Int64ToAuxInt(c - 1)
18408 v.AddArg2(n, v0)
18409 return true
18410 }
18411
18412
18413
18414 for {
18415 t := v.Type
18416 x := v_0
18417 if v_1.Op != ssaop.OpConst64 {
18418 break
18419 }
18420 c := ssa.AuxIntToInt64(v_1.AuxInt)
18421 if !(x.Op != ssaop.OpConst64 && c != 0) {
18422 break
18423 }
18424 v.Reset(ssaop.OpSub64)
18425 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
18426 v1 := b.NewValue0(v.Pos, ssaop.OpDiv64u, t)
18427 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18428 v2.AuxInt = ssa.Int64ToAuxInt(c)
18429 v1.AddArg2(x, v2)
18430 v0.AddArg2(v1, v2)
18431 v.AddArg2(x, v0)
18432 return true
18433 }
18434 return false
18435 }
18436 func rewriteValue_OpMod8(v *ssa.Value) bool {
18437 v_1 := v.Args[1]
18438 v_0 := v.Args[0]
18439 b := v.Block
18440
18441
18442
18443 for {
18444 if v_0.Op != ssaop.OpConst8 {
18445 break
18446 }
18447 c := ssa.AuxIntToInt8(v_0.AuxInt)
18448 if v_1.Op != ssaop.OpConst8 {
18449 break
18450 }
18451 d := ssa.AuxIntToInt8(v_1.AuxInt)
18452 if !(d != 0) {
18453 break
18454 }
18455 v.Reset(ssaop.OpConst8)
18456 v.AuxInt = ssa.Int8ToAuxInt(c % d)
18457 return true
18458 }
18459
18460
18461
18462 for {
18463 t := v.Type
18464 n := v_0
18465 if v_1.Op != ssaop.OpConst8 {
18466 break
18467 }
18468 c := ssa.AuxIntToInt8(v_1.AuxInt)
18469 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18470 break
18471 }
18472 v.Reset(ssaop.OpAnd8)
18473 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18474 v0.AuxInt = ssa.Int8ToAuxInt(c - 1)
18475 v.AddArg2(n, v0)
18476 return true
18477 }
18478
18479
18480
18481 for {
18482 t := v.Type
18483 n := v_0
18484 if v_1.Op != ssaop.OpConst8 {
18485 break
18486 }
18487 c := ssa.AuxIntToInt8(v_1.AuxInt)
18488 if !(c < 0 && c != -1<<7) {
18489 break
18490 }
18491 v.Reset(ssaop.OpMod8)
18492 v.Type = t
18493 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18494 v0.AuxInt = ssa.Int8ToAuxInt(-c)
18495 v.AddArg2(n, v0)
18496 return true
18497 }
18498
18499
18500
18501 for {
18502 t := v.Type
18503 x := v_0
18504 if v_1.Op != ssaop.OpConst8 {
18505 break
18506 }
18507 c := ssa.AuxIntToInt8(v_1.AuxInt)
18508 if !(x.Op != ssaop.OpConst8 && (c > 0 || c == -1<<7)) {
18509 break
18510 }
18511 v.Reset(ssaop.OpSub8)
18512 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
18513 v1 := b.NewValue0(v.Pos, ssaop.OpDiv8, t)
18514 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18515 v2.AuxInt = ssa.Int8ToAuxInt(c)
18516 v1.AddArg2(x, v2)
18517 v0.AddArg2(v1, v2)
18518 v.AddArg2(x, v0)
18519 return true
18520 }
18521 return false
18522 }
18523 func rewriteValue_OpMod8u(v *ssa.Value) bool {
18524 v_1 := v.Args[1]
18525 v_0 := v.Args[0]
18526 b := v.Block
18527
18528
18529
18530 for {
18531 if v_0.Op != ssaop.OpConst8 {
18532 break
18533 }
18534 c := ssa.AuxIntToInt8(v_0.AuxInt)
18535 if v_1.Op != ssaop.OpConst8 {
18536 break
18537 }
18538 d := ssa.AuxIntToInt8(v_1.AuxInt)
18539 if !(d != 0) {
18540 break
18541 }
18542 v.Reset(ssaop.OpConst8)
18543 v.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) % uint8(d)))
18544 return true
18545 }
18546
18547
18548
18549 for {
18550 t := v.Type
18551 n := v_0
18552 if v_1.Op != ssaop.OpConst8 {
18553 break
18554 }
18555 c := ssa.AuxIntToInt8(v_1.AuxInt)
18556 if !(ssa.IsPowerOfTwo(uint8(c))) {
18557 break
18558 }
18559 v.Reset(ssaop.OpAnd8)
18560 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18561 v0.AuxInt = ssa.Int8ToAuxInt(c - 1)
18562 v.AddArg2(n, v0)
18563 return true
18564 }
18565
18566
18567
18568 for {
18569 t := v.Type
18570 x := v_0
18571 if v_1.Op != ssaop.OpConst8 {
18572 break
18573 }
18574 c := ssa.AuxIntToInt8(v_1.AuxInt)
18575 if !(x.Op != ssaop.OpConst8 && c != 0) {
18576 break
18577 }
18578 v.Reset(ssaop.OpSub8)
18579 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
18580 v1 := b.NewValue0(v.Pos, ssaop.OpDiv8u, t)
18581 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18582 v2.AuxInt = ssa.Int8ToAuxInt(c)
18583 v1.AddArg2(x, v2)
18584 v0.AddArg2(v1, v2)
18585 v.AddArg2(x, v0)
18586 return true
18587 }
18588 return false
18589 }
18590 func rewriteValue_OpMove(v *ssa.Value) bool {
18591 v_2 := v.Args[2]
18592 v_1 := v.Args[1]
18593 v_0 := v.Args[0]
18594 b := v.Block
18595 config := b.Func.Config
18596
18597
18598
18599 for {
18600 n := ssa.AuxIntToInt64(v.AuxInt)
18601 t := ssa.AuxToType(v.Aux)
18602 dst1 := v_0
18603 src := v_1
18604 mem := v_2
18605 if mem.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem.AuxInt) != n || ssa.AuxToType(mem.Aux) != t {
18606 break
18607 }
18608 dst2 := mem.Args[0]
18609 if !(ssa.IsSamePtr(src, dst2)) {
18610 break
18611 }
18612 v.Reset(ssaop.OpZero)
18613 v.AuxInt = ssa.Int64ToAuxInt(n)
18614 v.Aux = ssa.TypeToAux(t)
18615 v.AddArg2(dst1, mem)
18616 return true
18617 }
18618
18619
18620
18621 for {
18622 n := ssa.AuxIntToInt64(v.AuxInt)
18623 t := ssa.AuxToType(v.Aux)
18624 dst1 := v_0
18625 src := v_1
18626 mem := v_2
18627 if mem.Op != ssaop.OpVarDef {
18628 break
18629 }
18630 mem_0 := mem.Args[0]
18631 if mem_0.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0.AuxInt) != n || ssa.AuxToType(mem_0.Aux) != t {
18632 break
18633 }
18634 dst0 := mem_0.Args[0]
18635 if !(ssa.IsSamePtr(src, dst0)) {
18636 break
18637 }
18638 v.Reset(ssaop.OpZero)
18639 v.AuxInt = ssa.Int64ToAuxInt(n)
18640 v.Aux = ssa.TypeToAux(t)
18641 v.AddArg2(dst1, mem)
18642 return true
18643 }
18644
18645
18646
18647 for {
18648 n := ssa.AuxIntToInt64(v.AuxInt)
18649 t := ssa.AuxToType(v.Aux)
18650 dst := v_0
18651 if v_1.Op != ssaop.OpAddr {
18652 break
18653 }
18654 sym := ssa.AuxToSym(v_1.Aux)
18655 v_1_0 := v_1.Args[0]
18656 if v_1_0.Op != ssaop.OpSB {
18657 break
18658 }
18659 mem := v_2
18660 if !(symIsROZero(sym)) {
18661 break
18662 }
18663 v.Reset(ssaop.OpZero)
18664 v.AuxInt = ssa.Int64ToAuxInt(n)
18665 v.Aux = ssa.TypeToAux(t)
18666 v.AddArg2(dst, mem)
18667 return true
18668 }
18669
18670
18671
18672 for {
18673 n := ssa.AuxIntToInt64(v.AuxInt)
18674 t1 := ssa.AuxToType(v.Aux)
18675 dst1 := v_0
18676 src1 := v_1
18677 store := v_2
18678 if store.Op != ssaop.OpStore {
18679 break
18680 }
18681 t2 := ssa.AuxToType(store.Aux)
18682 mem := store.Args[2]
18683 op1 := store.Args[0]
18684 if op1.Op != ssaop.OpOffPtr {
18685 break
18686 }
18687 o2 := ssa.AuxIntToInt64(op1.AuxInt)
18688 dst2 := op1.Args[0]
18689 if !(ssa.IsSamePtr(dst1, dst2) && store.Uses == 1 && n >= o2+t2.Size() && ssa.Disjoint1(src1, n, op1, t2.Size()) && ssa.Clobber(store)) {
18690 break
18691 }
18692 v.Reset(ssaop.OpMove)
18693 v.AuxInt = ssa.Int64ToAuxInt(n)
18694 v.Aux = ssa.TypeToAux(t1)
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 move := v_2
18707 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
18708 break
18709 }
18710 mem := move.Args[2]
18711 dst2 := move.Args[0]
18712 if !(move.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(move)) {
18713 break
18714 }
18715 v.Reset(ssaop.OpMove)
18716 v.AuxInt = ssa.Int64ToAuxInt(n)
18717 v.Aux = ssa.TypeToAux(t)
18718 v.AddArg3(dst1, src1, mem)
18719 return true
18720 }
18721
18722
18723
18724 for {
18725 n := ssa.AuxIntToInt64(v.AuxInt)
18726 t := ssa.AuxToType(v.Aux)
18727 dst1 := v_0
18728 src1 := v_1
18729 vardef := v_2
18730 if vardef.Op != ssaop.OpVarDef {
18731 break
18732 }
18733 x := ssa.AuxToSym(vardef.Aux)
18734 move := vardef.Args[0]
18735 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
18736 break
18737 }
18738 mem := move.Args[2]
18739 dst2 := move.Args[0]
18740 if !(move.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(move, vardef)) {
18741 break
18742 }
18743 v.Reset(ssaop.OpMove)
18744 v.AuxInt = ssa.Int64ToAuxInt(n)
18745 v.Aux = ssa.TypeToAux(t)
18746 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
18747 v0.Aux = ssa.SymToAux(x)
18748 v0.AddArg(mem)
18749 v.AddArg3(dst1, src1, v0)
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 zero := v_2
18761 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != n || ssa.AuxToType(zero.Aux) != t {
18762 break
18763 }
18764 mem := zero.Args[1]
18765 dst2 := zero.Args[0]
18766 if !(zero.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(zero)) {
18767 break
18768 }
18769 v.Reset(ssaop.OpMove)
18770 v.AuxInt = ssa.Int64ToAuxInt(n)
18771 v.Aux = ssa.TypeToAux(t)
18772 v.AddArg3(dst1, src1, mem)
18773 return true
18774 }
18775
18776
18777
18778 for {
18779 n := ssa.AuxIntToInt64(v.AuxInt)
18780 t := ssa.AuxToType(v.Aux)
18781 dst1 := v_0
18782 src1 := v_1
18783 vardef := v_2
18784 if vardef.Op != ssaop.OpVarDef {
18785 break
18786 }
18787 x := ssa.AuxToSym(vardef.Aux)
18788 zero := vardef.Args[0]
18789 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != n || ssa.AuxToType(zero.Aux) != t {
18790 break
18791 }
18792 mem := zero.Args[1]
18793 dst2 := zero.Args[0]
18794 if !(zero.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(zero, vardef)) {
18795 break
18796 }
18797 v.Reset(ssaop.OpMove)
18798 v.AuxInt = ssa.Int64ToAuxInt(n)
18799 v.Aux = ssa.TypeToAux(t)
18800 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
18801 v0.Aux = ssa.SymToAux(x)
18802 v0.AddArg(mem)
18803 v.AddArg3(dst1, src1, v0)
18804 return true
18805 }
18806
18807
18808
18809 for {
18810 n := ssa.AuxIntToInt64(v.AuxInt)
18811 t1 := ssa.AuxToType(v.Aux)
18812 dst := v_0
18813 p1 := v_1
18814 mem := v_2
18815 if mem.Op != ssaop.OpStore {
18816 break
18817 }
18818 t2 := ssa.AuxToType(mem.Aux)
18819 _ = mem.Args[2]
18820 op2 := mem.Args[0]
18821 if op2.Op != ssaop.OpOffPtr {
18822 break
18823 }
18824 tt2 := op2.Type
18825 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18826 p2 := op2.Args[0]
18827 d1 := mem.Args[1]
18828 mem_2 := mem.Args[2]
18829 if mem_2.Op != ssaop.OpStore {
18830 break
18831 }
18832 t3 := ssa.AuxToType(mem_2.Aux)
18833 d2 := mem_2.Args[1]
18834 op3 := mem_2.Args[0]
18835 if op3.Op != ssaop.OpOffPtr {
18836 break
18837 }
18838 tt3 := op3.Type
18839 if ssa.AuxIntToInt64(op3.AuxInt) != 0 {
18840 break
18841 }
18842 p3 := op3.Args[0]
18843 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()) {
18844 break
18845 }
18846 v.Reset(ssaop.OpStore)
18847 v.Aux = ssa.TypeToAux(t2)
18848 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
18849 v0.AuxInt = ssa.Int64ToAuxInt(o2)
18850 v0.AddArg(dst)
18851 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18852 v1.Aux = ssa.TypeToAux(t3)
18853 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
18854 v2.AuxInt = ssa.Int64ToAuxInt(0)
18855 v2.AddArg(dst)
18856 v1.AddArg3(v2, d2, mem)
18857 v.AddArg3(v0, d1, v1)
18858 return true
18859 }
18860
18861
18862
18863 for {
18864 n := ssa.AuxIntToInt64(v.AuxInt)
18865 t1 := ssa.AuxToType(v.Aux)
18866 dst := v_0
18867 p1 := v_1
18868 mem := v_2
18869 if mem.Op != ssaop.OpStore {
18870 break
18871 }
18872 t2 := ssa.AuxToType(mem.Aux)
18873 _ = mem.Args[2]
18874 op2 := mem.Args[0]
18875 if op2.Op != ssaop.OpOffPtr {
18876 break
18877 }
18878 tt2 := op2.Type
18879 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18880 p2 := op2.Args[0]
18881 d1 := mem.Args[1]
18882 mem_2 := mem.Args[2]
18883 if mem_2.Op != ssaop.OpStore {
18884 break
18885 }
18886 t3 := ssa.AuxToType(mem_2.Aux)
18887 _ = mem_2.Args[2]
18888 op3 := mem_2.Args[0]
18889 if op3.Op != ssaop.OpOffPtr {
18890 break
18891 }
18892 tt3 := op3.Type
18893 o3 := ssa.AuxIntToInt64(op3.AuxInt)
18894 p3 := op3.Args[0]
18895 d2 := mem_2.Args[1]
18896 mem_2_2 := mem_2.Args[2]
18897 if mem_2_2.Op != ssaop.OpStore {
18898 break
18899 }
18900 t4 := ssa.AuxToType(mem_2_2.Aux)
18901 d3 := mem_2_2.Args[1]
18902 op4 := mem_2_2.Args[0]
18903 if op4.Op != ssaop.OpOffPtr {
18904 break
18905 }
18906 tt4 := op4.Type
18907 if ssa.AuxIntToInt64(op4.AuxInt) != 0 {
18908 break
18909 }
18910 p4 := op4.Args[0]
18911 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()) {
18912 break
18913 }
18914 v.Reset(ssaop.OpStore)
18915 v.Aux = ssa.TypeToAux(t2)
18916 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
18917 v0.AuxInt = ssa.Int64ToAuxInt(o2)
18918 v0.AddArg(dst)
18919 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18920 v1.Aux = ssa.TypeToAux(t3)
18921 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
18922 v2.AuxInt = ssa.Int64ToAuxInt(o3)
18923 v2.AddArg(dst)
18924 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18925 v3.Aux = ssa.TypeToAux(t4)
18926 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
18927 v4.AuxInt = ssa.Int64ToAuxInt(0)
18928 v4.AddArg(dst)
18929 v3.AddArg3(v4, d3, mem)
18930 v1.AddArg3(v2, d2, v3)
18931 v.AddArg3(v0, d1, v1)
18932 return true
18933 }
18934
18935
18936
18937 for {
18938 n := ssa.AuxIntToInt64(v.AuxInt)
18939 t1 := ssa.AuxToType(v.Aux)
18940 dst := v_0
18941 p1 := v_1
18942 mem := v_2
18943 if mem.Op != ssaop.OpStore {
18944 break
18945 }
18946 t2 := ssa.AuxToType(mem.Aux)
18947 _ = mem.Args[2]
18948 op2 := mem.Args[0]
18949 if op2.Op != ssaop.OpOffPtr {
18950 break
18951 }
18952 tt2 := op2.Type
18953 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18954 p2 := op2.Args[0]
18955 d1 := mem.Args[1]
18956 mem_2 := mem.Args[2]
18957 if mem_2.Op != ssaop.OpStore {
18958 break
18959 }
18960 t3 := ssa.AuxToType(mem_2.Aux)
18961 _ = mem_2.Args[2]
18962 op3 := mem_2.Args[0]
18963 if op3.Op != ssaop.OpOffPtr {
18964 break
18965 }
18966 tt3 := op3.Type
18967 o3 := ssa.AuxIntToInt64(op3.AuxInt)
18968 p3 := op3.Args[0]
18969 d2 := mem_2.Args[1]
18970 mem_2_2 := mem_2.Args[2]
18971 if mem_2_2.Op != ssaop.OpStore {
18972 break
18973 }
18974 t4 := ssa.AuxToType(mem_2_2.Aux)
18975 _ = mem_2_2.Args[2]
18976 op4 := mem_2_2.Args[0]
18977 if op4.Op != ssaop.OpOffPtr {
18978 break
18979 }
18980 tt4 := op4.Type
18981 o4 := ssa.AuxIntToInt64(op4.AuxInt)
18982 p4 := op4.Args[0]
18983 d3 := mem_2_2.Args[1]
18984 mem_2_2_2 := mem_2_2.Args[2]
18985 if mem_2_2_2.Op != ssaop.OpStore {
18986 break
18987 }
18988 t5 := ssa.AuxToType(mem_2_2_2.Aux)
18989 d4 := mem_2_2_2.Args[1]
18990 op5 := mem_2_2_2.Args[0]
18991 if op5.Op != ssaop.OpOffPtr {
18992 break
18993 }
18994 tt5 := op5.Type
18995 if ssa.AuxIntToInt64(op5.AuxInt) != 0 {
18996 break
18997 }
18998 p5 := op5.Args[0]
18999 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()) {
19000 break
19001 }
19002 v.Reset(ssaop.OpStore)
19003 v.Aux = ssa.TypeToAux(t2)
19004 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19005 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19006 v0.AddArg(dst)
19007 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19008 v1.Aux = ssa.TypeToAux(t3)
19009 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19010 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19011 v2.AddArg(dst)
19012 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19013 v3.Aux = ssa.TypeToAux(t4)
19014 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19015 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19016 v4.AddArg(dst)
19017 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19018 v5.Aux = ssa.TypeToAux(t5)
19019 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19020 v6.AuxInt = ssa.Int64ToAuxInt(0)
19021 v6.AddArg(dst)
19022 v5.AddArg3(v6, d4, mem)
19023 v3.AddArg3(v4, d3, v5)
19024 v1.AddArg3(v2, d2, v3)
19025 v.AddArg3(v0, d1, v1)
19026 return true
19027 }
19028
19029
19030
19031 for {
19032 n := ssa.AuxIntToInt64(v.AuxInt)
19033 t1 := ssa.AuxToType(v.Aux)
19034 dst := v_0
19035 p1 := v_1
19036 mem := v_2
19037 if mem.Op != ssaop.OpVarDef {
19038 break
19039 }
19040 mem_0 := mem.Args[0]
19041 if mem_0.Op != ssaop.OpStore {
19042 break
19043 }
19044 t2 := ssa.AuxToType(mem_0.Aux)
19045 _ = mem_0.Args[2]
19046 op2 := mem_0.Args[0]
19047 if op2.Op != ssaop.OpOffPtr {
19048 break
19049 }
19050 tt2 := op2.Type
19051 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19052 p2 := op2.Args[0]
19053 d1 := mem_0.Args[1]
19054 mem_0_2 := mem_0.Args[2]
19055 if mem_0_2.Op != ssaop.OpStore {
19056 break
19057 }
19058 t3 := ssa.AuxToType(mem_0_2.Aux)
19059 d2 := mem_0_2.Args[1]
19060 op3 := mem_0_2.Args[0]
19061 if op3.Op != ssaop.OpOffPtr {
19062 break
19063 }
19064 tt3 := op3.Type
19065 if ssa.AuxIntToInt64(op3.AuxInt) != 0 {
19066 break
19067 }
19068 p3 := op3.Args[0]
19069 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()) {
19070 break
19071 }
19072 v.Reset(ssaop.OpStore)
19073 v.Aux = ssa.TypeToAux(t2)
19074 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19075 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19076 v0.AddArg(dst)
19077 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19078 v1.Aux = ssa.TypeToAux(t3)
19079 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19080 v2.AuxInt = ssa.Int64ToAuxInt(0)
19081 v2.AddArg(dst)
19082 v1.AddArg3(v2, d2, mem)
19083 v.AddArg3(v0, d1, v1)
19084 return true
19085 }
19086
19087
19088
19089 for {
19090 n := ssa.AuxIntToInt64(v.AuxInt)
19091 t1 := ssa.AuxToType(v.Aux)
19092 dst := v_0
19093 p1 := v_1
19094 mem := v_2
19095 if mem.Op != ssaop.OpVarDef {
19096 break
19097 }
19098 mem_0 := mem.Args[0]
19099 if mem_0.Op != ssaop.OpStore {
19100 break
19101 }
19102 t2 := ssa.AuxToType(mem_0.Aux)
19103 _ = mem_0.Args[2]
19104 op2 := mem_0.Args[0]
19105 if op2.Op != ssaop.OpOffPtr {
19106 break
19107 }
19108 tt2 := op2.Type
19109 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19110 p2 := op2.Args[0]
19111 d1 := mem_0.Args[1]
19112 mem_0_2 := mem_0.Args[2]
19113 if mem_0_2.Op != ssaop.OpStore {
19114 break
19115 }
19116 t3 := ssa.AuxToType(mem_0_2.Aux)
19117 _ = mem_0_2.Args[2]
19118 op3 := mem_0_2.Args[0]
19119 if op3.Op != ssaop.OpOffPtr {
19120 break
19121 }
19122 tt3 := op3.Type
19123 o3 := ssa.AuxIntToInt64(op3.AuxInt)
19124 p3 := op3.Args[0]
19125 d2 := mem_0_2.Args[1]
19126 mem_0_2_2 := mem_0_2.Args[2]
19127 if mem_0_2_2.Op != ssaop.OpStore {
19128 break
19129 }
19130 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19131 d3 := mem_0_2_2.Args[1]
19132 op4 := mem_0_2_2.Args[0]
19133 if op4.Op != ssaop.OpOffPtr {
19134 break
19135 }
19136 tt4 := op4.Type
19137 if ssa.AuxIntToInt64(op4.AuxInt) != 0 {
19138 break
19139 }
19140 p4 := op4.Args[0]
19141 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()) {
19142 break
19143 }
19144 v.Reset(ssaop.OpStore)
19145 v.Aux = ssa.TypeToAux(t2)
19146 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19147 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19148 v0.AddArg(dst)
19149 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19150 v1.Aux = ssa.TypeToAux(t3)
19151 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19152 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19153 v2.AddArg(dst)
19154 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19155 v3.Aux = ssa.TypeToAux(t4)
19156 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19157 v4.AuxInt = ssa.Int64ToAuxInt(0)
19158 v4.AddArg(dst)
19159 v3.AddArg3(v4, d3, mem)
19160 v1.AddArg3(v2, d2, v3)
19161 v.AddArg3(v0, d1, v1)
19162 return true
19163 }
19164
19165
19166
19167 for {
19168 n := ssa.AuxIntToInt64(v.AuxInt)
19169 t1 := ssa.AuxToType(v.Aux)
19170 dst := v_0
19171 p1 := v_1
19172 mem := v_2
19173 if mem.Op != ssaop.OpVarDef {
19174 break
19175 }
19176 mem_0 := mem.Args[0]
19177 if mem_0.Op != ssaop.OpStore {
19178 break
19179 }
19180 t2 := ssa.AuxToType(mem_0.Aux)
19181 _ = mem_0.Args[2]
19182 op2 := mem_0.Args[0]
19183 if op2.Op != ssaop.OpOffPtr {
19184 break
19185 }
19186 tt2 := op2.Type
19187 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19188 p2 := op2.Args[0]
19189 d1 := mem_0.Args[1]
19190 mem_0_2 := mem_0.Args[2]
19191 if mem_0_2.Op != ssaop.OpStore {
19192 break
19193 }
19194 t3 := ssa.AuxToType(mem_0_2.Aux)
19195 _ = mem_0_2.Args[2]
19196 op3 := mem_0_2.Args[0]
19197 if op3.Op != ssaop.OpOffPtr {
19198 break
19199 }
19200 tt3 := op3.Type
19201 o3 := ssa.AuxIntToInt64(op3.AuxInt)
19202 p3 := op3.Args[0]
19203 d2 := mem_0_2.Args[1]
19204 mem_0_2_2 := mem_0_2.Args[2]
19205 if mem_0_2_2.Op != ssaop.OpStore {
19206 break
19207 }
19208 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19209 _ = mem_0_2_2.Args[2]
19210 op4 := mem_0_2_2.Args[0]
19211 if op4.Op != ssaop.OpOffPtr {
19212 break
19213 }
19214 tt4 := op4.Type
19215 o4 := ssa.AuxIntToInt64(op4.AuxInt)
19216 p4 := op4.Args[0]
19217 d3 := mem_0_2_2.Args[1]
19218 mem_0_2_2_2 := mem_0_2_2.Args[2]
19219 if mem_0_2_2_2.Op != ssaop.OpStore {
19220 break
19221 }
19222 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19223 d4 := mem_0_2_2_2.Args[1]
19224 op5 := mem_0_2_2_2.Args[0]
19225 if op5.Op != ssaop.OpOffPtr {
19226 break
19227 }
19228 tt5 := op5.Type
19229 if ssa.AuxIntToInt64(op5.AuxInt) != 0 {
19230 break
19231 }
19232 p5 := op5.Args[0]
19233 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()) {
19234 break
19235 }
19236 v.Reset(ssaop.OpStore)
19237 v.Aux = ssa.TypeToAux(t2)
19238 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19239 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19240 v0.AddArg(dst)
19241 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19242 v1.Aux = ssa.TypeToAux(t3)
19243 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19244 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19245 v2.AddArg(dst)
19246 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19247 v3.Aux = ssa.TypeToAux(t4)
19248 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19249 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19250 v4.AddArg(dst)
19251 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19252 v5.Aux = ssa.TypeToAux(t5)
19253 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19254 v6.AuxInt = ssa.Int64ToAuxInt(0)
19255 v6.AddArg(dst)
19256 v5.AddArg3(v6, d4, mem)
19257 v3.AddArg3(v4, d3, v5)
19258 v1.AddArg3(v2, d2, v3)
19259 v.AddArg3(v0, d1, v1)
19260 return true
19261 }
19262
19263
19264
19265 for {
19266 n := ssa.AuxIntToInt64(v.AuxInt)
19267 t1 := ssa.AuxToType(v.Aux)
19268 dst := v_0
19269 p1 := v_1
19270 mem := v_2
19271 if mem.Op != ssaop.OpStore {
19272 break
19273 }
19274 t2 := ssa.AuxToType(mem.Aux)
19275 _ = mem.Args[2]
19276 op2 := mem.Args[0]
19277 if op2.Op != ssaop.OpOffPtr {
19278 break
19279 }
19280 tt2 := op2.Type
19281 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19282 p2 := op2.Args[0]
19283 d1 := mem.Args[1]
19284 mem_2 := mem.Args[2]
19285 if mem_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2.AuxInt) != n {
19286 break
19287 }
19288 t3 := ssa.AuxToType(mem_2.Aux)
19289 p3 := mem_2.Args[0]
19290 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && n >= o2+t2.Size()) {
19291 break
19292 }
19293 v.Reset(ssaop.OpStore)
19294 v.Aux = ssa.TypeToAux(t2)
19295 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19296 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19297 v0.AddArg(dst)
19298 v1 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19299 v1.AuxInt = ssa.Int64ToAuxInt(n)
19300 v1.Aux = ssa.TypeToAux(t1)
19301 v1.AddArg2(dst, mem)
19302 v.AddArg3(v0, d1, v1)
19303 return true
19304 }
19305
19306
19307
19308 for {
19309 n := ssa.AuxIntToInt64(v.AuxInt)
19310 t1 := ssa.AuxToType(v.Aux)
19311 dst := v_0
19312 p1 := v_1
19313 mem := v_2
19314 if mem.Op != ssaop.OpStore {
19315 break
19316 }
19317 t2 := ssa.AuxToType(mem.Aux)
19318 _ = mem.Args[2]
19319 mem_0 := mem.Args[0]
19320 if mem_0.Op != ssaop.OpOffPtr {
19321 break
19322 }
19323 tt2 := mem_0.Type
19324 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19325 p2 := mem_0.Args[0]
19326 d1 := mem.Args[1]
19327 mem_2 := mem.Args[2]
19328 if mem_2.Op != ssaop.OpStore {
19329 break
19330 }
19331 t3 := ssa.AuxToType(mem_2.Aux)
19332 _ = mem_2.Args[2]
19333 mem_2_0 := mem_2.Args[0]
19334 if mem_2_0.Op != ssaop.OpOffPtr {
19335 break
19336 }
19337 tt3 := mem_2_0.Type
19338 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19339 p3 := mem_2_0.Args[0]
19340 d2 := mem_2.Args[1]
19341 mem_2_2 := mem_2.Args[2]
19342 if mem_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2.AuxInt) != n {
19343 break
19344 }
19345 t4 := ssa.AuxToType(mem_2_2.Aux)
19346 p4 := mem_2_2.Args[0]
19347 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()) {
19348 break
19349 }
19350 v.Reset(ssaop.OpStore)
19351 v.Aux = ssa.TypeToAux(t2)
19352 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19353 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19354 v0.AddArg(dst)
19355 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19356 v1.Aux = ssa.TypeToAux(t3)
19357 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19358 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19359 v2.AddArg(dst)
19360 v3 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19361 v3.AuxInt = ssa.Int64ToAuxInt(n)
19362 v3.Aux = ssa.TypeToAux(t1)
19363 v3.AddArg2(dst, mem)
19364 v1.AddArg3(v2, d2, v3)
19365 v.AddArg3(v0, d1, v1)
19366 return true
19367 }
19368
19369
19370
19371 for {
19372 n := ssa.AuxIntToInt64(v.AuxInt)
19373 t1 := ssa.AuxToType(v.Aux)
19374 dst := v_0
19375 p1 := v_1
19376 mem := v_2
19377 if mem.Op != ssaop.OpStore {
19378 break
19379 }
19380 t2 := ssa.AuxToType(mem.Aux)
19381 _ = mem.Args[2]
19382 mem_0 := mem.Args[0]
19383 if mem_0.Op != ssaop.OpOffPtr {
19384 break
19385 }
19386 tt2 := mem_0.Type
19387 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19388 p2 := mem_0.Args[0]
19389 d1 := mem.Args[1]
19390 mem_2 := mem.Args[2]
19391 if mem_2.Op != ssaop.OpStore {
19392 break
19393 }
19394 t3 := ssa.AuxToType(mem_2.Aux)
19395 _ = mem_2.Args[2]
19396 mem_2_0 := mem_2.Args[0]
19397 if mem_2_0.Op != ssaop.OpOffPtr {
19398 break
19399 }
19400 tt3 := mem_2_0.Type
19401 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19402 p3 := mem_2_0.Args[0]
19403 d2 := mem_2.Args[1]
19404 mem_2_2 := mem_2.Args[2]
19405 if mem_2_2.Op != ssaop.OpStore {
19406 break
19407 }
19408 t4 := ssa.AuxToType(mem_2_2.Aux)
19409 _ = mem_2_2.Args[2]
19410 mem_2_2_0 := mem_2_2.Args[0]
19411 if mem_2_2_0.Op != ssaop.OpOffPtr {
19412 break
19413 }
19414 tt4 := mem_2_2_0.Type
19415 o4 := ssa.AuxIntToInt64(mem_2_2_0.AuxInt)
19416 p4 := mem_2_2_0.Args[0]
19417 d3 := mem_2_2.Args[1]
19418 mem_2_2_2 := mem_2_2.Args[2]
19419 if mem_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2_2.AuxInt) != n {
19420 break
19421 }
19422 t5 := ssa.AuxToType(mem_2_2_2.Aux)
19423 p5 := mem_2_2_2.Args[0]
19424 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()) {
19425 break
19426 }
19427 v.Reset(ssaop.OpStore)
19428 v.Aux = ssa.TypeToAux(t2)
19429 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19430 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19431 v0.AddArg(dst)
19432 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19433 v1.Aux = ssa.TypeToAux(t3)
19434 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19435 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19436 v2.AddArg(dst)
19437 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19438 v3.Aux = ssa.TypeToAux(t4)
19439 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19440 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19441 v4.AddArg(dst)
19442 v5 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19443 v5.AuxInt = ssa.Int64ToAuxInt(n)
19444 v5.Aux = ssa.TypeToAux(t1)
19445 v5.AddArg2(dst, mem)
19446 v3.AddArg3(v4, d3, v5)
19447 v1.AddArg3(v2, d2, v3)
19448 v.AddArg3(v0, d1, v1)
19449 return true
19450 }
19451
19452
19453
19454 for {
19455 n := ssa.AuxIntToInt64(v.AuxInt)
19456 t1 := ssa.AuxToType(v.Aux)
19457 dst := v_0
19458 p1 := v_1
19459 mem := v_2
19460 if mem.Op != ssaop.OpStore {
19461 break
19462 }
19463 t2 := ssa.AuxToType(mem.Aux)
19464 _ = mem.Args[2]
19465 mem_0 := mem.Args[0]
19466 if mem_0.Op != ssaop.OpOffPtr {
19467 break
19468 }
19469 tt2 := mem_0.Type
19470 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19471 p2 := mem_0.Args[0]
19472 d1 := mem.Args[1]
19473 mem_2 := mem.Args[2]
19474 if mem_2.Op != ssaop.OpStore {
19475 break
19476 }
19477 t3 := ssa.AuxToType(mem_2.Aux)
19478 _ = mem_2.Args[2]
19479 mem_2_0 := mem_2.Args[0]
19480 if mem_2_0.Op != ssaop.OpOffPtr {
19481 break
19482 }
19483 tt3 := mem_2_0.Type
19484 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19485 p3 := mem_2_0.Args[0]
19486 d2 := mem_2.Args[1]
19487 mem_2_2 := mem_2.Args[2]
19488 if mem_2_2.Op != ssaop.OpStore {
19489 break
19490 }
19491 t4 := ssa.AuxToType(mem_2_2.Aux)
19492 _ = mem_2_2.Args[2]
19493 mem_2_2_0 := mem_2_2.Args[0]
19494 if mem_2_2_0.Op != ssaop.OpOffPtr {
19495 break
19496 }
19497 tt4 := mem_2_2_0.Type
19498 o4 := ssa.AuxIntToInt64(mem_2_2_0.AuxInt)
19499 p4 := mem_2_2_0.Args[0]
19500 d3 := mem_2_2.Args[1]
19501 mem_2_2_2 := mem_2_2.Args[2]
19502 if mem_2_2_2.Op != ssaop.OpStore {
19503 break
19504 }
19505 t5 := ssa.AuxToType(mem_2_2_2.Aux)
19506 _ = mem_2_2_2.Args[2]
19507 mem_2_2_2_0 := mem_2_2_2.Args[0]
19508 if mem_2_2_2_0.Op != ssaop.OpOffPtr {
19509 break
19510 }
19511 tt5 := mem_2_2_2_0.Type
19512 o5 := ssa.AuxIntToInt64(mem_2_2_2_0.AuxInt)
19513 p5 := mem_2_2_2_0.Args[0]
19514 d4 := mem_2_2_2.Args[1]
19515 mem_2_2_2_2 := mem_2_2_2.Args[2]
19516 if mem_2_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2_2_2.AuxInt) != n {
19517 break
19518 }
19519 t6 := ssa.AuxToType(mem_2_2_2_2.Aux)
19520 p6 := mem_2_2_2_2.Args[0]
19521 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()) {
19522 break
19523 }
19524 v.Reset(ssaop.OpStore)
19525 v.Aux = ssa.TypeToAux(t2)
19526 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19527 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19528 v0.AddArg(dst)
19529 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19530 v1.Aux = ssa.TypeToAux(t3)
19531 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19532 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19533 v2.AddArg(dst)
19534 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19535 v3.Aux = ssa.TypeToAux(t4)
19536 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19537 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19538 v4.AddArg(dst)
19539 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19540 v5.Aux = ssa.TypeToAux(t5)
19541 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19542 v6.AuxInt = ssa.Int64ToAuxInt(o5)
19543 v6.AddArg(dst)
19544 v7 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19545 v7.AuxInt = ssa.Int64ToAuxInt(n)
19546 v7.Aux = ssa.TypeToAux(t1)
19547 v7.AddArg2(dst, mem)
19548 v5.AddArg3(v6, d4, v7)
19549 v3.AddArg3(v4, d3, v5)
19550 v1.AddArg3(v2, d2, v3)
19551 v.AddArg3(v0, d1, v1)
19552 return true
19553 }
19554
19555
19556
19557 for {
19558 n := ssa.AuxIntToInt64(v.AuxInt)
19559 t1 := ssa.AuxToType(v.Aux)
19560 dst := v_0
19561 p1 := v_1
19562 mem := v_2
19563 if mem.Op != ssaop.OpVarDef {
19564 break
19565 }
19566 mem_0 := mem.Args[0]
19567 if mem_0.Op != ssaop.OpStore {
19568 break
19569 }
19570 t2 := ssa.AuxToType(mem_0.Aux)
19571 _ = mem_0.Args[2]
19572 op2 := mem_0.Args[0]
19573 if op2.Op != ssaop.OpOffPtr {
19574 break
19575 }
19576 tt2 := op2.Type
19577 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19578 p2 := op2.Args[0]
19579 d1 := mem_0.Args[1]
19580 mem_0_2 := mem_0.Args[2]
19581 if mem_0_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2.AuxInt) != n {
19582 break
19583 }
19584 t3 := ssa.AuxToType(mem_0_2.Aux)
19585 p3 := mem_0_2.Args[0]
19586 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && n >= o2+t2.Size()) {
19587 break
19588 }
19589 v.Reset(ssaop.OpStore)
19590 v.Aux = ssa.TypeToAux(t2)
19591 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19592 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19593 v0.AddArg(dst)
19594 v1 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19595 v1.AuxInt = ssa.Int64ToAuxInt(n)
19596 v1.Aux = ssa.TypeToAux(t1)
19597 v1.AddArg2(dst, mem)
19598 v.AddArg3(v0, d1, v1)
19599 return true
19600 }
19601
19602
19603
19604 for {
19605 n := ssa.AuxIntToInt64(v.AuxInt)
19606 t1 := ssa.AuxToType(v.Aux)
19607 dst := v_0
19608 p1 := v_1
19609 mem := v_2
19610 if mem.Op != ssaop.OpVarDef {
19611 break
19612 }
19613 mem_0 := mem.Args[0]
19614 if mem_0.Op != ssaop.OpStore {
19615 break
19616 }
19617 t2 := ssa.AuxToType(mem_0.Aux)
19618 _ = mem_0.Args[2]
19619 mem_0_0 := mem_0.Args[0]
19620 if mem_0_0.Op != ssaop.OpOffPtr {
19621 break
19622 }
19623 tt2 := mem_0_0.Type
19624 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19625 p2 := mem_0_0.Args[0]
19626 d1 := mem_0.Args[1]
19627 mem_0_2 := mem_0.Args[2]
19628 if mem_0_2.Op != ssaop.OpStore {
19629 break
19630 }
19631 t3 := ssa.AuxToType(mem_0_2.Aux)
19632 _ = mem_0_2.Args[2]
19633 mem_0_2_0 := mem_0_2.Args[0]
19634 if mem_0_2_0.Op != ssaop.OpOffPtr {
19635 break
19636 }
19637 tt3 := mem_0_2_0.Type
19638 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19639 p3 := mem_0_2_0.Args[0]
19640 d2 := mem_0_2.Args[1]
19641 mem_0_2_2 := mem_0_2.Args[2]
19642 if mem_0_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2.AuxInt) != n {
19643 break
19644 }
19645 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19646 p4 := mem_0_2_2.Args[0]
19647 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()) {
19648 break
19649 }
19650 v.Reset(ssaop.OpStore)
19651 v.Aux = ssa.TypeToAux(t2)
19652 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19653 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19654 v0.AddArg(dst)
19655 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19656 v1.Aux = ssa.TypeToAux(t3)
19657 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19658 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19659 v2.AddArg(dst)
19660 v3 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19661 v3.AuxInt = ssa.Int64ToAuxInt(n)
19662 v3.Aux = ssa.TypeToAux(t1)
19663 v3.AddArg2(dst, mem)
19664 v1.AddArg3(v2, d2, v3)
19665 v.AddArg3(v0, d1, v1)
19666 return true
19667 }
19668
19669
19670
19671 for {
19672 n := ssa.AuxIntToInt64(v.AuxInt)
19673 t1 := ssa.AuxToType(v.Aux)
19674 dst := v_0
19675 p1 := v_1
19676 mem := v_2
19677 if mem.Op != ssaop.OpVarDef {
19678 break
19679 }
19680 mem_0 := mem.Args[0]
19681 if mem_0.Op != ssaop.OpStore {
19682 break
19683 }
19684 t2 := ssa.AuxToType(mem_0.Aux)
19685 _ = mem_0.Args[2]
19686 mem_0_0 := mem_0.Args[0]
19687 if mem_0_0.Op != ssaop.OpOffPtr {
19688 break
19689 }
19690 tt2 := mem_0_0.Type
19691 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19692 p2 := mem_0_0.Args[0]
19693 d1 := mem_0.Args[1]
19694 mem_0_2 := mem_0.Args[2]
19695 if mem_0_2.Op != ssaop.OpStore {
19696 break
19697 }
19698 t3 := ssa.AuxToType(mem_0_2.Aux)
19699 _ = mem_0_2.Args[2]
19700 mem_0_2_0 := mem_0_2.Args[0]
19701 if mem_0_2_0.Op != ssaop.OpOffPtr {
19702 break
19703 }
19704 tt3 := mem_0_2_0.Type
19705 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19706 p3 := mem_0_2_0.Args[0]
19707 d2 := mem_0_2.Args[1]
19708 mem_0_2_2 := mem_0_2.Args[2]
19709 if mem_0_2_2.Op != ssaop.OpStore {
19710 break
19711 }
19712 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19713 _ = mem_0_2_2.Args[2]
19714 mem_0_2_2_0 := mem_0_2_2.Args[0]
19715 if mem_0_2_2_0.Op != ssaop.OpOffPtr {
19716 break
19717 }
19718 tt4 := mem_0_2_2_0.Type
19719 o4 := ssa.AuxIntToInt64(mem_0_2_2_0.AuxInt)
19720 p4 := mem_0_2_2_0.Args[0]
19721 d3 := mem_0_2_2.Args[1]
19722 mem_0_2_2_2 := mem_0_2_2.Args[2]
19723 if mem_0_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2_2.AuxInt) != n {
19724 break
19725 }
19726 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19727 p5 := mem_0_2_2_2.Args[0]
19728 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()) {
19729 break
19730 }
19731 v.Reset(ssaop.OpStore)
19732 v.Aux = ssa.TypeToAux(t2)
19733 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19734 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19735 v0.AddArg(dst)
19736 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19737 v1.Aux = ssa.TypeToAux(t3)
19738 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19739 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19740 v2.AddArg(dst)
19741 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19742 v3.Aux = ssa.TypeToAux(t4)
19743 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19744 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19745 v4.AddArg(dst)
19746 v5 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19747 v5.AuxInt = ssa.Int64ToAuxInt(n)
19748 v5.Aux = ssa.TypeToAux(t1)
19749 v5.AddArg2(dst, mem)
19750 v3.AddArg3(v4, d3, v5)
19751 v1.AddArg3(v2, d2, v3)
19752 v.AddArg3(v0, d1, v1)
19753 return true
19754 }
19755
19756
19757
19758 for {
19759 n := ssa.AuxIntToInt64(v.AuxInt)
19760 t1 := ssa.AuxToType(v.Aux)
19761 dst := v_0
19762 p1 := v_1
19763 mem := v_2
19764 if mem.Op != ssaop.OpVarDef {
19765 break
19766 }
19767 mem_0 := mem.Args[0]
19768 if mem_0.Op != ssaop.OpStore {
19769 break
19770 }
19771 t2 := ssa.AuxToType(mem_0.Aux)
19772 _ = mem_0.Args[2]
19773 mem_0_0 := mem_0.Args[0]
19774 if mem_0_0.Op != ssaop.OpOffPtr {
19775 break
19776 }
19777 tt2 := mem_0_0.Type
19778 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19779 p2 := mem_0_0.Args[0]
19780 d1 := mem_0.Args[1]
19781 mem_0_2 := mem_0.Args[2]
19782 if mem_0_2.Op != ssaop.OpStore {
19783 break
19784 }
19785 t3 := ssa.AuxToType(mem_0_2.Aux)
19786 _ = mem_0_2.Args[2]
19787 mem_0_2_0 := mem_0_2.Args[0]
19788 if mem_0_2_0.Op != ssaop.OpOffPtr {
19789 break
19790 }
19791 tt3 := mem_0_2_0.Type
19792 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19793 p3 := mem_0_2_0.Args[0]
19794 d2 := mem_0_2.Args[1]
19795 mem_0_2_2 := mem_0_2.Args[2]
19796 if mem_0_2_2.Op != ssaop.OpStore {
19797 break
19798 }
19799 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19800 _ = mem_0_2_2.Args[2]
19801 mem_0_2_2_0 := mem_0_2_2.Args[0]
19802 if mem_0_2_2_0.Op != ssaop.OpOffPtr {
19803 break
19804 }
19805 tt4 := mem_0_2_2_0.Type
19806 o4 := ssa.AuxIntToInt64(mem_0_2_2_0.AuxInt)
19807 p4 := mem_0_2_2_0.Args[0]
19808 d3 := mem_0_2_2.Args[1]
19809 mem_0_2_2_2 := mem_0_2_2.Args[2]
19810 if mem_0_2_2_2.Op != ssaop.OpStore {
19811 break
19812 }
19813 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19814 _ = mem_0_2_2_2.Args[2]
19815 mem_0_2_2_2_0 := mem_0_2_2_2.Args[0]
19816 if mem_0_2_2_2_0.Op != ssaop.OpOffPtr {
19817 break
19818 }
19819 tt5 := mem_0_2_2_2_0.Type
19820 o5 := ssa.AuxIntToInt64(mem_0_2_2_2_0.AuxInt)
19821 p5 := mem_0_2_2_2_0.Args[0]
19822 d4 := mem_0_2_2_2.Args[1]
19823 mem_0_2_2_2_2 := mem_0_2_2_2.Args[2]
19824 if mem_0_2_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2_2_2.AuxInt) != n {
19825 break
19826 }
19827 t6 := ssa.AuxToType(mem_0_2_2_2_2.Aux)
19828 p6 := mem_0_2_2_2_2.Args[0]
19829 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()) {
19830 break
19831 }
19832 v.Reset(ssaop.OpStore)
19833 v.Aux = ssa.TypeToAux(t2)
19834 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19835 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19836 v0.AddArg(dst)
19837 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19838 v1.Aux = ssa.TypeToAux(t3)
19839 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19840 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19841 v2.AddArg(dst)
19842 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19843 v3.Aux = ssa.TypeToAux(t4)
19844 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19845 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19846 v4.AddArg(dst)
19847 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19848 v5.Aux = ssa.TypeToAux(t5)
19849 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19850 v6.AuxInt = ssa.Int64ToAuxInt(o5)
19851 v6.AddArg(dst)
19852 v7 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19853 v7.AuxInt = ssa.Int64ToAuxInt(n)
19854 v7.Aux = ssa.TypeToAux(t1)
19855 v7.AddArg2(dst, mem)
19856 v5.AddArg3(v6, d4, v7)
19857 v3.AddArg3(v4, d3, v5)
19858 v1.AddArg3(v2, d2, v3)
19859 v.AddArg3(v0, d1, v1)
19860 return true
19861 }
19862
19863
19864
19865 for {
19866 s := ssa.AuxIntToInt64(v.AuxInt)
19867 t1 := ssa.AuxToType(v.Aux)
19868 dst := v_0
19869 tmp1 := v_1
19870 midmem := v_2
19871 if midmem.Op != ssaop.OpMove || ssa.AuxIntToInt64(midmem.AuxInt) != s {
19872 break
19873 }
19874 t2 := ssa.AuxToType(midmem.Aux)
19875 src := midmem.Args[1]
19876 tmp2 := midmem.Args[0]
19877 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))) {
19878 break
19879 }
19880 v.Reset(ssaop.OpMove)
19881 v.AuxInt = ssa.Int64ToAuxInt(s)
19882 v.Aux = ssa.TypeToAux(t1)
19883 v.AddArg3(dst, src, midmem)
19884 return true
19885 }
19886
19887
19888
19889 for {
19890 s := ssa.AuxIntToInt64(v.AuxInt)
19891 t1 := ssa.AuxToType(v.Aux)
19892 dst := v_0
19893 tmp1 := v_1
19894 midmem := v_2
19895 if midmem.Op != ssaop.OpVarDef {
19896 break
19897 }
19898 midmem_0 := midmem.Args[0]
19899 if midmem_0.Op != ssaop.OpMove || ssa.AuxIntToInt64(midmem_0.AuxInt) != s {
19900 break
19901 }
19902 t2 := ssa.AuxToType(midmem_0.Aux)
19903 src := midmem_0.Args[1]
19904 tmp2 := midmem_0.Args[0]
19905 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))) {
19906 break
19907 }
19908 v.Reset(ssaop.OpMove)
19909 v.AuxInt = ssa.Int64ToAuxInt(s)
19910 v.Aux = ssa.TypeToAux(t1)
19911 v.AddArg3(dst, src, midmem)
19912 return true
19913 }
19914
19915
19916
19917 for {
19918 dst := v_0
19919 src := v_1
19920 mem := v_2
19921 if !(ssa.IsSamePtr(dst, src)) {
19922 break
19923 }
19924 v.CopyOf(mem)
19925 return true
19926 }
19927 return false
19928 }
19929 func rewriteValue_OpMul16(v *ssa.Value) bool {
19930 v_1 := v.Args[1]
19931 v_0 := v.Args[0]
19932 b := v.Block
19933 typ := &b.Func.Config.Types
19934
19935
19936 for {
19937 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19938 if v_0.Op != ssaop.OpConst16 {
19939 continue
19940 }
19941 c := ssa.AuxIntToInt16(v_0.AuxInt)
19942 if v_1.Op != ssaop.OpConst16 {
19943 continue
19944 }
19945 d := ssa.AuxIntToInt16(v_1.AuxInt)
19946 v.Reset(ssaop.OpConst16)
19947 v.AuxInt = ssa.Int16ToAuxInt(c * d)
19948 return true
19949 }
19950 break
19951 }
19952
19953
19954 for {
19955 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19956 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 1 {
19957 continue
19958 }
19959 x := v_1
19960 v.CopyOf(x)
19961 return true
19962 }
19963 break
19964 }
19965
19966
19967 for {
19968 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19969 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
19970 continue
19971 }
19972 x := v_1
19973 v.Reset(ssaop.OpNeg16)
19974 v.AddArg(x)
19975 return true
19976 }
19977 break
19978 }
19979
19980
19981 for {
19982 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19983 if v_0.Op != ssaop.OpConst16 {
19984 continue
19985 }
19986 t := v_0.Type
19987 c := ssa.AuxIntToInt16(v_0.AuxInt)
19988 if v_1.Op != ssaop.OpNeg16 {
19989 continue
19990 }
19991 x := v_1.Args[0]
19992 v.Reset(ssaop.OpMul16)
19993 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
19994 v0.AuxInt = ssa.Int16ToAuxInt(-c)
19995 v.AddArg2(x, v0)
19996 return true
19997 }
19998 break
19999 }
20000
20001
20002 for {
20003 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20004 if v_0.Op != ssaop.OpNeg16 {
20005 continue
20006 }
20007 x := v_0.Args[0]
20008 if v_1.Op != ssaop.OpNeg16 {
20009 continue
20010 }
20011 y := v_1.Args[0]
20012 v.Reset(ssaop.OpMul16)
20013 v.AddArg2(x, y)
20014 return true
20015 }
20016 break
20017 }
20018
20019
20020
20021 for {
20022 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20023 if v_0.Op != ssaop.OpConst16 {
20024 continue
20025 }
20026 t := v_0.Type
20027 c := ssa.AuxIntToInt16(v_0.AuxInt)
20028 if v_1.Op != ssaop.OpAdd16 || v_1.Type != t {
20029 continue
20030 }
20031 _ = v_1.Args[1]
20032 v_1_0 := v_1.Args[0]
20033 v_1_1 := v_1.Args[1]
20034 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20035 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
20036 continue
20037 }
20038 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
20039 x := v_1_1
20040 if !(!ssa.IsPowerOfTwo(c)) {
20041 continue
20042 }
20043 v.Reset(ssaop.OpAdd16)
20044 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20045 v0.AuxInt = ssa.Int16ToAuxInt(c * d)
20046 v1 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
20047 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20048 v2.AuxInt = ssa.Int16ToAuxInt(c)
20049 v1.AddArg2(v2, x)
20050 v.AddArg2(v0, v1)
20051 return true
20052 }
20053 }
20054 break
20055 }
20056
20057
20058 for {
20059 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20060 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
20061 continue
20062 }
20063 v.Reset(ssaop.OpConst16)
20064 v.AuxInt = ssa.Int16ToAuxInt(0)
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.OpLsh16x64)
20084 v.Type = t
20085 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20086 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log16u(uint16(c)))
20087 v.AddArg2(x, v0)
20088 return true
20089 }
20090 break
20091 }
20092
20093
20094
20095 for {
20096 t := v.Type
20097 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20098 x := v_0
20099 if v_1.Op != ssaop.OpConst16 {
20100 continue
20101 }
20102 c := ssa.AuxIntToInt16(v_1.AuxInt)
20103 if !(ssa.IsPowerOfTwo(uint16(-c)) && v.Block.Func.Pass.Name != "opt") {
20104 continue
20105 }
20106 v.Reset(ssaop.OpNeg16)
20107 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
20108 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20109 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log16u(uint16(-c)))
20110 v0.AddArg2(x, v1)
20111 v.AddArg(v0)
20112 return true
20113 }
20114 break
20115 }
20116
20117
20118
20119 for {
20120 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20121 if v_0.Op != ssaop.OpMul16 {
20122 continue
20123 }
20124 _ = v_0.Args[1]
20125 v_0_0 := v_0.Args[0]
20126 v_0_1 := v_0.Args[1]
20127 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20128 i := v_0_0
20129 if i.Op != ssaop.OpConst16 {
20130 continue
20131 }
20132 t := i.Type
20133 z := v_0_1
20134 x := v_1
20135 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
20136 continue
20137 }
20138 v.Reset(ssaop.OpMul16)
20139 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
20140 v0.AddArg2(x, z)
20141 v.AddArg2(i, v0)
20142 return true
20143 }
20144 }
20145 break
20146 }
20147
20148
20149
20150 for {
20151 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20152 if v_0.Op != ssaop.OpConst16 {
20153 continue
20154 }
20155 t := v_0.Type
20156 c := ssa.AuxIntToInt16(v_0.AuxInt)
20157 m := v_1
20158 if m.Op != ssaop.OpMul16 {
20159 continue
20160 }
20161 _ = m.Args[1]
20162 m_0 := m.Args[0]
20163 m_1 := m.Args[1]
20164 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20165 if m_0.Op != ssaop.OpConst16 || m_0.Type != t {
20166 continue
20167 }
20168 d := ssa.AuxIntToInt16(m_0.AuxInt)
20169 x := m_1
20170 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20171 continue
20172 }
20173 v.Reset(ssaop.OpMul16)
20174 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20175 v0.AuxInt = ssa.Int16ToAuxInt(c * d)
20176 v.AddArg2(v0, x)
20177 return true
20178 }
20179 }
20180 break
20181 }
20182 return false
20183 }
20184 func rewriteValue_OpMul32(v *ssa.Value) bool {
20185 v_1 := v.Args[1]
20186 v_0 := v.Args[0]
20187 b := v.Block
20188 typ := &b.Func.Config.Types
20189
20190
20191 for {
20192 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20193 if v_0.Op != ssaop.OpConst32 {
20194 continue
20195 }
20196 c := ssa.AuxIntToInt32(v_0.AuxInt)
20197 if v_1.Op != ssaop.OpConst32 {
20198 continue
20199 }
20200 d := ssa.AuxIntToInt32(v_1.AuxInt)
20201 v.Reset(ssaop.OpConst32)
20202 v.AuxInt = ssa.Int32ToAuxInt(c * d)
20203 return true
20204 }
20205 break
20206 }
20207
20208
20209 for {
20210 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20211 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
20212 continue
20213 }
20214 x := v_1
20215 v.CopyOf(x)
20216 return true
20217 }
20218 break
20219 }
20220
20221
20222 for {
20223 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20224 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
20225 continue
20226 }
20227 x := v_1
20228 v.Reset(ssaop.OpNeg32)
20229 v.AddArg(x)
20230 return true
20231 }
20232 break
20233 }
20234
20235
20236 for {
20237 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20238 if v_0.Op != ssaop.OpConst32 {
20239 continue
20240 }
20241 t := v_0.Type
20242 c := ssa.AuxIntToInt32(v_0.AuxInt)
20243 if v_1.Op != ssaop.OpNeg32 {
20244 continue
20245 }
20246 x := v_1.Args[0]
20247 v.Reset(ssaop.OpMul32)
20248 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20249 v0.AuxInt = ssa.Int32ToAuxInt(-c)
20250 v.AddArg2(x, v0)
20251 return true
20252 }
20253 break
20254 }
20255
20256
20257 for {
20258 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20259 if v_0.Op != ssaop.OpNeg32 {
20260 continue
20261 }
20262 x := v_0.Args[0]
20263 if v_1.Op != ssaop.OpNeg32 {
20264 continue
20265 }
20266 y := v_1.Args[0]
20267 v.Reset(ssaop.OpMul32)
20268 v.AddArg2(x, y)
20269 return true
20270 }
20271 break
20272 }
20273
20274
20275
20276 for {
20277 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20278 if v_0.Op != ssaop.OpConst32 {
20279 continue
20280 }
20281 t := v_0.Type
20282 c := ssa.AuxIntToInt32(v_0.AuxInt)
20283 if v_1.Op != ssaop.OpAdd32 || v_1.Type != t {
20284 continue
20285 }
20286 _ = v_1.Args[1]
20287 v_1_0 := v_1.Args[0]
20288 v_1_1 := v_1.Args[1]
20289 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20290 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
20291 continue
20292 }
20293 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
20294 x := v_1_1
20295 if !(!ssa.IsPowerOfTwo(c)) {
20296 continue
20297 }
20298 v.Reset(ssaop.OpAdd32)
20299 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20300 v0.AuxInt = ssa.Int32ToAuxInt(c * d)
20301 v1 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
20302 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20303 v2.AuxInt = ssa.Int32ToAuxInt(c)
20304 v1.AddArg2(v2, x)
20305 v.AddArg2(v0, v1)
20306 return true
20307 }
20308 }
20309 break
20310 }
20311
20312
20313 for {
20314 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20315 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20316 continue
20317 }
20318 v.Reset(ssaop.OpConst32)
20319 v.AuxInt = ssa.Int32ToAuxInt(0)
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.OpLsh32x64)
20339 v.Type = t
20340 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20341 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log32u(uint32(c)))
20342 v.AddArg2(x, v0)
20343 return true
20344 }
20345 break
20346 }
20347
20348
20349
20350 for {
20351 t := v.Type
20352 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20353 x := v_0
20354 if v_1.Op != ssaop.OpConst32 {
20355 continue
20356 }
20357 c := ssa.AuxIntToInt32(v_1.AuxInt)
20358 if !(ssa.IsPowerOfTwo(uint32(-c)) && v.Block.Func.Pass.Name != "opt") {
20359 continue
20360 }
20361 v.Reset(ssaop.OpNeg32)
20362 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
20363 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20364 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log32u(uint32(-c)))
20365 v0.AddArg2(x, v1)
20366 v.AddArg(v0)
20367 return true
20368 }
20369 break
20370 }
20371
20372
20373
20374 for {
20375 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20376 if v_0.Op != ssaop.OpMul32 {
20377 continue
20378 }
20379 _ = v_0.Args[1]
20380 v_0_0 := v_0.Args[0]
20381 v_0_1 := v_0.Args[1]
20382 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20383 i := v_0_0
20384 if i.Op != ssaop.OpConst32 {
20385 continue
20386 }
20387 t := i.Type
20388 z := v_0_1
20389 x := v_1
20390 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
20391 continue
20392 }
20393 v.Reset(ssaop.OpMul32)
20394 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
20395 v0.AddArg2(x, z)
20396 v.AddArg2(i, v0)
20397 return true
20398 }
20399 }
20400 break
20401 }
20402
20403
20404
20405 for {
20406 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20407 if v_0.Op != ssaop.OpConst32 {
20408 continue
20409 }
20410 t := v_0.Type
20411 c := ssa.AuxIntToInt32(v_0.AuxInt)
20412 m := v_1
20413 if m.Op != ssaop.OpMul32 {
20414 continue
20415 }
20416 _ = m.Args[1]
20417 m_0 := m.Args[0]
20418 m_1 := m.Args[1]
20419 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20420 if m_0.Op != ssaop.OpConst32 || m_0.Type != t {
20421 continue
20422 }
20423 d := ssa.AuxIntToInt32(m_0.AuxInt)
20424 x := m_1
20425 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20426 continue
20427 }
20428 v.Reset(ssaop.OpMul32)
20429 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20430 v0.AuxInt = ssa.Int32ToAuxInt(c * d)
20431 v.AddArg2(v0, x)
20432 return true
20433 }
20434 }
20435 break
20436 }
20437 return false
20438 }
20439 func rewriteValue_OpMul32F(v *ssa.Value) bool {
20440 v_1 := v.Args[1]
20441 v_0 := v.Args[0]
20442
20443
20444
20445 for {
20446 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20447 if v_0.Op != ssaop.OpConst32F {
20448 continue
20449 }
20450 c := ssa.AuxIntToFloat32(v_0.AuxInt)
20451 if v_1.Op != ssaop.OpConst32F {
20452 continue
20453 }
20454 d := ssa.AuxIntToFloat32(v_1.AuxInt)
20455 if !(c*d == c*d) {
20456 continue
20457 }
20458 v.Reset(ssaop.OpConst32F)
20459 v.AuxInt = ssa.Float32ToAuxInt(c * d)
20460 return true
20461 }
20462 break
20463 }
20464
20465
20466 for {
20467 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20468 x := v_0
20469 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != 1 {
20470 continue
20471 }
20472 v.CopyOf(x)
20473 return true
20474 }
20475 break
20476 }
20477
20478
20479 for {
20480 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20481 x := v_0
20482 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != -1 {
20483 continue
20484 }
20485 v.Reset(ssaop.OpNeg32F)
20486 v.AddArg(x)
20487 return true
20488 }
20489 break
20490 }
20491
20492
20493 for {
20494 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20495 x := v_0
20496 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != 2 {
20497 continue
20498 }
20499 v.Reset(ssaop.OpAdd32F)
20500 v.AddArg2(x, x)
20501 return true
20502 }
20503 break
20504 }
20505 return false
20506 }
20507 func rewriteValue_OpMul32uhilo(v *ssa.Value) bool {
20508 v_1 := v.Args[1]
20509 v_0 := v.Args[0]
20510 b := v.Block
20511 typ := &b.Func.Config.Types
20512
20513
20514 for {
20515 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20516 if v_0.Op != ssaop.OpConst32 {
20517 continue
20518 }
20519 c := ssa.AuxIntToInt32(v_0.AuxInt)
20520 if v_1.Op != ssaop.OpConst32 {
20521 continue
20522 }
20523 d := ssa.AuxIntToInt32(v_1.AuxInt)
20524 v.Reset(ssaop.OpMakeTuple)
20525 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20526 v0.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).hi)
20527 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20528 v1.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).lo)
20529 v.AddArg2(v0, v1)
20530 return true
20531 }
20532 break
20533 }
20534 return false
20535 }
20536 func rewriteValue_OpMul32uover(v *ssa.Value) bool {
20537 v_1 := v.Args[1]
20538 v_0 := v.Args[0]
20539 b := v.Block
20540 typ := &b.Func.Config.Types
20541
20542
20543 for {
20544 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20545 if v_0.Op != ssaop.OpConst32 {
20546 continue
20547 }
20548 c := ssa.AuxIntToInt32(v_0.AuxInt)
20549 if v_1.Op != ssaop.OpConst32 {
20550 continue
20551 }
20552 d := ssa.AuxIntToInt32(v_1.AuxInt)
20553 v.Reset(ssaop.OpMakeTuple)
20554 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20555 v0.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).lo)
20556 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
20557 v1.AuxInt = ssa.BoolToAuxInt(bitsMulU32(c, d).hi != 0)
20558 v.AddArg2(v0, v1)
20559 return true
20560 }
20561 break
20562 }
20563
20564
20565 for {
20566 t := v.Type
20567 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20568 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
20569 continue
20570 }
20571 x := v_1
20572 v.Reset(ssaop.OpMakeTuple)
20573 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
20574 v0.AuxInt = ssa.BoolToAuxInt(false)
20575 v.AddArg2(x, v0)
20576 return true
20577 }
20578 break
20579 }
20580
20581
20582 for {
20583 t := v.Type
20584 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20585 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20586 continue
20587 }
20588 v.Reset(ssaop.OpMakeTuple)
20589 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t.FieldType(0))
20590 v0.AuxInt = ssa.Int32ToAuxInt(0)
20591 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
20592 v1.AuxInt = ssa.BoolToAuxInt(false)
20593 v.AddArg2(v0, v1)
20594 return true
20595 }
20596 break
20597 }
20598 return false
20599 }
20600 func rewriteValue_OpMul64(v *ssa.Value) bool {
20601 v_1 := v.Args[1]
20602 v_0 := v.Args[0]
20603 b := v.Block
20604 typ := &b.Func.Config.Types
20605
20606
20607 for {
20608 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20609 if v_0.Op != ssaop.OpConst64 {
20610 continue
20611 }
20612 c := ssa.AuxIntToInt64(v_0.AuxInt)
20613 if v_1.Op != ssaop.OpConst64 {
20614 continue
20615 }
20616 d := ssa.AuxIntToInt64(v_1.AuxInt)
20617 v.Reset(ssaop.OpConst64)
20618 v.AuxInt = ssa.Int64ToAuxInt(c * d)
20619 return true
20620 }
20621 break
20622 }
20623
20624
20625 for {
20626 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20627 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
20628 continue
20629 }
20630 x := v_1
20631 v.CopyOf(x)
20632 return true
20633 }
20634 break
20635 }
20636
20637
20638 for {
20639 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20640 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
20641 continue
20642 }
20643 x := v_1
20644 v.Reset(ssaop.OpNeg64)
20645 v.AddArg(x)
20646 return true
20647 }
20648 break
20649 }
20650
20651
20652 for {
20653 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20654 if v_0.Op != ssaop.OpConst64 {
20655 continue
20656 }
20657 t := v_0.Type
20658 c := ssa.AuxIntToInt64(v_0.AuxInt)
20659 if v_1.Op != ssaop.OpNeg64 {
20660 continue
20661 }
20662 x := v_1.Args[0]
20663 v.Reset(ssaop.OpMul64)
20664 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20665 v0.AuxInt = ssa.Int64ToAuxInt(-c)
20666 v.AddArg2(x, v0)
20667 return true
20668 }
20669 break
20670 }
20671
20672
20673 for {
20674 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20675 if v_0.Op != ssaop.OpNeg64 {
20676 continue
20677 }
20678 x := v_0.Args[0]
20679 if v_1.Op != ssaop.OpNeg64 {
20680 continue
20681 }
20682 y := v_1.Args[0]
20683 v.Reset(ssaop.OpMul64)
20684 v.AddArg2(x, y)
20685 return true
20686 }
20687 break
20688 }
20689
20690
20691
20692 for {
20693 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20694 if v_0.Op != ssaop.OpConst64 {
20695 continue
20696 }
20697 t := v_0.Type
20698 c := ssa.AuxIntToInt64(v_0.AuxInt)
20699 if v_1.Op != ssaop.OpAdd64 || v_1.Type != t {
20700 continue
20701 }
20702 _ = v_1.Args[1]
20703 v_1_0 := v_1.Args[0]
20704 v_1_1 := v_1.Args[1]
20705 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20706 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
20707 continue
20708 }
20709 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
20710 x := v_1_1
20711 if !(!ssa.IsPowerOfTwo(c)) {
20712 continue
20713 }
20714 v.Reset(ssaop.OpAdd64)
20715 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20716 v0.AuxInt = ssa.Int64ToAuxInt(c * d)
20717 v1 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
20718 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20719 v2.AuxInt = ssa.Int64ToAuxInt(c)
20720 v1.AddArg2(v2, x)
20721 v.AddArg2(v0, v1)
20722 return true
20723 }
20724 }
20725 break
20726 }
20727
20728
20729 for {
20730 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20731 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
20732 continue
20733 }
20734 v.Reset(ssaop.OpConst64)
20735 v.AuxInt = ssa.Int64ToAuxInt(0)
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.OpLsh64x64)
20755 v.Type = t
20756 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20757 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(c)))
20758 v.AddArg2(x, v0)
20759 return true
20760 }
20761 break
20762 }
20763
20764
20765
20766 for {
20767 t := v.Type
20768 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20769 x := v_0
20770 if v_1.Op != ssaop.OpConst64 {
20771 continue
20772 }
20773 c := ssa.AuxIntToInt64(v_1.AuxInt)
20774 if !(ssa.IsPowerOfTwo(uint64(-c)) && v.Block.Func.Pass.Name != "opt") {
20775 continue
20776 }
20777 v.Reset(ssaop.OpNeg64)
20778 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
20779 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20780 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(-c)))
20781 v0.AddArg2(x, v1)
20782 v.AddArg(v0)
20783 return true
20784 }
20785 break
20786 }
20787
20788
20789
20790 for {
20791 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20792 if v_0.Op != ssaop.OpMul64 {
20793 continue
20794 }
20795 _ = v_0.Args[1]
20796 v_0_0 := v_0.Args[0]
20797 v_0_1 := v_0.Args[1]
20798 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20799 i := v_0_0
20800 if i.Op != ssaop.OpConst64 {
20801 continue
20802 }
20803 t := i.Type
20804 z := v_0_1
20805 x := v_1
20806 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
20807 continue
20808 }
20809 v.Reset(ssaop.OpMul64)
20810 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
20811 v0.AddArg2(x, z)
20812 v.AddArg2(i, v0)
20813 return true
20814 }
20815 }
20816 break
20817 }
20818
20819
20820
20821 for {
20822 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20823 if v_0.Op != ssaop.OpConst64 {
20824 continue
20825 }
20826 t := v_0.Type
20827 c := ssa.AuxIntToInt64(v_0.AuxInt)
20828 m := v_1
20829 if m.Op != ssaop.OpMul64 {
20830 continue
20831 }
20832 _ = m.Args[1]
20833 m_0 := m.Args[0]
20834 m_1 := m.Args[1]
20835 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20836 if m_0.Op != ssaop.OpConst64 || m_0.Type != t {
20837 continue
20838 }
20839 d := ssa.AuxIntToInt64(m_0.AuxInt)
20840 x := m_1
20841 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20842 continue
20843 }
20844 v.Reset(ssaop.OpMul64)
20845 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20846 v0.AuxInt = ssa.Int64ToAuxInt(c * d)
20847 v.AddArg2(v0, x)
20848 return true
20849 }
20850 }
20851 break
20852 }
20853 return false
20854 }
20855 func rewriteValue_OpMul64F(v *ssa.Value) bool {
20856 v_1 := v.Args[1]
20857 v_0 := v.Args[0]
20858
20859
20860
20861 for {
20862 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20863 if v_0.Op != ssaop.OpConst64F {
20864 continue
20865 }
20866 c := ssa.AuxIntToFloat64(v_0.AuxInt)
20867 if v_1.Op != ssaop.OpConst64F {
20868 continue
20869 }
20870 d := ssa.AuxIntToFloat64(v_1.AuxInt)
20871 if !(c*d == c*d) {
20872 continue
20873 }
20874 v.Reset(ssaop.OpConst64F)
20875 v.AuxInt = ssa.Float64ToAuxInt(c * d)
20876 return true
20877 }
20878 break
20879 }
20880
20881
20882 for {
20883 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20884 x := v_0
20885 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != 1 {
20886 continue
20887 }
20888 v.CopyOf(x)
20889 return true
20890 }
20891 break
20892 }
20893
20894
20895 for {
20896 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20897 x := v_0
20898 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != -1 {
20899 continue
20900 }
20901 v.Reset(ssaop.OpNeg64F)
20902 v.AddArg(x)
20903 return true
20904 }
20905 break
20906 }
20907
20908
20909 for {
20910 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20911 x := v_0
20912 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != 2 {
20913 continue
20914 }
20915 v.Reset(ssaop.OpAdd64F)
20916 v.AddArg2(x, x)
20917 return true
20918 }
20919 break
20920 }
20921 return false
20922 }
20923 func rewriteValue_OpMul64uhilo(v *ssa.Value) bool {
20924 v_1 := v.Args[1]
20925 v_0 := v.Args[0]
20926 b := v.Block
20927 typ := &b.Func.Config.Types
20928
20929
20930 for {
20931 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20932 if v_0.Op != ssaop.OpConst64 {
20933 continue
20934 }
20935 c := ssa.AuxIntToInt64(v_0.AuxInt)
20936 if v_1.Op != ssaop.OpConst64 {
20937 continue
20938 }
20939 d := ssa.AuxIntToInt64(v_1.AuxInt)
20940 v.Reset(ssaop.OpMakeTuple)
20941 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20942 v0.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).hi)
20943 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20944 v1.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).lo)
20945 v.AddArg2(v0, v1)
20946 return true
20947 }
20948 break
20949 }
20950
20951
20952
20953 for {
20954 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20955 x := v_0
20956 if v_1.Op != ssaop.OpConst64 {
20957 continue
20958 }
20959 c := ssa.AuxIntToInt64(v_1.AuxInt)
20960 if !(c > 0 && ssa.IsPowerOfTwo(uint64(c))) {
20961 continue
20962 }
20963 v.Reset(ssaop.OpMakeTuple)
20964 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64Ux64, typ.UInt64)
20965 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20966 v1.AuxInt = ssa.Int64ToAuxInt(64 - ssa.Log64u(uint64(c)))
20967 v0.AddArg2(x, v1)
20968 v2 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.UInt64)
20969 v3 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20970 v3.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(c)))
20971 v2.AddArg2(x, v3)
20972 v.AddArg2(v0, v2)
20973 return true
20974 }
20975 break
20976 }
20977 return false
20978 }
20979 func rewriteValue_OpMul64uover(v *ssa.Value) bool {
20980 v_1 := v.Args[1]
20981 v_0 := v.Args[0]
20982 b := v.Block
20983 typ := &b.Func.Config.Types
20984
20985
20986 for {
20987 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20988 if v_0.Op != ssaop.OpConst64 {
20989 continue
20990 }
20991 c := ssa.AuxIntToInt64(v_0.AuxInt)
20992 if v_1.Op != ssaop.OpConst64 {
20993 continue
20994 }
20995 d := ssa.AuxIntToInt64(v_1.AuxInt)
20996 v.Reset(ssaop.OpMakeTuple)
20997 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20998 v0.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).lo)
20999 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
21000 v1.AuxInt = ssa.BoolToAuxInt(bitsMulU64(c, d).hi != 0)
21001 v.AddArg2(v0, v1)
21002 return true
21003 }
21004 break
21005 }
21006
21007
21008 for {
21009 t := v.Type
21010 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21011 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
21012 continue
21013 }
21014 x := v_1
21015 v.Reset(ssaop.OpMakeTuple)
21016 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
21017 v0.AuxInt = ssa.BoolToAuxInt(false)
21018 v.AddArg2(x, v0)
21019 return true
21020 }
21021 break
21022 }
21023
21024
21025 for {
21026 t := v.Type
21027 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21028 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
21029 continue
21030 }
21031 v.Reset(ssaop.OpMakeTuple)
21032 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t.FieldType(0))
21033 v0.AuxInt = ssa.Int64ToAuxInt(0)
21034 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
21035 v1.AuxInt = ssa.BoolToAuxInt(false)
21036 v.AddArg2(v0, v1)
21037 return true
21038 }
21039 break
21040 }
21041 return false
21042 }
21043 func rewriteValue_OpMul8(v *ssa.Value) bool {
21044 v_1 := v.Args[1]
21045 v_0 := v.Args[0]
21046 b := v.Block
21047 typ := &b.Func.Config.Types
21048
21049
21050 for {
21051 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21052 if v_0.Op != ssaop.OpConst8 {
21053 continue
21054 }
21055 c := ssa.AuxIntToInt8(v_0.AuxInt)
21056 if v_1.Op != ssaop.OpConst8 {
21057 continue
21058 }
21059 d := ssa.AuxIntToInt8(v_1.AuxInt)
21060 v.Reset(ssaop.OpConst8)
21061 v.AuxInt = ssa.Int8ToAuxInt(c * d)
21062 return true
21063 }
21064 break
21065 }
21066
21067
21068 for {
21069 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21070 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 1 {
21071 continue
21072 }
21073 x := v_1
21074 v.CopyOf(x)
21075 return true
21076 }
21077 break
21078 }
21079
21080
21081 for {
21082 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21083 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
21084 continue
21085 }
21086 x := v_1
21087 v.Reset(ssaop.OpNeg8)
21088 v.AddArg(x)
21089 return true
21090 }
21091 break
21092 }
21093
21094
21095 for {
21096 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21097 if v_0.Op != ssaop.OpConst8 {
21098 continue
21099 }
21100 t := v_0.Type
21101 c := ssa.AuxIntToInt8(v_0.AuxInt)
21102 if v_1.Op != ssaop.OpNeg8 {
21103 continue
21104 }
21105 x := v_1.Args[0]
21106 v.Reset(ssaop.OpMul8)
21107 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21108 v0.AuxInt = ssa.Int8ToAuxInt(-c)
21109 v.AddArg2(x, v0)
21110 return true
21111 }
21112 break
21113 }
21114
21115
21116 for {
21117 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21118 if v_0.Op != ssaop.OpNeg8 {
21119 continue
21120 }
21121 x := v_0.Args[0]
21122 if v_1.Op != ssaop.OpNeg8 {
21123 continue
21124 }
21125 y := v_1.Args[0]
21126 v.Reset(ssaop.OpMul8)
21127 v.AddArg2(x, y)
21128 return true
21129 }
21130 break
21131 }
21132
21133
21134
21135 for {
21136 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21137 if v_0.Op != ssaop.OpConst8 {
21138 continue
21139 }
21140 t := v_0.Type
21141 c := ssa.AuxIntToInt8(v_0.AuxInt)
21142 if v_1.Op != ssaop.OpAdd8 || v_1.Type != t {
21143 continue
21144 }
21145 _ = v_1.Args[1]
21146 v_1_0 := v_1.Args[0]
21147 v_1_1 := v_1.Args[1]
21148 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
21149 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
21150 continue
21151 }
21152 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
21153 x := v_1_1
21154 if !(!ssa.IsPowerOfTwo(c)) {
21155 continue
21156 }
21157 v.Reset(ssaop.OpAdd8)
21158 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21159 v0.AuxInt = ssa.Int8ToAuxInt(c * d)
21160 v1 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
21161 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21162 v2.AuxInt = ssa.Int8ToAuxInt(c)
21163 v1.AddArg2(v2, x)
21164 v.AddArg2(v0, v1)
21165 return true
21166 }
21167 }
21168 break
21169 }
21170
21171
21172 for {
21173 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21174 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
21175 continue
21176 }
21177 v.Reset(ssaop.OpConst8)
21178 v.AuxInt = ssa.Int8ToAuxInt(0)
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.OpLsh8x64)
21198 v.Type = t
21199 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
21200 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log8u(uint8(c)))
21201 v.AddArg2(x, v0)
21202 return true
21203 }
21204 break
21205 }
21206
21207
21208
21209 for {
21210 t := v.Type
21211 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21212 x := v_0
21213 if v_1.Op != ssaop.OpConst8 {
21214 continue
21215 }
21216 c := ssa.AuxIntToInt8(v_1.AuxInt)
21217 if !(ssa.IsPowerOfTwo(uint8(-c)) && v.Block.Func.Pass.Name != "opt") {
21218 continue
21219 }
21220 v.Reset(ssaop.OpNeg8)
21221 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
21222 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
21223 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log8u(uint8(-c)))
21224 v0.AddArg2(x, v1)
21225 v.AddArg(v0)
21226 return true
21227 }
21228 break
21229 }
21230
21231
21232
21233 for {
21234 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21235 if v_0.Op != ssaop.OpMul8 {
21236 continue
21237 }
21238 _ = v_0.Args[1]
21239 v_0_0 := v_0.Args[0]
21240 v_0_1 := v_0.Args[1]
21241 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
21242 i := v_0_0
21243 if i.Op != ssaop.OpConst8 {
21244 continue
21245 }
21246 t := i.Type
21247 z := v_0_1
21248 x := v_1
21249 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
21250 continue
21251 }
21252 v.Reset(ssaop.OpMul8)
21253 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
21254 v0.AddArg2(x, z)
21255 v.AddArg2(i, v0)
21256 return true
21257 }
21258 }
21259 break
21260 }
21261
21262
21263
21264 for {
21265 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21266 if v_0.Op != ssaop.OpConst8 {
21267 continue
21268 }
21269 t := v_0.Type
21270 c := ssa.AuxIntToInt8(v_0.AuxInt)
21271 m := v_1
21272 if m.Op != ssaop.OpMul8 {
21273 continue
21274 }
21275 _ = m.Args[1]
21276 m_0 := m.Args[0]
21277 m_1 := m.Args[1]
21278 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
21279 if m_0.Op != ssaop.OpConst8 || m_0.Type != t {
21280 continue
21281 }
21282 d := ssa.AuxIntToInt8(m_0.AuxInt)
21283 x := m_1
21284 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
21285 continue
21286 }
21287 v.Reset(ssaop.OpMul8)
21288 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21289 v0.AuxInt = ssa.Int8ToAuxInt(c * d)
21290 v.AddArg2(v0, x)
21291 return true
21292 }
21293 }
21294 break
21295 }
21296 return false
21297 }
21298 func rewriteValue_OpNeg16(v *ssa.Value) bool {
21299 v_0 := v.Args[0]
21300 b := v.Block
21301
21302
21303 for {
21304 if v_0.Op != ssaop.OpConst16 {
21305 break
21306 }
21307 c := ssa.AuxIntToInt16(v_0.AuxInt)
21308 v.Reset(ssaop.OpConst16)
21309 v.AuxInt = ssa.Int16ToAuxInt(-c)
21310 return true
21311 }
21312
21313
21314 for {
21315 if v_0.Op != ssaop.OpMul16 {
21316 break
21317 }
21318 _ = v_0.Args[1]
21319 v_0_0 := v_0.Args[0]
21320 v_0_1 := v_0.Args[1]
21321 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21322 x := v_0_0
21323 if v_0_1.Op != ssaop.OpConst16 {
21324 continue
21325 }
21326 t := v_0_1.Type
21327 c := ssa.AuxIntToInt16(v_0_1.AuxInt)
21328 v.Reset(ssaop.OpMul16)
21329 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21330 v0.AuxInt = ssa.Int16ToAuxInt(-c)
21331 v.AddArg2(x, v0)
21332 return true
21333 }
21334 break
21335 }
21336
21337
21338 for {
21339 if v_0.Op != ssaop.OpMul16 {
21340 break
21341 }
21342 _ = v_0.Args[1]
21343 v_0_0 := v_0.Args[0]
21344 v_0_1 := v_0.Args[1]
21345 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21346 x := v_0_0
21347 if v_0_1.Op != ssaop.OpNeg16 {
21348 continue
21349 }
21350 y := v_0_1.Args[0]
21351 v.Reset(ssaop.OpMul16)
21352 v.AddArg2(x, y)
21353 return true
21354 }
21355 break
21356 }
21357
21358
21359 for {
21360 if v_0.Op != ssaop.OpSub16 {
21361 break
21362 }
21363 y := v_0.Args[1]
21364 x := v_0.Args[0]
21365 v.Reset(ssaop.OpSub16)
21366 v.AddArg2(y, x)
21367 return true
21368 }
21369
21370
21371 for {
21372 if v_0.Op != ssaop.OpNeg16 {
21373 break
21374 }
21375 x := v_0.Args[0]
21376 v.CopyOf(x)
21377 return true
21378 }
21379
21380
21381 for {
21382 t := v.Type
21383 if v_0.Op != ssaop.OpCom16 {
21384 break
21385 }
21386 x := v_0.Args[0]
21387 v.Reset(ssaop.OpAdd16)
21388 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21389 v0.AuxInt = ssa.Int16ToAuxInt(1)
21390 v.AddArg2(v0, x)
21391 return true
21392 }
21393 return false
21394 }
21395 func rewriteValue_OpNeg32(v *ssa.Value) bool {
21396 v_0 := v.Args[0]
21397 b := v.Block
21398
21399
21400 for {
21401 if v_0.Op != ssaop.OpConst32 {
21402 break
21403 }
21404 c := ssa.AuxIntToInt32(v_0.AuxInt)
21405 v.Reset(ssaop.OpConst32)
21406 v.AuxInt = ssa.Int32ToAuxInt(-c)
21407 return true
21408 }
21409
21410
21411 for {
21412 if v_0.Op != ssaop.OpMul32 {
21413 break
21414 }
21415 _ = v_0.Args[1]
21416 v_0_0 := v_0.Args[0]
21417 v_0_1 := v_0.Args[1]
21418 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21419 x := v_0_0
21420 if v_0_1.Op != ssaop.OpConst32 {
21421 continue
21422 }
21423 t := v_0_1.Type
21424 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
21425 v.Reset(ssaop.OpMul32)
21426 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
21427 v0.AuxInt = ssa.Int32ToAuxInt(-c)
21428 v.AddArg2(x, v0)
21429 return true
21430 }
21431 break
21432 }
21433
21434
21435 for {
21436 if v_0.Op != ssaop.OpMul32 {
21437 break
21438 }
21439 _ = v_0.Args[1]
21440 v_0_0 := v_0.Args[0]
21441 v_0_1 := v_0.Args[1]
21442 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21443 x := v_0_0
21444 if v_0_1.Op != ssaop.OpNeg32 {
21445 continue
21446 }
21447 y := v_0_1.Args[0]
21448 v.Reset(ssaop.OpMul32)
21449 v.AddArg2(x, y)
21450 return true
21451 }
21452 break
21453 }
21454
21455
21456 for {
21457 if v_0.Op != ssaop.OpSub32 {
21458 break
21459 }
21460 y := v_0.Args[1]
21461 x := v_0.Args[0]
21462 v.Reset(ssaop.OpSub32)
21463 v.AddArg2(y, x)
21464 return true
21465 }
21466
21467
21468 for {
21469 if v_0.Op != ssaop.OpNeg32 {
21470 break
21471 }
21472 x := v_0.Args[0]
21473 v.CopyOf(x)
21474 return true
21475 }
21476
21477
21478 for {
21479 t := v.Type
21480 if v_0.Op != ssaop.OpCom32 {
21481 break
21482 }
21483 x := v_0.Args[0]
21484 v.Reset(ssaop.OpAdd32)
21485 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
21486 v0.AuxInt = ssa.Int32ToAuxInt(1)
21487 v.AddArg2(v0, x)
21488 return true
21489 }
21490 return false
21491 }
21492 func rewriteValue_OpNeg32F(v *ssa.Value) bool {
21493 v_0 := v.Args[0]
21494
21495
21496
21497 for {
21498 if v_0.Op != ssaop.OpConst32F {
21499 break
21500 }
21501 c := ssa.AuxIntToFloat32(v_0.AuxInt)
21502 if !(c != 0) {
21503 break
21504 }
21505 v.Reset(ssaop.OpConst32F)
21506 v.AuxInt = ssa.Float32ToAuxInt(-c)
21507 return true
21508 }
21509 return false
21510 }
21511 func rewriteValue_OpNeg64(v *ssa.Value) bool {
21512 v_0 := v.Args[0]
21513 b := v.Block
21514
21515
21516 for {
21517 if v_0.Op != ssaop.OpConst64 {
21518 break
21519 }
21520 c := ssa.AuxIntToInt64(v_0.AuxInt)
21521 v.Reset(ssaop.OpConst64)
21522 v.AuxInt = ssa.Int64ToAuxInt(-c)
21523 return true
21524 }
21525
21526
21527 for {
21528 if v_0.Op != ssaop.OpMul64 {
21529 break
21530 }
21531 _ = v_0.Args[1]
21532 v_0_0 := v_0.Args[0]
21533 v_0_1 := v_0.Args[1]
21534 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21535 x := v_0_0
21536 if v_0_1.Op != ssaop.OpConst64 {
21537 continue
21538 }
21539 t := v_0_1.Type
21540 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
21541 v.Reset(ssaop.OpMul64)
21542 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
21543 v0.AuxInt = ssa.Int64ToAuxInt(-c)
21544 v.AddArg2(x, v0)
21545 return true
21546 }
21547 break
21548 }
21549
21550
21551 for {
21552 if v_0.Op != ssaop.OpMul64 {
21553 break
21554 }
21555 _ = v_0.Args[1]
21556 v_0_0 := v_0.Args[0]
21557 v_0_1 := v_0.Args[1]
21558 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21559 x := v_0_0
21560 if v_0_1.Op != ssaop.OpNeg64 {
21561 continue
21562 }
21563 y := v_0_1.Args[0]
21564 v.Reset(ssaop.OpMul64)
21565 v.AddArg2(x, y)
21566 return true
21567 }
21568 break
21569 }
21570
21571
21572 for {
21573 if v_0.Op != ssaop.OpSub64 {
21574 break
21575 }
21576 y := v_0.Args[1]
21577 x := v_0.Args[0]
21578 v.Reset(ssaop.OpSub64)
21579 v.AddArg2(y, x)
21580 return true
21581 }
21582
21583
21584 for {
21585 if v_0.Op != ssaop.OpNeg64 {
21586 break
21587 }
21588 x := v_0.Args[0]
21589 v.CopyOf(x)
21590 return true
21591 }
21592
21593
21594 for {
21595 t := v.Type
21596 if v_0.Op != ssaop.OpCom64 {
21597 break
21598 }
21599 x := v_0.Args[0]
21600 v.Reset(ssaop.OpAdd64)
21601 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
21602 v0.AuxInt = ssa.Int64ToAuxInt(1)
21603 v.AddArg2(v0, x)
21604 return true
21605 }
21606 return false
21607 }
21608 func rewriteValue_OpNeg64F(v *ssa.Value) bool {
21609 v_0 := v.Args[0]
21610
21611
21612
21613 for {
21614 if v_0.Op != ssaop.OpConst64F {
21615 break
21616 }
21617 c := ssa.AuxIntToFloat64(v_0.AuxInt)
21618 if !(c != 0) {
21619 break
21620 }
21621 v.Reset(ssaop.OpConst64F)
21622 v.AuxInt = ssa.Float64ToAuxInt(-c)
21623 return true
21624 }
21625 return false
21626 }
21627 func rewriteValue_OpNeg8(v *ssa.Value) bool {
21628 v_0 := v.Args[0]
21629 b := v.Block
21630
21631
21632 for {
21633 if v_0.Op != ssaop.OpConst8 {
21634 break
21635 }
21636 c := ssa.AuxIntToInt8(v_0.AuxInt)
21637 v.Reset(ssaop.OpConst8)
21638 v.AuxInt = ssa.Int8ToAuxInt(-c)
21639 return true
21640 }
21641
21642
21643 for {
21644 if v_0.Op != ssaop.OpMul8 {
21645 break
21646 }
21647 _ = v_0.Args[1]
21648 v_0_0 := v_0.Args[0]
21649 v_0_1 := v_0.Args[1]
21650 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21651 x := v_0_0
21652 if v_0_1.Op != ssaop.OpConst8 {
21653 continue
21654 }
21655 t := v_0_1.Type
21656 c := ssa.AuxIntToInt8(v_0_1.AuxInt)
21657 v.Reset(ssaop.OpMul8)
21658 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21659 v0.AuxInt = ssa.Int8ToAuxInt(-c)
21660 v.AddArg2(x, v0)
21661 return true
21662 }
21663 break
21664 }
21665
21666
21667 for {
21668 if v_0.Op != ssaop.OpMul8 {
21669 break
21670 }
21671 _ = v_0.Args[1]
21672 v_0_0 := v_0.Args[0]
21673 v_0_1 := v_0.Args[1]
21674 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21675 x := v_0_0
21676 if v_0_1.Op != ssaop.OpNeg8 {
21677 continue
21678 }
21679 y := v_0_1.Args[0]
21680 v.Reset(ssaop.OpMul8)
21681 v.AddArg2(x, y)
21682 return true
21683 }
21684 break
21685 }
21686
21687
21688 for {
21689 if v_0.Op != ssaop.OpSub8 {
21690 break
21691 }
21692 y := v_0.Args[1]
21693 x := v_0.Args[0]
21694 v.Reset(ssaop.OpSub8)
21695 v.AddArg2(y, x)
21696 return true
21697 }
21698
21699
21700 for {
21701 if v_0.Op != ssaop.OpNeg8 {
21702 break
21703 }
21704 x := v_0.Args[0]
21705 v.CopyOf(x)
21706 return true
21707 }
21708
21709
21710 for {
21711 t := v.Type
21712 if v_0.Op != ssaop.OpCom8 {
21713 break
21714 }
21715 x := v_0.Args[0]
21716 v.Reset(ssaop.OpAdd8)
21717 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21718 v0.AuxInt = ssa.Int8ToAuxInt(1)
21719 v.AddArg2(v0, x)
21720 return true
21721 }
21722 return false
21723 }
21724 func rewriteValue_OpNeq16(v *ssa.Value) bool {
21725 v_1 := v.Args[1]
21726 v_0 := v.Args[0]
21727 b := v.Block
21728
21729
21730 for {
21731 x := v_0
21732 if x != v_1 {
21733 break
21734 }
21735 v.Reset(ssaop.OpConstBool)
21736 v.AuxInt = ssa.BoolToAuxInt(false)
21737 return true
21738 }
21739
21740
21741
21742 for {
21743 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21744 if v_0.Op != ssaop.OpConst16 {
21745 continue
21746 }
21747 t := v_0.Type
21748 c := ssa.AuxIntToInt16(v_0.AuxInt)
21749 o := v_1
21750 if o.Op != ssaop.OpAdd16 {
21751 continue
21752 }
21753 _ = o.Args[1]
21754 o_0 := o.Args[0]
21755 o_1 := o.Args[1]
21756 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21757 if o_0.Op != ssaop.OpConst16 {
21758 continue
21759 }
21760 d := ssa.AuxIntToInt16(o_0.AuxInt)
21761 x := o_1
21762 if !(o.Uses == 1) {
21763 continue
21764 }
21765 v.Reset(ssaop.OpNeq16)
21766 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21767 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
21768 v.AddArg2(v0, x)
21769 return true
21770 }
21771 }
21772 break
21773 }
21774
21775
21776
21777 for {
21778 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21779 if v_0.Op != ssaop.OpConst16 {
21780 continue
21781 }
21782 t := v_0.Type
21783 c := ssa.AuxIntToInt16(v_0.AuxInt)
21784 o := v_1
21785 if o.Op != ssaop.OpSub16 {
21786 continue
21787 }
21788 _ = o.Args[1]
21789 x := o.Args[0]
21790 o_1 := o.Args[1]
21791 if o_1.Op != ssaop.OpConst16 {
21792 continue
21793 }
21794 d := ssa.AuxIntToInt16(o_1.AuxInt)
21795 if !(o.Uses == 1) {
21796 continue
21797 }
21798 v.Reset(ssaop.OpNeq16)
21799 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21800 v0.AuxInt = ssa.Int16ToAuxInt(c + d)
21801 v.AddArg2(v0, x)
21802 return true
21803 }
21804 break
21805 }
21806
21807
21808
21809 for {
21810 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21811 if v_0.Op != ssaop.OpConst16 {
21812 continue
21813 }
21814 t := v_0.Type
21815 c := ssa.AuxIntToInt16(v_0.AuxInt)
21816 o := v_1
21817 if o.Op != ssaop.OpSub16 {
21818 continue
21819 }
21820 x := o.Args[1]
21821 o_0 := o.Args[0]
21822 if o_0.Op != ssaop.OpConst16 {
21823 continue
21824 }
21825 d := ssa.AuxIntToInt16(o_0.AuxInt)
21826 if !(o.Uses == 1) {
21827 continue
21828 }
21829 v.Reset(ssaop.OpNeq16)
21830 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21831 v0.AuxInt = ssa.Int16ToAuxInt(d - c)
21832 v.AddArg2(v0, x)
21833 return true
21834 }
21835 break
21836 }
21837
21838
21839
21840 for {
21841 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21842 if v_0.Op != ssaop.OpConst16 {
21843 continue
21844 }
21845 t := v_0.Type
21846 c := ssa.AuxIntToInt16(v_0.AuxInt)
21847 o := v_1
21848 if o.Op != ssaop.OpXor16 {
21849 continue
21850 }
21851 _ = o.Args[1]
21852 o_0 := o.Args[0]
21853 o_1 := o.Args[1]
21854 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21855 if o_0.Op != ssaop.OpConst16 {
21856 continue
21857 }
21858 d := ssa.AuxIntToInt16(o_0.AuxInt)
21859 x := o_1
21860 if !(o.Uses == 1) {
21861 continue
21862 }
21863 v.Reset(ssaop.OpNeq16)
21864 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21865 v0.AuxInt = ssa.Int16ToAuxInt(d ^ c)
21866 v.AddArg2(v0, x)
21867 return true
21868 }
21869 }
21870 break
21871 }
21872
21873
21874
21875 for {
21876 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21877 if v_0.Op != ssaop.OpConst16 {
21878 continue
21879 }
21880 t := v_0.Type
21881 c := ssa.AuxIntToInt16(v_0.AuxInt)
21882 o := v_1
21883 if o.Op != ssaop.OpCom16 {
21884 continue
21885 }
21886 x := o.Args[0]
21887 if !(o.Uses == 1) {
21888 continue
21889 }
21890 v.Reset(ssaop.OpNeq16)
21891 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21892 v0.AuxInt = ssa.Int16ToAuxInt(^c)
21893 v.AddArg2(v0, x)
21894 return true
21895 }
21896 break
21897 }
21898
21899
21900
21901 for {
21902 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21903 if v_0.Op != ssaop.OpConst16 {
21904 continue
21905 }
21906 t := v_0.Type
21907 c := ssa.AuxIntToInt16(v_0.AuxInt)
21908 o := v_1
21909 if o.Op != ssaop.OpNeg16 {
21910 continue
21911 }
21912 x := o.Args[0]
21913 if !(o.Uses == 1) {
21914 continue
21915 }
21916 v.Reset(ssaop.OpNeq16)
21917 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21918 v0.AuxInt = ssa.Int16ToAuxInt(-c)
21919 v.AddArg2(v0, x)
21920 return true
21921 }
21922 break
21923 }
21924
21925
21926
21927 for {
21928 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21929 if v_0.Op != ssaop.OpConst16 {
21930 continue
21931 }
21932 t := v_0.Type
21933 c := ssa.AuxIntToInt16(v_0.AuxInt)
21934 o := v_1
21935 if o.Op != ssaop.OpMul16 {
21936 continue
21937 }
21938 _ = o.Args[1]
21939 o_0 := o.Args[0]
21940 o_1 := o.Args[1]
21941 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21942 if o_0.Op != ssaop.OpConst16 {
21943 continue
21944 }
21945 d := ssa.AuxIntToInt16(o_0.AuxInt)
21946 x := o_1
21947 if !(uint16(d)%2 == 1 && o.Uses == 1) {
21948 continue
21949 }
21950 v.Reset(ssaop.OpNeq16)
21951 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21952 v0.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) * uint16(modularMultiplicativeInverse(uint64(d)))))
21953 v.AddArg2(v0, x)
21954 return true
21955 }
21956 }
21957 break
21958 }
21959
21960
21961 for {
21962 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21963 if v_0.Op != ssaop.OpConst16 {
21964 continue
21965 }
21966 c := ssa.AuxIntToInt16(v_0.AuxInt)
21967 if v_1.Op != ssaop.OpConst16 {
21968 continue
21969 }
21970 d := ssa.AuxIntToInt16(v_1.AuxInt)
21971 v.Reset(ssaop.OpConstBool)
21972 v.AuxInt = ssa.BoolToAuxInt(c != d)
21973 return true
21974 }
21975 break
21976 }
21977
21978
21979
21980 for {
21981 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21982 s := v_0
21983 if s.Op != ssaop.OpSub16 {
21984 continue
21985 }
21986 y := s.Args[1]
21987 x := s.Args[0]
21988 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(s.Uses == 1) {
21989 continue
21990 }
21991 v.Reset(ssaop.OpNeq16)
21992 v.AddArg2(x, y)
21993 return true
21994 }
21995 break
21996 }
21997
21998
21999
22000 for {
22001 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22002 if v_0.Op != ssaop.OpAnd16 {
22003 continue
22004 }
22005 t := v_0.Type
22006 _ = v_0.Args[1]
22007 v_0_0 := v_0.Args[0]
22008 v_0_1 := v_0.Args[1]
22009 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
22010 x := v_0_0
22011 if v_0_1.Op != ssaop.OpConst16 || v_0_1.Type != t {
22012 continue
22013 }
22014 y := ssa.AuxIntToInt16(v_0_1.AuxInt)
22015 if v_1.Op != ssaop.OpConst16 || v_1.Type != t || ssa.AuxIntToInt16(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
22016 continue
22017 }
22018 v.Reset(ssaop.OpEq16)
22019 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
22020 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
22021 v1.AuxInt = ssa.Int16ToAuxInt(y)
22022 v0.AddArg2(x, v1)
22023 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
22024 v2.AuxInt = ssa.Int16ToAuxInt(0)
22025 v.AddArg2(v0, v2)
22026 return true
22027 }
22028 }
22029 break
22030 }
22031
22032
22033 for {
22034 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22035 if v_0.Op != ssaop.OpZeroExt8to16 {
22036 continue
22037 }
22038 v_0_0 := v_0.Args[0]
22039 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22040 continue
22041 }
22042 x := v_0_0.Args[0]
22043 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 {
22044 continue
22045 }
22046 v.CopyOf(x)
22047 return true
22048 }
22049 break
22050 }
22051
22052
22053 for {
22054 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22055 if v_0.Op != ssaop.OpZeroExt8to16 {
22056 continue
22057 }
22058 v_0_0 := v_0.Args[0]
22059 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22060 continue
22061 }
22062 x := v_0_0.Args[0]
22063 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
22064 continue
22065 }
22066 v.Reset(ssaop.OpNot)
22067 v.AddArg(x)
22068 return true
22069 }
22070 break
22071 }
22072 return false
22073 }
22074 func rewriteValue_OpNeq32(v *ssa.Value) bool {
22075 v_1 := v.Args[1]
22076 v_0 := v.Args[0]
22077 b := v.Block
22078
22079
22080 for {
22081 x := v_0
22082 if x != v_1 {
22083 break
22084 }
22085 v.Reset(ssaop.OpConstBool)
22086 v.AuxInt = ssa.BoolToAuxInt(false)
22087 return true
22088 }
22089
22090
22091
22092 for {
22093 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22094 if v_0.Op != ssaop.OpConst32 {
22095 continue
22096 }
22097 t := v_0.Type
22098 c := ssa.AuxIntToInt32(v_0.AuxInt)
22099 o := v_1
22100 if o.Op != ssaop.OpAdd32 {
22101 continue
22102 }
22103 _ = o.Args[1]
22104 o_0 := o.Args[0]
22105 o_1 := o.Args[1]
22106 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22107 if o_0.Op != ssaop.OpConst32 {
22108 continue
22109 }
22110 d := ssa.AuxIntToInt32(o_0.AuxInt)
22111 x := o_1
22112 if !(o.Uses == 1) {
22113 continue
22114 }
22115 v.Reset(ssaop.OpNeq32)
22116 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22117 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
22118 v.AddArg2(v0, x)
22119 return true
22120 }
22121 }
22122 break
22123 }
22124
22125
22126
22127 for {
22128 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22129 if v_0.Op != ssaop.OpConst32 {
22130 continue
22131 }
22132 t := v_0.Type
22133 c := ssa.AuxIntToInt32(v_0.AuxInt)
22134 o := v_1
22135 if o.Op != ssaop.OpSub32 {
22136 continue
22137 }
22138 _ = o.Args[1]
22139 x := o.Args[0]
22140 o_1 := o.Args[1]
22141 if o_1.Op != ssaop.OpConst32 {
22142 continue
22143 }
22144 d := ssa.AuxIntToInt32(o_1.AuxInt)
22145 if !(o.Uses == 1) {
22146 continue
22147 }
22148 v.Reset(ssaop.OpNeq32)
22149 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22150 v0.AuxInt = ssa.Int32ToAuxInt(c + d)
22151 v.AddArg2(v0, x)
22152 return true
22153 }
22154 break
22155 }
22156
22157
22158
22159 for {
22160 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22161 if v_0.Op != ssaop.OpConst32 {
22162 continue
22163 }
22164 t := v_0.Type
22165 c := ssa.AuxIntToInt32(v_0.AuxInt)
22166 o := v_1
22167 if o.Op != ssaop.OpSub32 {
22168 continue
22169 }
22170 x := o.Args[1]
22171 o_0 := o.Args[0]
22172 if o_0.Op != ssaop.OpConst32 {
22173 continue
22174 }
22175 d := ssa.AuxIntToInt32(o_0.AuxInt)
22176 if !(o.Uses == 1) {
22177 continue
22178 }
22179 v.Reset(ssaop.OpNeq32)
22180 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22181 v0.AuxInt = ssa.Int32ToAuxInt(d - c)
22182 v.AddArg2(v0, x)
22183 return true
22184 }
22185 break
22186 }
22187
22188
22189
22190 for {
22191 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22192 if v_0.Op != ssaop.OpConst32 {
22193 continue
22194 }
22195 t := v_0.Type
22196 c := ssa.AuxIntToInt32(v_0.AuxInt)
22197 o := v_1
22198 if o.Op != ssaop.OpXor32 {
22199 continue
22200 }
22201 _ = o.Args[1]
22202 o_0 := o.Args[0]
22203 o_1 := o.Args[1]
22204 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22205 if o_0.Op != ssaop.OpConst32 {
22206 continue
22207 }
22208 d := ssa.AuxIntToInt32(o_0.AuxInt)
22209 x := o_1
22210 if !(o.Uses == 1) {
22211 continue
22212 }
22213 v.Reset(ssaop.OpNeq32)
22214 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22215 v0.AuxInt = ssa.Int32ToAuxInt(d ^ c)
22216 v.AddArg2(v0, x)
22217 return true
22218 }
22219 }
22220 break
22221 }
22222
22223
22224
22225 for {
22226 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22227 if v_0.Op != ssaop.OpConst32 {
22228 continue
22229 }
22230 t := v_0.Type
22231 c := ssa.AuxIntToInt32(v_0.AuxInt)
22232 o := v_1
22233 if o.Op != ssaop.OpCom32 {
22234 continue
22235 }
22236 x := o.Args[0]
22237 if !(o.Uses == 1) {
22238 continue
22239 }
22240 v.Reset(ssaop.OpNeq32)
22241 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22242 v0.AuxInt = ssa.Int32ToAuxInt(^c)
22243 v.AddArg2(v0, x)
22244 return true
22245 }
22246 break
22247 }
22248
22249
22250
22251 for {
22252 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22253 if v_0.Op != ssaop.OpConst32 {
22254 continue
22255 }
22256 t := v_0.Type
22257 c := ssa.AuxIntToInt32(v_0.AuxInt)
22258 o := v_1
22259 if o.Op != ssaop.OpNeg32 {
22260 continue
22261 }
22262 x := o.Args[0]
22263 if !(o.Uses == 1) {
22264 continue
22265 }
22266 v.Reset(ssaop.OpNeq32)
22267 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22268 v0.AuxInt = ssa.Int32ToAuxInt(-c)
22269 v.AddArg2(v0, x)
22270 return true
22271 }
22272 break
22273 }
22274
22275
22276
22277 for {
22278 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22279 if v_0.Op != ssaop.OpConst32 {
22280 continue
22281 }
22282 t := v_0.Type
22283 c := ssa.AuxIntToInt32(v_0.AuxInt)
22284 o := v_1
22285 if o.Op != ssaop.OpMul32 {
22286 continue
22287 }
22288 _ = o.Args[1]
22289 o_0 := o.Args[0]
22290 o_1 := o.Args[1]
22291 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22292 if o_0.Op != ssaop.OpConst32 {
22293 continue
22294 }
22295 d := ssa.AuxIntToInt32(o_0.AuxInt)
22296 x := o_1
22297 if !(uint32(d)%2 == 1 && o.Uses == 1) {
22298 continue
22299 }
22300 v.Reset(ssaop.OpNeq32)
22301 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22302 v0.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) * uint32(modularMultiplicativeInverse(uint64(d)))))
22303 v.AddArg2(v0, x)
22304 return true
22305 }
22306 }
22307 break
22308 }
22309
22310
22311 for {
22312 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22313 if v_0.Op != ssaop.OpConst32 {
22314 continue
22315 }
22316 c := ssa.AuxIntToInt32(v_0.AuxInt)
22317 if v_1.Op != ssaop.OpConst32 {
22318 continue
22319 }
22320 d := ssa.AuxIntToInt32(v_1.AuxInt)
22321 v.Reset(ssaop.OpConstBool)
22322 v.AuxInt = ssa.BoolToAuxInt(c != d)
22323 return true
22324 }
22325 break
22326 }
22327
22328
22329
22330 for {
22331 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22332 s := v_0
22333 if s.Op != ssaop.OpSub32 {
22334 continue
22335 }
22336 y := s.Args[1]
22337 x := s.Args[0]
22338 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 || !(s.Uses == 1) {
22339 continue
22340 }
22341 v.Reset(ssaop.OpNeq32)
22342 v.AddArg2(x, y)
22343 return true
22344 }
22345 break
22346 }
22347
22348
22349
22350 for {
22351 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22352 if v_0.Op != ssaop.OpAnd32 {
22353 continue
22354 }
22355 t := v_0.Type
22356 _ = v_0.Args[1]
22357 v_0_0 := v_0.Args[0]
22358 v_0_1 := v_0.Args[1]
22359 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
22360 x := v_0_0
22361 if v_0_1.Op != ssaop.OpConst32 || v_0_1.Type != t {
22362 continue
22363 }
22364 y := ssa.AuxIntToInt32(v_0_1.AuxInt)
22365 if v_1.Op != ssaop.OpConst32 || v_1.Type != t || ssa.AuxIntToInt32(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
22366 continue
22367 }
22368 v.Reset(ssaop.OpEq32)
22369 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
22370 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22371 v1.AuxInt = ssa.Int32ToAuxInt(y)
22372 v0.AddArg2(x, v1)
22373 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22374 v2.AuxInt = ssa.Int32ToAuxInt(0)
22375 v.AddArg2(v0, v2)
22376 return true
22377 }
22378 }
22379 break
22380 }
22381
22382
22383 for {
22384 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22385 if v_0.Op != ssaop.OpZeroExt8to32 {
22386 continue
22387 }
22388 v_0_0 := v_0.Args[0]
22389 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22390 continue
22391 }
22392 x := v_0_0.Args[0]
22393 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
22394 continue
22395 }
22396 v.CopyOf(x)
22397 return true
22398 }
22399 break
22400 }
22401
22402
22403 for {
22404 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22405 if v_0.Op != ssaop.OpZeroExt8to32 {
22406 continue
22407 }
22408 v_0_0 := v_0.Args[0]
22409 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22410 continue
22411 }
22412 x := v_0_0.Args[0]
22413 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
22414 continue
22415 }
22416 v.Reset(ssaop.OpNot)
22417 v.AddArg(x)
22418 return true
22419 }
22420 break
22421 }
22422 return false
22423 }
22424 func rewriteValue_OpNeq32F(v *ssa.Value) bool {
22425 v_1 := v.Args[1]
22426 v_0 := v.Args[0]
22427
22428
22429 for {
22430 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22431 if v_0.Op != ssaop.OpConst32F {
22432 continue
22433 }
22434 c := ssa.AuxIntToFloat32(v_0.AuxInt)
22435 if v_1.Op != ssaop.OpConst32F {
22436 continue
22437 }
22438 d := ssa.AuxIntToFloat32(v_1.AuxInt)
22439 v.Reset(ssaop.OpConstBool)
22440 v.AuxInt = ssa.BoolToAuxInt(c != d)
22441 return true
22442 }
22443 break
22444 }
22445 return false
22446 }
22447 func rewriteValue_OpNeq64(v *ssa.Value) bool {
22448 v_1 := v.Args[1]
22449 v_0 := v.Args[0]
22450 b := v.Block
22451
22452
22453 for {
22454 x := v_0
22455 if x != v_1 {
22456 break
22457 }
22458 v.Reset(ssaop.OpConstBool)
22459 v.AuxInt = ssa.BoolToAuxInt(false)
22460 return true
22461 }
22462
22463
22464
22465 for {
22466 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22467 if v_0.Op != ssaop.OpConst64 {
22468 continue
22469 }
22470 t := v_0.Type
22471 c := ssa.AuxIntToInt64(v_0.AuxInt)
22472 o := v_1
22473 if o.Op != ssaop.OpAdd64 {
22474 continue
22475 }
22476 _ = o.Args[1]
22477 o_0 := o.Args[0]
22478 o_1 := o.Args[1]
22479 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22480 if o_0.Op != ssaop.OpConst64 {
22481 continue
22482 }
22483 d := ssa.AuxIntToInt64(o_0.AuxInt)
22484 x := o_1
22485 if !(o.Uses == 1) {
22486 continue
22487 }
22488 v.Reset(ssaop.OpNeq64)
22489 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22490 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
22491 v.AddArg2(v0, x)
22492 return true
22493 }
22494 }
22495 break
22496 }
22497
22498
22499
22500 for {
22501 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22502 if v_0.Op != ssaop.OpConst64 {
22503 continue
22504 }
22505 t := v_0.Type
22506 c := ssa.AuxIntToInt64(v_0.AuxInt)
22507 o := v_1
22508 if o.Op != ssaop.OpSub64 {
22509 continue
22510 }
22511 _ = o.Args[1]
22512 x := o.Args[0]
22513 o_1 := o.Args[1]
22514 if o_1.Op != ssaop.OpConst64 {
22515 continue
22516 }
22517 d := ssa.AuxIntToInt64(o_1.AuxInt)
22518 if !(o.Uses == 1) {
22519 continue
22520 }
22521 v.Reset(ssaop.OpNeq64)
22522 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22523 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
22524 v.AddArg2(v0, x)
22525 return true
22526 }
22527 break
22528 }
22529
22530
22531
22532 for {
22533 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22534 if v_0.Op != ssaop.OpConst64 {
22535 continue
22536 }
22537 t := v_0.Type
22538 c := ssa.AuxIntToInt64(v_0.AuxInt)
22539 o := v_1
22540 if o.Op != ssaop.OpSub64 {
22541 continue
22542 }
22543 x := o.Args[1]
22544 o_0 := o.Args[0]
22545 if o_0.Op != ssaop.OpConst64 {
22546 continue
22547 }
22548 d := ssa.AuxIntToInt64(o_0.AuxInt)
22549 if !(o.Uses == 1) {
22550 continue
22551 }
22552 v.Reset(ssaop.OpNeq64)
22553 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22554 v0.AuxInt = ssa.Int64ToAuxInt(d - c)
22555 v.AddArg2(v0, x)
22556 return true
22557 }
22558 break
22559 }
22560
22561
22562
22563 for {
22564 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22565 if v_0.Op != ssaop.OpConst64 {
22566 continue
22567 }
22568 t := v_0.Type
22569 c := ssa.AuxIntToInt64(v_0.AuxInt)
22570 o := v_1
22571 if o.Op != ssaop.OpXor64 {
22572 continue
22573 }
22574 _ = o.Args[1]
22575 o_0 := o.Args[0]
22576 o_1 := o.Args[1]
22577 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22578 if o_0.Op != ssaop.OpConst64 {
22579 continue
22580 }
22581 d := ssa.AuxIntToInt64(o_0.AuxInt)
22582 x := o_1
22583 if !(o.Uses == 1) {
22584 continue
22585 }
22586 v.Reset(ssaop.OpNeq64)
22587 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22588 v0.AuxInt = ssa.Int64ToAuxInt(d ^ c)
22589 v.AddArg2(v0, x)
22590 return true
22591 }
22592 }
22593 break
22594 }
22595
22596
22597
22598 for {
22599 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22600 if v_0.Op != ssaop.OpConst64 {
22601 continue
22602 }
22603 t := v_0.Type
22604 c := ssa.AuxIntToInt64(v_0.AuxInt)
22605 o := v_1
22606 if o.Op != ssaop.OpCom64 {
22607 continue
22608 }
22609 x := o.Args[0]
22610 if !(o.Uses == 1) {
22611 continue
22612 }
22613 v.Reset(ssaop.OpNeq64)
22614 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22615 v0.AuxInt = ssa.Int64ToAuxInt(^c)
22616 v.AddArg2(v0, x)
22617 return true
22618 }
22619 break
22620 }
22621
22622
22623
22624 for {
22625 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22626 if v_0.Op != ssaop.OpConst64 {
22627 continue
22628 }
22629 t := v_0.Type
22630 c := ssa.AuxIntToInt64(v_0.AuxInt)
22631 o := v_1
22632 if o.Op != ssaop.OpNeg64 {
22633 continue
22634 }
22635 x := o.Args[0]
22636 if !(o.Uses == 1) {
22637 continue
22638 }
22639 v.Reset(ssaop.OpNeq64)
22640 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22641 v0.AuxInt = ssa.Int64ToAuxInt(-c)
22642 v.AddArg2(v0, x)
22643 return true
22644 }
22645 break
22646 }
22647
22648
22649
22650 for {
22651 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22652 if v_0.Op != ssaop.OpConst64 {
22653 continue
22654 }
22655 t := v_0.Type
22656 c := ssa.AuxIntToInt64(v_0.AuxInt)
22657 o := v_1
22658 if o.Op != ssaop.OpMul64 {
22659 continue
22660 }
22661 _ = o.Args[1]
22662 o_0 := o.Args[0]
22663 o_1 := o.Args[1]
22664 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22665 if o_0.Op != ssaop.OpConst64 {
22666 continue
22667 }
22668 d := ssa.AuxIntToInt64(o_0.AuxInt)
22669 x := o_1
22670 if !(uint64(d)%2 == 1 && o.Uses == 1) {
22671 continue
22672 }
22673 v.Reset(ssaop.OpNeq64)
22674 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22675 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) * modularMultiplicativeInverse(uint64(d))))
22676 v.AddArg2(v0, x)
22677 return true
22678 }
22679 }
22680 break
22681 }
22682
22683
22684 for {
22685 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22686 if v_0.Op != ssaop.OpConst64 {
22687 continue
22688 }
22689 c := ssa.AuxIntToInt64(v_0.AuxInt)
22690 if v_1.Op != ssaop.OpConst64 {
22691 continue
22692 }
22693 d := ssa.AuxIntToInt64(v_1.AuxInt)
22694 v.Reset(ssaop.OpConstBool)
22695 v.AuxInt = ssa.BoolToAuxInt(c != d)
22696 return true
22697 }
22698 break
22699 }
22700
22701
22702
22703 for {
22704 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22705 s := v_0
22706 if s.Op != ssaop.OpSub64 {
22707 continue
22708 }
22709 y := s.Args[1]
22710 x := s.Args[0]
22711 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 || !(s.Uses == 1) {
22712 continue
22713 }
22714 v.Reset(ssaop.OpNeq64)
22715 v.AddArg2(x, y)
22716 return true
22717 }
22718 break
22719 }
22720
22721
22722
22723 for {
22724 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22725 if v_0.Op != ssaop.OpAnd64 {
22726 continue
22727 }
22728 t := v_0.Type
22729 _ = v_0.Args[1]
22730 v_0_0 := v_0.Args[0]
22731 v_0_1 := v_0.Args[1]
22732 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
22733 x := v_0_0
22734 if v_0_1.Op != ssaop.OpConst64 || v_0_1.Type != t {
22735 continue
22736 }
22737 y := ssa.AuxIntToInt64(v_0_1.AuxInt)
22738 if v_1.Op != ssaop.OpConst64 || v_1.Type != t || ssa.AuxIntToInt64(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
22739 continue
22740 }
22741 v.Reset(ssaop.OpEq64)
22742 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
22743 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22744 v1.AuxInt = ssa.Int64ToAuxInt(y)
22745 v0.AddArg2(x, v1)
22746 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22747 v2.AuxInt = ssa.Int64ToAuxInt(0)
22748 v.AddArg2(v0, v2)
22749 return true
22750 }
22751 }
22752 break
22753 }
22754
22755
22756 for {
22757 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22758 if v_0.Op != ssaop.OpZeroExt8to64 {
22759 continue
22760 }
22761 v_0_0 := v_0.Args[0]
22762 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22763 continue
22764 }
22765 x := v_0_0.Args[0]
22766 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
22767 continue
22768 }
22769 v.CopyOf(x)
22770 return true
22771 }
22772 break
22773 }
22774
22775
22776 for {
22777 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22778 if v_0.Op != ssaop.OpZeroExt8to64 {
22779 continue
22780 }
22781 v_0_0 := v_0.Args[0]
22782 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22783 continue
22784 }
22785 x := v_0_0.Args[0]
22786 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
22787 continue
22788 }
22789 v.Reset(ssaop.OpNot)
22790 v.AddArg(x)
22791 return true
22792 }
22793 break
22794 }
22795 return false
22796 }
22797 func rewriteValue_OpNeq64F(v *ssa.Value) bool {
22798 v_1 := v.Args[1]
22799 v_0 := v.Args[0]
22800
22801
22802 for {
22803 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22804 if v_0.Op != ssaop.OpConst64F {
22805 continue
22806 }
22807 c := ssa.AuxIntToFloat64(v_0.AuxInt)
22808 if v_1.Op != ssaop.OpConst64F {
22809 continue
22810 }
22811 d := ssa.AuxIntToFloat64(v_1.AuxInt)
22812 v.Reset(ssaop.OpConstBool)
22813 v.AuxInt = ssa.BoolToAuxInt(c != d)
22814 return true
22815 }
22816 break
22817 }
22818 return false
22819 }
22820 func rewriteValue_OpNeq8(v *ssa.Value) bool {
22821 v_1 := v.Args[1]
22822 v_0 := v.Args[0]
22823 b := v.Block
22824
22825
22826 for {
22827 x := v_0
22828 if x != v_1 {
22829 break
22830 }
22831 v.Reset(ssaop.OpConstBool)
22832 v.AuxInt = ssa.BoolToAuxInt(false)
22833 return true
22834 }
22835
22836
22837
22838 for {
22839 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22840 if v_0.Op != ssaop.OpConst8 {
22841 continue
22842 }
22843 t := v_0.Type
22844 c := ssa.AuxIntToInt8(v_0.AuxInt)
22845 o := v_1
22846 if o.Op != ssaop.OpAdd8 {
22847 continue
22848 }
22849 _ = o.Args[1]
22850 o_0 := o.Args[0]
22851 o_1 := o.Args[1]
22852 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22853 if o_0.Op != ssaop.OpConst8 {
22854 continue
22855 }
22856 d := ssa.AuxIntToInt8(o_0.AuxInt)
22857 x := o_1
22858 if !(o.Uses == 1) {
22859 continue
22860 }
22861 v.Reset(ssaop.OpNeq8)
22862 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22863 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
22864 v.AddArg2(v0, x)
22865 return true
22866 }
22867 }
22868 break
22869 }
22870
22871
22872
22873 for {
22874 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22875 if v_0.Op != ssaop.OpConst8 {
22876 continue
22877 }
22878 t := v_0.Type
22879 c := ssa.AuxIntToInt8(v_0.AuxInt)
22880 o := v_1
22881 if o.Op != ssaop.OpSub8 {
22882 continue
22883 }
22884 _ = o.Args[1]
22885 x := o.Args[0]
22886 o_1 := o.Args[1]
22887 if o_1.Op != ssaop.OpConst8 {
22888 continue
22889 }
22890 d := ssa.AuxIntToInt8(o_1.AuxInt)
22891 if !(o.Uses == 1) {
22892 continue
22893 }
22894 v.Reset(ssaop.OpNeq8)
22895 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22896 v0.AuxInt = ssa.Int8ToAuxInt(c + d)
22897 v.AddArg2(v0, x)
22898 return true
22899 }
22900 break
22901 }
22902
22903
22904
22905 for {
22906 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22907 if v_0.Op != ssaop.OpConst8 {
22908 continue
22909 }
22910 t := v_0.Type
22911 c := ssa.AuxIntToInt8(v_0.AuxInt)
22912 o := v_1
22913 if o.Op != ssaop.OpSub8 {
22914 continue
22915 }
22916 x := o.Args[1]
22917 o_0 := o.Args[0]
22918 if o_0.Op != ssaop.OpConst8 {
22919 continue
22920 }
22921 d := ssa.AuxIntToInt8(o_0.AuxInt)
22922 if !(o.Uses == 1) {
22923 continue
22924 }
22925 v.Reset(ssaop.OpNeq8)
22926 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22927 v0.AuxInt = ssa.Int8ToAuxInt(d - c)
22928 v.AddArg2(v0, x)
22929 return true
22930 }
22931 break
22932 }
22933
22934
22935
22936 for {
22937 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22938 if v_0.Op != ssaop.OpConst8 {
22939 continue
22940 }
22941 t := v_0.Type
22942 c := ssa.AuxIntToInt8(v_0.AuxInt)
22943 o := v_1
22944 if o.Op != ssaop.OpXor8 {
22945 continue
22946 }
22947 _ = o.Args[1]
22948 o_0 := o.Args[0]
22949 o_1 := o.Args[1]
22950 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22951 if o_0.Op != ssaop.OpConst8 {
22952 continue
22953 }
22954 d := ssa.AuxIntToInt8(o_0.AuxInt)
22955 x := o_1
22956 if !(o.Uses == 1) {
22957 continue
22958 }
22959 v.Reset(ssaop.OpNeq8)
22960 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22961 v0.AuxInt = ssa.Int8ToAuxInt(d ^ c)
22962 v.AddArg2(v0, x)
22963 return true
22964 }
22965 }
22966 break
22967 }
22968
22969
22970
22971 for {
22972 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22973 if v_0.Op != ssaop.OpConst8 {
22974 continue
22975 }
22976 t := v_0.Type
22977 c := ssa.AuxIntToInt8(v_0.AuxInt)
22978 o := v_1
22979 if o.Op != ssaop.OpCom8 {
22980 continue
22981 }
22982 x := o.Args[0]
22983 if !(o.Uses == 1) {
22984 continue
22985 }
22986 v.Reset(ssaop.OpNeq8)
22987 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22988 v0.AuxInt = ssa.Int8ToAuxInt(^c)
22989 v.AddArg2(v0, x)
22990 return true
22991 }
22992 break
22993 }
22994
22995
22996
22997 for {
22998 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22999 if v_0.Op != ssaop.OpConst8 {
23000 continue
23001 }
23002 t := v_0.Type
23003 c := ssa.AuxIntToInt8(v_0.AuxInt)
23004 o := v_1
23005 if o.Op != ssaop.OpNeg8 {
23006 continue
23007 }
23008 x := o.Args[0]
23009 if !(o.Uses == 1) {
23010 continue
23011 }
23012 v.Reset(ssaop.OpNeq8)
23013 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23014 v0.AuxInt = ssa.Int8ToAuxInt(-c)
23015 v.AddArg2(v0, x)
23016 return true
23017 }
23018 break
23019 }
23020
23021
23022
23023 for {
23024 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23025 if v_0.Op != ssaop.OpConst8 {
23026 continue
23027 }
23028 t := v_0.Type
23029 c := ssa.AuxIntToInt8(v_0.AuxInt)
23030 o := v_1
23031 if o.Op != ssaop.OpMul8 {
23032 continue
23033 }
23034 _ = o.Args[1]
23035 o_0 := o.Args[0]
23036 o_1 := o.Args[1]
23037 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
23038 if o_0.Op != ssaop.OpConst8 {
23039 continue
23040 }
23041 d := ssa.AuxIntToInt8(o_0.AuxInt)
23042 x := o_1
23043 if !(uint8(d)%2 == 1 && o.Uses == 1) {
23044 continue
23045 }
23046 v.Reset(ssaop.OpNeq8)
23047 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23048 v0.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) * uint8(modularMultiplicativeInverse(uint64(d)))))
23049 v.AddArg2(v0, x)
23050 return true
23051 }
23052 }
23053 break
23054 }
23055
23056
23057 for {
23058 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23059 if v_0.Op != ssaop.OpConst8 {
23060 continue
23061 }
23062 c := ssa.AuxIntToInt8(v_0.AuxInt)
23063 if v_1.Op != ssaop.OpConst8 {
23064 continue
23065 }
23066 d := ssa.AuxIntToInt8(v_1.AuxInt)
23067 v.Reset(ssaop.OpConstBool)
23068 v.AuxInt = ssa.BoolToAuxInt(c != d)
23069 return true
23070 }
23071 break
23072 }
23073
23074
23075
23076 for {
23077 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23078 s := v_0
23079 if s.Op != ssaop.OpSub8 {
23080 continue
23081 }
23082 y := s.Args[1]
23083 x := s.Args[0]
23084 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(s.Uses == 1) {
23085 continue
23086 }
23087 v.Reset(ssaop.OpNeq8)
23088 v.AddArg2(x, y)
23089 return true
23090 }
23091 break
23092 }
23093
23094
23095
23096 for {
23097 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23098 if v_0.Op != ssaop.OpAnd8 {
23099 continue
23100 }
23101 t := v_0.Type
23102 _ = v_0.Args[1]
23103 v_0_0 := v_0.Args[0]
23104 v_0_1 := v_0.Args[1]
23105 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
23106 x := v_0_0
23107 if v_0_1.Op != ssaop.OpConst8 || v_0_1.Type != t {
23108 continue
23109 }
23110 y := ssa.AuxIntToInt8(v_0_1.AuxInt)
23111 if v_1.Op != ssaop.OpConst8 || v_1.Type != t || ssa.AuxIntToInt8(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
23112 continue
23113 }
23114 v.Reset(ssaop.OpEq8)
23115 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
23116 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23117 v1.AuxInt = ssa.Int8ToAuxInt(y)
23118 v0.AddArg2(x, v1)
23119 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23120 v2.AuxInt = ssa.Int8ToAuxInt(0)
23121 v.AddArg2(v0, v2)
23122 return true
23123 }
23124 }
23125 break
23126 }
23127
23128
23129 for {
23130 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23131 if v_0.Op != ssaop.OpCvtBoolToUint8 {
23132 continue
23133 }
23134 x := v_0.Args[0]
23135 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 {
23136 continue
23137 }
23138 v.CopyOf(x)
23139 return true
23140 }
23141 break
23142 }
23143
23144
23145 for {
23146 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23147 if v_0.Op != ssaop.OpCvtBoolToUint8 {
23148 continue
23149 }
23150 x := v_0.Args[0]
23151 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
23152 continue
23153 }
23154 v.Reset(ssaop.OpNot)
23155 v.AddArg(x)
23156 return true
23157 }
23158 break
23159 }
23160 return false
23161 }
23162 func rewriteValue_OpNeqB(v *ssa.Value) bool {
23163 v_1 := v.Args[1]
23164 v_0 := v.Args[0]
23165
23166
23167 for {
23168 x := v_0
23169 if x != v_1 {
23170 break
23171 }
23172 v.Reset(ssaop.OpConstBool)
23173 v.AuxInt = ssa.BoolToAuxInt(false)
23174 return true
23175 }
23176
23177
23178 for {
23179 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23180 if v_0.Op != ssaop.OpConstBool {
23181 continue
23182 }
23183 c := ssa.AuxIntToBool(v_0.AuxInt)
23184 if v_1.Op != ssaop.OpConstBool {
23185 continue
23186 }
23187 d := ssa.AuxIntToBool(v_1.AuxInt)
23188 v.Reset(ssaop.OpConstBool)
23189 v.AuxInt = ssa.BoolToAuxInt(c != d)
23190 return true
23191 }
23192 break
23193 }
23194
23195
23196 for {
23197 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23198 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
23199 continue
23200 }
23201 x := v_1
23202 v.CopyOf(x)
23203 return true
23204 }
23205 break
23206 }
23207
23208
23209 for {
23210 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23211 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
23212 continue
23213 }
23214 x := v_1
23215 v.Reset(ssaop.OpNot)
23216 v.AddArg(x)
23217 return true
23218 }
23219 break
23220 }
23221
23222
23223 for {
23224 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23225 if v_0.Op != ssaop.OpNot {
23226 continue
23227 }
23228 x := v_0.Args[0]
23229 y := v_1
23230 v.Reset(ssaop.OpEqB)
23231 v.AddArg2(x, y)
23232 return true
23233 }
23234 break
23235 }
23236 return false
23237 }
23238 func rewriteValue_OpNeqInter(v *ssa.Value) bool {
23239 v_1 := v.Args[1]
23240 v_0 := v.Args[0]
23241 b := v.Block
23242 typ := &b.Func.Config.Types
23243
23244
23245 for {
23246 x := v_0
23247 y := v_1
23248 v.Reset(ssaop.OpNeqPtr)
23249 v0 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
23250 v0.AddArg(x)
23251 v1 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
23252 v1.AddArg(y)
23253 v.AddArg2(v0, v1)
23254 return true
23255 }
23256 }
23257 func rewriteValue_OpNeqPtr(v *ssa.Value) bool {
23258 v_1 := v.Args[1]
23259 v_0 := v.Args[0]
23260
23261
23262 for {
23263 x := v_0
23264 if x != v_1 {
23265 break
23266 }
23267 v.Reset(ssaop.OpConstBool)
23268 v.AuxInt = ssa.BoolToAuxInt(false)
23269 return true
23270 }
23271
23272
23273 for {
23274 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23275 if v_0.Op != ssaop.OpAddr {
23276 continue
23277 }
23278 x := ssa.AuxToSym(v_0.Aux)
23279 if v_1.Op != ssaop.OpAddr {
23280 continue
23281 }
23282 y := ssa.AuxToSym(v_1.Aux)
23283 v.Reset(ssaop.OpConstBool)
23284 v.AuxInt = ssa.BoolToAuxInt(x != y)
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.OpAddr {
23294 continue
23295 }
23296 x := ssa.AuxToSym(v_0.Aux)
23297 if v_1.Op != ssaop.OpOffPtr {
23298 continue
23299 }
23300 o := ssa.AuxIntToInt64(v_1.AuxInt)
23301 v_1_0 := v_1.Args[0]
23302 if v_1_0.Op != ssaop.OpAddr {
23303 continue
23304 }
23305 y := ssa.AuxToSym(v_1_0.Aux)
23306 v.Reset(ssaop.OpConstBool)
23307 v.AuxInt = ssa.BoolToAuxInt(x != y || o != 0)
23308 return true
23309 }
23310 break
23311 }
23312
23313
23314 for {
23315 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23316 if v_0.Op != ssaop.OpOffPtr {
23317 continue
23318 }
23319 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23320 v_0_0 := v_0.Args[0]
23321 if v_0_0.Op != ssaop.OpAddr {
23322 continue
23323 }
23324 x := ssa.AuxToSym(v_0_0.Aux)
23325 if v_1.Op != ssaop.OpOffPtr {
23326 continue
23327 }
23328 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23329 v_1_0 := v_1.Args[0]
23330 if v_1_0.Op != ssaop.OpAddr {
23331 continue
23332 }
23333 y := ssa.AuxToSym(v_1_0.Aux)
23334 v.Reset(ssaop.OpConstBool)
23335 v.AuxInt = ssa.BoolToAuxInt(x != y || o1 != o2)
23336 return true
23337 }
23338 break
23339 }
23340
23341
23342 for {
23343 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23344 if v_0.Op != ssaop.OpLocalAddr {
23345 continue
23346 }
23347 x := ssa.AuxToSym(v_0.Aux)
23348 if v_1.Op != ssaop.OpLocalAddr {
23349 continue
23350 }
23351 y := ssa.AuxToSym(v_1.Aux)
23352 v.Reset(ssaop.OpConstBool)
23353 v.AuxInt = ssa.BoolToAuxInt(x != y)
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.OpLocalAddr {
23363 continue
23364 }
23365 x := ssa.AuxToSym(v_0.Aux)
23366 if v_1.Op != ssaop.OpOffPtr {
23367 continue
23368 }
23369 o := ssa.AuxIntToInt64(v_1.AuxInt)
23370 v_1_0 := v_1.Args[0]
23371 if v_1_0.Op != ssaop.OpLocalAddr {
23372 continue
23373 }
23374 y := ssa.AuxToSym(v_1_0.Aux)
23375 v.Reset(ssaop.OpConstBool)
23376 v.AuxInt = ssa.BoolToAuxInt(x != y || o != 0)
23377 return true
23378 }
23379 break
23380 }
23381
23382
23383 for {
23384 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23385 if v_0.Op != ssaop.OpOffPtr {
23386 continue
23387 }
23388 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23389 v_0_0 := v_0.Args[0]
23390 if v_0_0.Op != ssaop.OpLocalAddr {
23391 continue
23392 }
23393 x := ssa.AuxToSym(v_0_0.Aux)
23394 if v_1.Op != ssaop.OpOffPtr {
23395 continue
23396 }
23397 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23398 v_1_0 := v_1.Args[0]
23399 if v_1_0.Op != ssaop.OpLocalAddr {
23400 continue
23401 }
23402 y := ssa.AuxToSym(v_1_0.Aux)
23403 v.Reset(ssaop.OpConstBool)
23404 v.AuxInt = ssa.BoolToAuxInt(x != y || o1 != o2)
23405 return true
23406 }
23407 break
23408 }
23409
23410
23411
23412 for {
23413 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23414 if v_0.Op != ssaop.OpOffPtr {
23415 continue
23416 }
23417 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23418 p1 := v_0.Args[0]
23419 p2 := v_1
23420 if !(ssa.IsSamePtr(p1, p2)) {
23421 continue
23422 }
23423 v.Reset(ssaop.OpConstBool)
23424 v.AuxInt = ssa.BoolToAuxInt(o1 != 0)
23425 return true
23426 }
23427 break
23428 }
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.OpOffPtr {
23435 continue
23436 }
23437 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23438 p1 := v_0.Args[0]
23439 if v_1.Op != ssaop.OpOffPtr {
23440 continue
23441 }
23442 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23443 p2 := v_1.Args[0]
23444 if !(ssa.IsSamePtr(p1, p2)) {
23445 continue
23446 }
23447 v.Reset(ssaop.OpConstBool)
23448 v.AuxInt = ssa.BoolToAuxInt(o1 != o2)
23449 return true
23450 }
23451 break
23452 }
23453
23454
23455 for {
23456 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23457 if v_0.Op != ssaop.OpConst32 {
23458 continue
23459 }
23460 c := ssa.AuxIntToInt32(v_0.AuxInt)
23461 if v_1.Op != ssaop.OpConst32 {
23462 continue
23463 }
23464 d := ssa.AuxIntToInt32(v_1.AuxInt)
23465 v.Reset(ssaop.OpConstBool)
23466 v.AuxInt = ssa.BoolToAuxInt(c != d)
23467 return true
23468 }
23469 break
23470 }
23471
23472
23473 for {
23474 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23475 if v_0.Op != ssaop.OpConst64 {
23476 continue
23477 }
23478 c := ssa.AuxIntToInt64(v_0.AuxInt)
23479 if v_1.Op != ssaop.OpConst64 {
23480 continue
23481 }
23482 d := ssa.AuxIntToInt64(v_1.AuxInt)
23483 v.Reset(ssaop.OpConstBool)
23484 v.AuxInt = ssa.BoolToAuxInt(c != d)
23485 return true
23486 }
23487 break
23488 }
23489
23490
23491 for {
23492 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23493 if v_0.Op != ssaop.OpConvert {
23494 continue
23495 }
23496 v_0_0 := v_0.Args[0]
23497 if v_0_0.Op != ssaop.OpAddr {
23498 continue
23499 }
23500 x := ssa.AuxToSym(v_0_0.Aux)
23501 if v_1.Op != ssaop.OpAddr {
23502 continue
23503 }
23504 y := ssa.AuxToSym(v_1.Aux)
23505 v.Reset(ssaop.OpConstBool)
23506 v.AuxInt = ssa.BoolToAuxInt(x != y)
23507 return true
23508 }
23509 break
23510 }
23511
23512
23513 for {
23514 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23515 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
23516 continue
23517 }
23518 v.Reset(ssaop.OpConstBool)
23519 v.AuxInt = ssa.BoolToAuxInt(true)
23520 return true
23521 }
23522 break
23523 }
23524
23525
23526 for {
23527 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23528 if v_0.Op != ssaop.OpOffPtr {
23529 continue
23530 }
23531 v_0_0 := v_0.Args[0]
23532 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
23533 continue
23534 }
23535 v.Reset(ssaop.OpConstBool)
23536 v.AuxInt = ssa.BoolToAuxInt(true)
23537 return true
23538 }
23539 break
23540 }
23541
23542
23543 for {
23544 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23545 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
23546 continue
23547 }
23548 v_1_0 := v_1.Args[0]
23549 if v_1_0.Op != ssaop.OpAddr {
23550 continue
23551 }
23552 v.Reset(ssaop.OpConstBool)
23553 v.AuxInt = ssa.BoolToAuxInt(true)
23554 return true
23555 }
23556 break
23557 }
23558
23559
23560 for {
23561 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23562 if v_0.Op != ssaop.OpOffPtr {
23563 continue
23564 }
23565 v_0_0 := v_0.Args[0]
23566 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
23567 continue
23568 }
23569 v_1_0 := v_1.Args[0]
23570 if v_1_0.Op != ssaop.OpAddr {
23571 continue
23572 }
23573 v.Reset(ssaop.OpConstBool)
23574 v.AuxInt = ssa.BoolToAuxInt(true)
23575 return true
23576 }
23577 break
23578 }
23579
23580
23581
23582 for {
23583 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23584 if v_0.Op != ssaop.OpAddPtr {
23585 continue
23586 }
23587 o1 := v_0.Args[1]
23588 p1 := v_0.Args[0]
23589 p2 := v_1
23590 if !(ssa.IsSamePtr(p1, p2)) {
23591 continue
23592 }
23593 v.Reset(ssaop.OpIsNonNil)
23594 v.AddArg(o1)
23595 return true
23596 }
23597 break
23598 }
23599
23600
23601 for {
23602 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23603 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
23604 continue
23605 }
23606 p := v_1
23607 v.Reset(ssaop.OpIsNonNil)
23608 v.AddArg(p)
23609 return true
23610 }
23611 break
23612 }
23613
23614
23615 for {
23616 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23617 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
23618 continue
23619 }
23620 p := v_1
23621 v.Reset(ssaop.OpIsNonNil)
23622 v.AddArg(p)
23623 return true
23624 }
23625 break
23626 }
23627
23628
23629 for {
23630 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23631 if v_0.Op != ssaop.OpConstNil {
23632 continue
23633 }
23634 p := v_1
23635 v.Reset(ssaop.OpIsNonNil)
23636 v.AddArg(p)
23637 return true
23638 }
23639 break
23640 }
23641 return false
23642 }
23643 func rewriteValue_OpNeqSlice(v *ssa.Value) bool {
23644 v_1 := v.Args[1]
23645 v_0 := v.Args[0]
23646 b := v.Block
23647 typ := &b.Func.Config.Types
23648
23649
23650 for {
23651 x := v_0
23652 y := v_1
23653 v.Reset(ssaop.OpNeqPtr)
23654 v0 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
23655 v0.AddArg(x)
23656 v1 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
23657 v1.AddArg(y)
23658 v.AddArg2(v0, v1)
23659 return true
23660 }
23661 }
23662 func rewriteValue_OpNilCheck(v *ssa.Value) bool {
23663 v_1 := v.Args[1]
23664 v_0 := v.Args[0]
23665 b := v.Block
23666 fe := b.Func.Fe
23667
23668
23669 for {
23670 ptr := v_0
23671 if ptr.Op != ssaop.OpGetG {
23672 break
23673 }
23674 mem := ptr.Args[0]
23675 if mem != v_1 {
23676 break
23677 }
23678 v.CopyOf(ptr)
23679 return true
23680 }
23681
23682
23683
23684 for {
23685 ptr := v_0
23686 if ptr.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(ptr.AuxInt) != 0 {
23687 break
23688 }
23689 call := ptr.Args[0]
23690 if call.Op != ssaop.OpStaticLECall {
23691 break
23692 }
23693 if !(isMalloc(call.Aux) && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23694 break
23695 }
23696 v.CopyOf(ptr)
23697 return true
23698 }
23699
23700
23701
23702 for {
23703 ptr := v_0
23704 if ptr.Op != ssaop.OpOffPtr {
23705 break
23706 }
23707 ptr_0 := ptr.Args[0]
23708 if ptr_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(ptr_0.AuxInt) != 0 {
23709 break
23710 }
23711 call := ptr_0.Args[0]
23712 if call.Op != ssaop.OpStaticLECall {
23713 break
23714 }
23715 if !(isMalloc(call.Aux) && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23716 break
23717 }
23718 v.CopyOf(ptr)
23719 return true
23720 }
23721
23722
23723 for {
23724 ptr := v_0
23725 if ptr.Op != ssaop.OpAddr {
23726 break
23727 }
23728 ptr_0 := ptr.Args[0]
23729 if ptr_0.Op != ssaop.OpSB {
23730 break
23731 }
23732 v.CopyOf(ptr)
23733 return true
23734 }
23735
23736
23737 for {
23738 ptr := v_0
23739 if ptr.Op != ssaop.OpConvert {
23740 break
23741 }
23742 ptr_0 := ptr.Args[0]
23743 if ptr_0.Op != ssaop.OpAddr {
23744 break
23745 }
23746 ptr_0_0 := ptr_0.Args[0]
23747 if ptr_0_0.Op != ssaop.OpSB {
23748 break
23749 }
23750 v.CopyOf(ptr)
23751 return true
23752 }
23753
23754
23755
23756 for {
23757 ptr := v_0
23758 if ptr.Op != ssaop.OpLocalAddr || !(warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23759 break
23760 }
23761 v.CopyOf(ptr)
23762 return true
23763 }
23764
23765
23766
23767 for {
23768 ptr := v_0
23769 if ptr.Op != ssaop.OpArg {
23770 break
23771 }
23772 sym := ssa.AuxToSym(ptr.Aux)
23773 if !(isDictArgSym(sym)) {
23774 break
23775 }
23776 v.CopyOf(ptr)
23777 return true
23778 }
23779
23780
23781 for {
23782 ptr := v_0
23783 if ptr.Op != ssaop.OpNilCheck {
23784 break
23785 }
23786 v.CopyOf(ptr)
23787 return true
23788 }
23789 return false
23790 }
23791 func rewriteValue_OpNot(v *ssa.Value) bool {
23792 v_0 := v.Args[0]
23793
23794
23795 for {
23796 if v_0.Op != ssaop.OpConstBool {
23797 break
23798 }
23799 c := ssa.AuxIntToBool(v_0.AuxInt)
23800 v.Reset(ssaop.OpConstBool)
23801 v.AuxInt = ssa.BoolToAuxInt(!c)
23802 return true
23803 }
23804
23805
23806 for {
23807 if v_0.Op != ssaop.OpEq64 {
23808 break
23809 }
23810 y := v_0.Args[1]
23811 x := v_0.Args[0]
23812 v.Reset(ssaop.OpNeq64)
23813 v.AddArg2(x, y)
23814 return true
23815 }
23816
23817
23818 for {
23819 if v_0.Op != ssaop.OpEq32 {
23820 break
23821 }
23822 y := v_0.Args[1]
23823 x := v_0.Args[0]
23824 v.Reset(ssaop.OpNeq32)
23825 v.AddArg2(x, y)
23826 return true
23827 }
23828
23829
23830 for {
23831 if v_0.Op != ssaop.OpEq16 {
23832 break
23833 }
23834 y := v_0.Args[1]
23835 x := v_0.Args[0]
23836 v.Reset(ssaop.OpNeq16)
23837 v.AddArg2(x, y)
23838 return true
23839 }
23840
23841
23842 for {
23843 if v_0.Op != ssaop.OpEq8 {
23844 break
23845 }
23846 y := v_0.Args[1]
23847 x := v_0.Args[0]
23848 v.Reset(ssaop.OpNeq8)
23849 v.AddArg2(x, y)
23850 return true
23851 }
23852
23853
23854 for {
23855 if v_0.Op != ssaop.OpEqB {
23856 break
23857 }
23858 y := v_0.Args[1]
23859 x := v_0.Args[0]
23860 v.Reset(ssaop.OpNeqB)
23861 v.AddArg2(x, y)
23862 return true
23863 }
23864
23865
23866 for {
23867 if v_0.Op != ssaop.OpEqPtr {
23868 break
23869 }
23870 y := v_0.Args[1]
23871 x := v_0.Args[0]
23872 v.Reset(ssaop.OpNeqPtr)
23873 v.AddArg2(x, y)
23874 return true
23875 }
23876
23877
23878 for {
23879 if v_0.Op != ssaop.OpEq64F {
23880 break
23881 }
23882 y := v_0.Args[1]
23883 x := v_0.Args[0]
23884 v.Reset(ssaop.OpNeq64F)
23885 v.AddArg2(x, y)
23886 return true
23887 }
23888
23889
23890 for {
23891 if v_0.Op != ssaop.OpEq32F {
23892 break
23893 }
23894 y := v_0.Args[1]
23895 x := v_0.Args[0]
23896 v.Reset(ssaop.OpNeq32F)
23897 v.AddArg2(x, y)
23898 return true
23899 }
23900
23901
23902 for {
23903 if v_0.Op != ssaop.OpNeq64 {
23904 break
23905 }
23906 y := v_0.Args[1]
23907 x := v_0.Args[0]
23908 v.Reset(ssaop.OpEq64)
23909 v.AddArg2(x, y)
23910 return true
23911 }
23912
23913
23914 for {
23915 if v_0.Op != ssaop.OpNeq32 {
23916 break
23917 }
23918 y := v_0.Args[1]
23919 x := v_0.Args[0]
23920 v.Reset(ssaop.OpEq32)
23921 v.AddArg2(x, y)
23922 return true
23923 }
23924
23925
23926 for {
23927 if v_0.Op != ssaop.OpNeq16 {
23928 break
23929 }
23930 y := v_0.Args[1]
23931 x := v_0.Args[0]
23932 v.Reset(ssaop.OpEq16)
23933 v.AddArg2(x, y)
23934 return true
23935 }
23936
23937
23938 for {
23939 if v_0.Op != ssaop.OpNeq8 {
23940 break
23941 }
23942 y := v_0.Args[1]
23943 x := v_0.Args[0]
23944 v.Reset(ssaop.OpEq8)
23945 v.AddArg2(x, y)
23946 return true
23947 }
23948
23949
23950 for {
23951 if v_0.Op != ssaop.OpNeqB {
23952 break
23953 }
23954 y := v_0.Args[1]
23955 x := v_0.Args[0]
23956 v.Reset(ssaop.OpEqB)
23957 v.AddArg2(x, y)
23958 return true
23959 }
23960
23961
23962 for {
23963 if v_0.Op != ssaop.OpNeqPtr {
23964 break
23965 }
23966 y := v_0.Args[1]
23967 x := v_0.Args[0]
23968 v.Reset(ssaop.OpEqPtr)
23969 v.AddArg2(x, y)
23970 return true
23971 }
23972
23973
23974 for {
23975 if v_0.Op != ssaop.OpNeq64F {
23976 break
23977 }
23978 y := v_0.Args[1]
23979 x := v_0.Args[0]
23980 v.Reset(ssaop.OpEq64F)
23981 v.AddArg2(x, y)
23982 return true
23983 }
23984
23985
23986 for {
23987 if v_0.Op != ssaop.OpNeq32F {
23988 break
23989 }
23990 y := v_0.Args[1]
23991 x := v_0.Args[0]
23992 v.Reset(ssaop.OpEq32F)
23993 v.AddArg2(x, y)
23994 return true
23995 }
23996
23997
23998 for {
23999 if v_0.Op != ssaop.OpLess64 {
24000 break
24001 }
24002 y := v_0.Args[1]
24003 x := v_0.Args[0]
24004 v.Reset(ssaop.OpLeq64)
24005 v.AddArg2(y, x)
24006 return true
24007 }
24008
24009
24010 for {
24011 if v_0.Op != ssaop.OpLess32 {
24012 break
24013 }
24014 y := v_0.Args[1]
24015 x := v_0.Args[0]
24016 v.Reset(ssaop.OpLeq32)
24017 v.AddArg2(y, x)
24018 return true
24019 }
24020
24021
24022 for {
24023 if v_0.Op != ssaop.OpLess16 {
24024 break
24025 }
24026 y := v_0.Args[1]
24027 x := v_0.Args[0]
24028 v.Reset(ssaop.OpLeq16)
24029 v.AddArg2(y, x)
24030 return true
24031 }
24032
24033
24034 for {
24035 if v_0.Op != ssaop.OpLess8 {
24036 break
24037 }
24038 y := v_0.Args[1]
24039 x := v_0.Args[0]
24040 v.Reset(ssaop.OpLeq8)
24041 v.AddArg2(y, x)
24042 return true
24043 }
24044
24045
24046 for {
24047 if v_0.Op != ssaop.OpLess64U {
24048 break
24049 }
24050 y := v_0.Args[1]
24051 x := v_0.Args[0]
24052 v.Reset(ssaop.OpLeq64U)
24053 v.AddArg2(y, x)
24054 return true
24055 }
24056
24057
24058 for {
24059 if v_0.Op != ssaop.OpLess32U {
24060 break
24061 }
24062 y := v_0.Args[1]
24063 x := v_0.Args[0]
24064 v.Reset(ssaop.OpLeq32U)
24065 v.AddArg2(y, x)
24066 return true
24067 }
24068
24069
24070 for {
24071 if v_0.Op != ssaop.OpLess16U {
24072 break
24073 }
24074 y := v_0.Args[1]
24075 x := v_0.Args[0]
24076 v.Reset(ssaop.OpLeq16U)
24077 v.AddArg2(y, x)
24078 return true
24079 }
24080
24081
24082 for {
24083 if v_0.Op != ssaop.OpLess8U {
24084 break
24085 }
24086 y := v_0.Args[1]
24087 x := v_0.Args[0]
24088 v.Reset(ssaop.OpLeq8U)
24089 v.AddArg2(y, x)
24090 return true
24091 }
24092
24093
24094 for {
24095 if v_0.Op != ssaop.OpLeq64 {
24096 break
24097 }
24098 y := v_0.Args[1]
24099 x := v_0.Args[0]
24100 v.Reset(ssaop.OpLess64)
24101 v.AddArg2(y, x)
24102 return true
24103 }
24104
24105
24106 for {
24107 if v_0.Op != ssaop.OpLeq32 {
24108 break
24109 }
24110 y := v_0.Args[1]
24111 x := v_0.Args[0]
24112 v.Reset(ssaop.OpLess32)
24113 v.AddArg2(y, x)
24114 return true
24115 }
24116
24117
24118 for {
24119 if v_0.Op != ssaop.OpLeq16 {
24120 break
24121 }
24122 y := v_0.Args[1]
24123 x := v_0.Args[0]
24124 v.Reset(ssaop.OpLess16)
24125 v.AddArg2(y, x)
24126 return true
24127 }
24128
24129
24130 for {
24131 if v_0.Op != ssaop.OpLeq8 {
24132 break
24133 }
24134 y := v_0.Args[1]
24135 x := v_0.Args[0]
24136 v.Reset(ssaop.OpLess8)
24137 v.AddArg2(y, x)
24138 return true
24139 }
24140
24141
24142 for {
24143 if v_0.Op != ssaop.OpLeq64U {
24144 break
24145 }
24146 y := v_0.Args[1]
24147 x := v_0.Args[0]
24148 v.Reset(ssaop.OpLess64U)
24149 v.AddArg2(y, x)
24150 return true
24151 }
24152
24153
24154 for {
24155 if v_0.Op != ssaop.OpLeq32U {
24156 break
24157 }
24158 y := v_0.Args[1]
24159 x := v_0.Args[0]
24160 v.Reset(ssaop.OpLess32U)
24161 v.AddArg2(y, x)
24162 return true
24163 }
24164
24165
24166 for {
24167 if v_0.Op != ssaop.OpLeq16U {
24168 break
24169 }
24170 y := v_0.Args[1]
24171 x := v_0.Args[0]
24172 v.Reset(ssaop.OpLess16U)
24173 v.AddArg2(y, x)
24174 return true
24175 }
24176
24177
24178 for {
24179 if v_0.Op != ssaop.OpLeq8U {
24180 break
24181 }
24182 y := v_0.Args[1]
24183 x := v_0.Args[0]
24184 v.Reset(ssaop.OpLess8U)
24185 v.AddArg2(y, x)
24186 return true
24187 }
24188 return false
24189 }
24190 func rewriteValue_OpOffPtr(v *ssa.Value) bool {
24191 v_0 := v.Args[0]
24192
24193
24194 for {
24195 x := ssa.AuxIntToInt64(v.AuxInt)
24196 if v_0.Op != ssaop.OpOffPtr {
24197 break
24198 }
24199 y := ssa.AuxIntToInt64(v_0.AuxInt)
24200 p := v_0.Args[0]
24201 v.Reset(ssaop.OpOffPtr)
24202 v.AuxInt = ssa.Int64ToAuxInt(x + y)
24203 v.AddArg(p)
24204 return true
24205 }
24206
24207
24208
24209 for {
24210 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
24211 break
24212 }
24213 p := v_0
24214 if !(v.Type.Compare(p.Type) == types.CMPeq) {
24215 break
24216 }
24217 v.CopyOf(p)
24218 return true
24219 }
24220 return false
24221 }
24222 func rewriteValue_OpOr16(v *ssa.Value) bool {
24223 v_1 := v.Args[1]
24224 v_0 := v.Args[0]
24225 b := v.Block
24226 config := b.Func.Config
24227
24228
24229 for {
24230 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24231 if v_0.Op != ssaop.OpConst16 {
24232 continue
24233 }
24234 c := ssa.AuxIntToInt16(v_0.AuxInt)
24235 if v_1.Op != ssaop.OpConst16 {
24236 continue
24237 }
24238 d := ssa.AuxIntToInt16(v_1.AuxInt)
24239 v.Reset(ssaop.OpConst16)
24240 v.AuxInt = ssa.Int16ToAuxInt(c | d)
24241 return true
24242 }
24243 break
24244 }
24245
24246
24247 for {
24248 t := v.Type
24249 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24250 if v_0.Op != ssaop.OpCom16 {
24251 continue
24252 }
24253 x := v_0.Args[0]
24254 if v_1.Op != ssaop.OpCom16 {
24255 continue
24256 }
24257 y := v_1.Args[0]
24258 v.Reset(ssaop.OpCom16)
24259 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
24260 v0.AddArg2(x, y)
24261 v.AddArg(v0)
24262 return true
24263 }
24264 break
24265 }
24266
24267
24268 for {
24269 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24270 x := v_0
24271 if v_1.Op != ssaop.OpAnd16 {
24272 continue
24273 }
24274 _ = v_1.Args[1]
24275 v_1_0 := v_1.Args[0]
24276 v_1_1 := v_1.Args[1]
24277 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24278 if x != v_1_0 {
24279 continue
24280 }
24281 v.CopyOf(x)
24282 return true
24283 }
24284 }
24285 break
24286 }
24287
24288
24289 for {
24290 x := v_0
24291 if x != v_1 {
24292 break
24293 }
24294 v.CopyOf(x)
24295 return true
24296 }
24297
24298
24299 for {
24300 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24301 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
24302 continue
24303 }
24304 x := v_1
24305 v.CopyOf(x)
24306 return true
24307 }
24308 break
24309 }
24310
24311
24312 for {
24313 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24314 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
24315 continue
24316 }
24317 v.Reset(ssaop.OpConst16)
24318 v.AuxInt = ssa.Int16ToAuxInt(-1)
24319 return true
24320 }
24321 break
24322 }
24323
24324
24325 for {
24326 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24327 if v_0.Op != ssaop.OpCom16 {
24328 continue
24329 }
24330 x := v_0.Args[0]
24331 if x != v_1 {
24332 continue
24333 }
24334 v.Reset(ssaop.OpConst16)
24335 v.AuxInt = ssa.Int16ToAuxInt(-1)
24336 return true
24337 }
24338 break
24339 }
24340
24341
24342 for {
24343 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24344 x := v_0
24345 if v_1.Op != ssaop.OpOr16 {
24346 continue
24347 }
24348 _ = v_1.Args[1]
24349 v_1_0 := v_1.Args[0]
24350 v_1_1 := v_1.Args[1]
24351 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24352 if x != v_1_0 {
24353 continue
24354 }
24355 y := v_1_1
24356 v.Reset(ssaop.OpOr16)
24357 v.AddArg2(x, y)
24358 return true
24359 }
24360 }
24361 break
24362 }
24363
24364
24365
24366 for {
24367 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24368 if v_0.Op != ssaop.OpAnd16 {
24369 continue
24370 }
24371 _ = v_0.Args[1]
24372 v_0_0 := v_0.Args[0]
24373 v_0_1 := v_0.Args[1]
24374 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24375 x := v_0_0
24376 if v_0_1.Op != ssaop.OpConst16 {
24377 continue
24378 }
24379 c2 := ssa.AuxIntToInt16(v_0_1.AuxInt)
24380 if v_1.Op != ssaop.OpConst16 {
24381 continue
24382 }
24383 t := v_1.Type
24384 c1 := ssa.AuxIntToInt16(v_1.AuxInt)
24385 if !(^(c1 | c2) == 0) {
24386 continue
24387 }
24388 v.Reset(ssaop.OpOr16)
24389 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
24390 v0.AuxInt = ssa.Int16ToAuxInt(c1)
24391 v.AddArg2(v0, x)
24392 return true
24393 }
24394 }
24395 break
24396 }
24397
24398
24399
24400 for {
24401 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24402 if v_0.Op != ssaop.OpOr16 {
24403 continue
24404 }
24405 _ = v_0.Args[1]
24406 v_0_0 := v_0.Args[0]
24407 v_0_1 := v_0.Args[1]
24408 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24409 i := v_0_0
24410 if i.Op != ssaop.OpConst16 {
24411 continue
24412 }
24413 t := i.Type
24414 z := v_0_1
24415 x := v_1
24416 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
24417 continue
24418 }
24419 v.Reset(ssaop.OpOr16)
24420 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, t)
24421 v0.AddArg2(z, x)
24422 v.AddArg2(i, v0)
24423 return true
24424 }
24425 }
24426 break
24427 }
24428
24429
24430 for {
24431 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24432 if v_0.Op != ssaop.OpConst16 {
24433 continue
24434 }
24435 t := v_0.Type
24436 c := ssa.AuxIntToInt16(v_0.AuxInt)
24437 if v_1.Op != ssaop.OpOr16 {
24438 continue
24439 }
24440 _ = v_1.Args[1]
24441 v_1_0 := v_1.Args[0]
24442 v_1_1 := v_1.Args[1]
24443 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24444 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
24445 continue
24446 }
24447 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
24448 x := v_1_1
24449 v.Reset(ssaop.OpOr16)
24450 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
24451 v0.AuxInt = ssa.Int16ToAuxInt(c | d)
24452 v.AddArg2(v0, x)
24453 return true
24454 }
24455 }
24456 break
24457 }
24458
24459
24460
24461 for {
24462 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24463 if v_0.Op != ssaop.OpLsh16x64 {
24464 continue
24465 }
24466 _ = v_0.Args[1]
24467 x := v_0.Args[0]
24468 z := v_0.Args[1]
24469 if z.Op != ssaop.OpConst64 {
24470 continue
24471 }
24472 c := ssa.AuxIntToInt64(z.AuxInt)
24473 if v_1.Op != ssaop.OpRsh16Ux64 {
24474 continue
24475 }
24476 _ = v_1.Args[1]
24477 if x != v_1.Args[0] {
24478 continue
24479 }
24480 v_1_1 := v_1.Args[1]
24481 if v_1_1.Op != ssaop.OpConst64 {
24482 continue
24483 }
24484 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
24485 if !(c < 16 && d == 16-c && canRotate(config, 16)) {
24486 continue
24487 }
24488 v.Reset(ssaop.OpRotateLeft16)
24489 v.AddArg2(x, z)
24490 return true
24491 }
24492 break
24493 }
24494
24495
24496
24497 for {
24498 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24499 left := v_0
24500 if left.Op != ssaop.OpLsh16x64 {
24501 continue
24502 }
24503 y := left.Args[1]
24504 x := left.Args[0]
24505 right := v_1
24506 if right.Op != ssaop.OpRsh16Ux64 {
24507 continue
24508 }
24509 _ = right.Args[1]
24510 if x != right.Args[0] {
24511 continue
24512 }
24513 right_1 := right.Args[1]
24514 if right_1.Op != ssaop.OpSub64 {
24515 continue
24516 }
24517 _ = right_1.Args[1]
24518 right_1_0 := right_1.Args[0]
24519 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)) {
24520 continue
24521 }
24522 v.Reset(ssaop.OpRotateLeft16)
24523 v.AddArg2(x, y)
24524 return true
24525 }
24526 break
24527 }
24528
24529
24530
24531 for {
24532 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24533 left := v_0
24534 if left.Op != ssaop.OpLsh16x32 {
24535 continue
24536 }
24537 y := left.Args[1]
24538 x := left.Args[0]
24539 right := v_1
24540 if right.Op != ssaop.OpRsh16Ux32 {
24541 continue
24542 }
24543 _ = right.Args[1]
24544 if x != right.Args[0] {
24545 continue
24546 }
24547 right_1 := right.Args[1]
24548 if right_1.Op != ssaop.OpSub32 {
24549 continue
24550 }
24551 _ = right_1.Args[1]
24552 right_1_0 := right_1.Args[0]
24553 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)) {
24554 continue
24555 }
24556 v.Reset(ssaop.OpRotateLeft16)
24557 v.AddArg2(x, y)
24558 return true
24559 }
24560 break
24561 }
24562
24563
24564
24565 for {
24566 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24567 left := v_0
24568 if left.Op != ssaop.OpLsh16x16 {
24569 continue
24570 }
24571 y := left.Args[1]
24572 x := left.Args[0]
24573 right := v_1
24574 if right.Op != ssaop.OpRsh16Ux16 {
24575 continue
24576 }
24577 _ = right.Args[1]
24578 if x != right.Args[0] {
24579 continue
24580 }
24581 right_1 := right.Args[1]
24582 if right_1.Op != ssaop.OpSub16 {
24583 continue
24584 }
24585 _ = right_1.Args[1]
24586 right_1_0 := right_1.Args[0]
24587 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)) {
24588 continue
24589 }
24590 v.Reset(ssaop.OpRotateLeft16)
24591 v.AddArg2(x, y)
24592 return true
24593 }
24594 break
24595 }
24596
24597
24598
24599 for {
24600 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24601 left := v_0
24602 if left.Op != ssaop.OpLsh16x8 {
24603 continue
24604 }
24605 y := left.Args[1]
24606 x := left.Args[0]
24607 right := v_1
24608 if right.Op != ssaop.OpRsh16Ux8 {
24609 continue
24610 }
24611 _ = right.Args[1]
24612 if x != right.Args[0] {
24613 continue
24614 }
24615 right_1 := right.Args[1]
24616 if right_1.Op != ssaop.OpSub8 {
24617 continue
24618 }
24619 _ = right_1.Args[1]
24620 right_1_0 := right_1.Args[0]
24621 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)) {
24622 continue
24623 }
24624 v.Reset(ssaop.OpRotateLeft16)
24625 v.AddArg2(x, y)
24626 return true
24627 }
24628 break
24629 }
24630
24631
24632
24633 for {
24634 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24635 right := v_0
24636 if right.Op != ssaop.OpRsh16Ux64 {
24637 continue
24638 }
24639 y := right.Args[1]
24640 x := right.Args[0]
24641 left := v_1
24642 if left.Op != ssaop.OpLsh16x64 {
24643 continue
24644 }
24645 _ = left.Args[1]
24646 if x != left.Args[0] {
24647 continue
24648 }
24649 z := left.Args[1]
24650 if z.Op != ssaop.OpSub64 {
24651 continue
24652 }
24653 _ = z.Args[1]
24654 z_0 := z.Args[0]
24655 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)) {
24656 continue
24657 }
24658 v.Reset(ssaop.OpRotateLeft16)
24659 v.AddArg2(x, z)
24660 return true
24661 }
24662 break
24663 }
24664
24665
24666
24667 for {
24668 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24669 right := v_0
24670 if right.Op != ssaop.OpRsh16Ux32 {
24671 continue
24672 }
24673 y := right.Args[1]
24674 x := right.Args[0]
24675 left := v_1
24676 if left.Op != ssaop.OpLsh16x32 {
24677 continue
24678 }
24679 _ = left.Args[1]
24680 if x != left.Args[0] {
24681 continue
24682 }
24683 z := left.Args[1]
24684 if z.Op != ssaop.OpSub32 {
24685 continue
24686 }
24687 _ = z.Args[1]
24688 z_0 := z.Args[0]
24689 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)) {
24690 continue
24691 }
24692 v.Reset(ssaop.OpRotateLeft16)
24693 v.AddArg2(x, z)
24694 return true
24695 }
24696 break
24697 }
24698
24699
24700
24701 for {
24702 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24703 right := v_0
24704 if right.Op != ssaop.OpRsh16Ux16 {
24705 continue
24706 }
24707 y := right.Args[1]
24708 x := right.Args[0]
24709 left := v_1
24710 if left.Op != ssaop.OpLsh16x16 {
24711 continue
24712 }
24713 _ = left.Args[1]
24714 if x != left.Args[0] {
24715 continue
24716 }
24717 z := left.Args[1]
24718 if z.Op != ssaop.OpSub16 {
24719 continue
24720 }
24721 _ = z.Args[1]
24722 z_0 := z.Args[0]
24723 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)) {
24724 continue
24725 }
24726 v.Reset(ssaop.OpRotateLeft16)
24727 v.AddArg2(x, z)
24728 return true
24729 }
24730 break
24731 }
24732
24733
24734
24735 for {
24736 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24737 right := v_0
24738 if right.Op != ssaop.OpRsh16Ux8 {
24739 continue
24740 }
24741 y := right.Args[1]
24742 x := right.Args[0]
24743 left := v_1
24744 if left.Op != ssaop.OpLsh16x8 {
24745 continue
24746 }
24747 _ = left.Args[1]
24748 if x != left.Args[0] {
24749 continue
24750 }
24751 z := left.Args[1]
24752 if z.Op != ssaop.OpSub8 {
24753 continue
24754 }
24755 _ = z.Args[1]
24756 z_0 := z.Args[0]
24757 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)) {
24758 continue
24759 }
24760 v.Reset(ssaop.OpRotateLeft16)
24761 v.AddArg2(x, z)
24762 return true
24763 }
24764 break
24765 }
24766 return false
24767 }
24768 func rewriteValue_OpOr32(v *ssa.Value) bool {
24769 v_1 := v.Args[1]
24770 v_0 := v.Args[0]
24771 b := v.Block
24772 config := b.Func.Config
24773
24774
24775 for {
24776 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24777 if v_0.Op != ssaop.OpConst32 {
24778 continue
24779 }
24780 c := ssa.AuxIntToInt32(v_0.AuxInt)
24781 if v_1.Op != ssaop.OpConst32 {
24782 continue
24783 }
24784 d := ssa.AuxIntToInt32(v_1.AuxInt)
24785 v.Reset(ssaop.OpConst32)
24786 v.AuxInt = ssa.Int32ToAuxInt(c | d)
24787 return true
24788 }
24789 break
24790 }
24791
24792
24793 for {
24794 t := v.Type
24795 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24796 if v_0.Op != ssaop.OpCom32 {
24797 continue
24798 }
24799 x := v_0.Args[0]
24800 if v_1.Op != ssaop.OpCom32 {
24801 continue
24802 }
24803 y := v_1.Args[0]
24804 v.Reset(ssaop.OpCom32)
24805 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
24806 v0.AddArg2(x, y)
24807 v.AddArg(v0)
24808 return true
24809 }
24810 break
24811 }
24812
24813
24814 for {
24815 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24816 x := v_0
24817 if v_1.Op != ssaop.OpAnd32 {
24818 continue
24819 }
24820 _ = v_1.Args[1]
24821 v_1_0 := v_1.Args[0]
24822 v_1_1 := v_1.Args[1]
24823 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24824 if x != v_1_0 {
24825 continue
24826 }
24827 v.CopyOf(x)
24828 return true
24829 }
24830 }
24831 break
24832 }
24833
24834
24835 for {
24836 x := v_0
24837 if x != v_1 {
24838 break
24839 }
24840 v.CopyOf(x)
24841 return true
24842 }
24843
24844
24845 for {
24846 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24847 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
24848 continue
24849 }
24850 x := v_1
24851 v.CopyOf(x)
24852 return true
24853 }
24854 break
24855 }
24856
24857
24858 for {
24859 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24860 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
24861 continue
24862 }
24863 v.Reset(ssaop.OpConst32)
24864 v.AuxInt = ssa.Int32ToAuxInt(-1)
24865 return true
24866 }
24867 break
24868 }
24869
24870
24871 for {
24872 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24873 if v_0.Op != ssaop.OpCom32 {
24874 continue
24875 }
24876 x := v_0.Args[0]
24877 if x != v_1 {
24878 continue
24879 }
24880 v.Reset(ssaop.OpConst32)
24881 v.AuxInt = ssa.Int32ToAuxInt(-1)
24882 return true
24883 }
24884 break
24885 }
24886
24887
24888 for {
24889 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24890 x := v_0
24891 if v_1.Op != ssaop.OpOr32 {
24892 continue
24893 }
24894 _ = v_1.Args[1]
24895 v_1_0 := v_1.Args[0]
24896 v_1_1 := v_1.Args[1]
24897 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24898 if x != v_1_0 {
24899 continue
24900 }
24901 y := v_1_1
24902 v.Reset(ssaop.OpOr32)
24903 v.AddArg2(x, y)
24904 return true
24905 }
24906 }
24907 break
24908 }
24909
24910
24911
24912 for {
24913 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24914 if v_0.Op != ssaop.OpAnd32 {
24915 continue
24916 }
24917 _ = v_0.Args[1]
24918 v_0_0 := v_0.Args[0]
24919 v_0_1 := v_0.Args[1]
24920 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24921 x := v_0_0
24922 if v_0_1.Op != ssaop.OpConst32 {
24923 continue
24924 }
24925 c2 := ssa.AuxIntToInt32(v_0_1.AuxInt)
24926 if v_1.Op != ssaop.OpConst32 {
24927 continue
24928 }
24929 t := v_1.Type
24930 c1 := ssa.AuxIntToInt32(v_1.AuxInt)
24931 if !(^(c1 | c2) == 0) {
24932 continue
24933 }
24934 v.Reset(ssaop.OpOr32)
24935 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
24936 v0.AuxInt = ssa.Int32ToAuxInt(c1)
24937 v.AddArg2(v0, x)
24938 return true
24939 }
24940 }
24941 break
24942 }
24943
24944
24945
24946 for {
24947 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24948 if v_0.Op != ssaop.OpOr32 {
24949 continue
24950 }
24951 _ = v_0.Args[1]
24952 v_0_0 := v_0.Args[0]
24953 v_0_1 := v_0.Args[1]
24954 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24955 i := v_0_0
24956 if i.Op != ssaop.OpConst32 {
24957 continue
24958 }
24959 t := i.Type
24960 z := v_0_1
24961 x := v_1
24962 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
24963 continue
24964 }
24965 v.Reset(ssaop.OpOr32)
24966 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, t)
24967 v0.AddArg2(z, x)
24968 v.AddArg2(i, v0)
24969 return true
24970 }
24971 }
24972 break
24973 }
24974
24975
24976 for {
24977 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24978 if v_0.Op != ssaop.OpConst32 {
24979 continue
24980 }
24981 t := v_0.Type
24982 c := ssa.AuxIntToInt32(v_0.AuxInt)
24983 if v_1.Op != ssaop.OpOr32 {
24984 continue
24985 }
24986 _ = v_1.Args[1]
24987 v_1_0 := v_1.Args[0]
24988 v_1_1 := v_1.Args[1]
24989 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24990 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
24991 continue
24992 }
24993 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
24994 x := v_1_1
24995 v.Reset(ssaop.OpOr32)
24996 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
24997 v0.AuxInt = ssa.Int32ToAuxInt(c | d)
24998 v.AddArg2(v0, x)
24999 return true
25000 }
25001 }
25002 break
25003 }
25004
25005
25006
25007 for {
25008 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25009 if v_0.Op != ssaop.OpLsh32x64 {
25010 continue
25011 }
25012 _ = v_0.Args[1]
25013 x := v_0.Args[0]
25014 z := v_0.Args[1]
25015 if z.Op != ssaop.OpConst64 {
25016 continue
25017 }
25018 c := ssa.AuxIntToInt64(z.AuxInt)
25019 if v_1.Op != ssaop.OpRsh32Ux64 {
25020 continue
25021 }
25022 _ = v_1.Args[1]
25023 if x != v_1.Args[0] {
25024 continue
25025 }
25026 v_1_1 := v_1.Args[1]
25027 if v_1_1.Op != ssaop.OpConst64 {
25028 continue
25029 }
25030 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
25031 if !(c < 32 && d == 32-c && canRotate(config, 32)) {
25032 continue
25033 }
25034 v.Reset(ssaop.OpRotateLeft32)
25035 v.AddArg2(x, z)
25036 return true
25037 }
25038 break
25039 }
25040
25041
25042
25043 for {
25044 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25045 left := v_0
25046 if left.Op != ssaop.OpLsh32x64 {
25047 continue
25048 }
25049 y := left.Args[1]
25050 x := left.Args[0]
25051 right := v_1
25052 if right.Op != ssaop.OpRsh32Ux64 {
25053 continue
25054 }
25055 _ = right.Args[1]
25056 if x != right.Args[0] {
25057 continue
25058 }
25059 right_1 := right.Args[1]
25060 if right_1.Op != ssaop.OpSub64 {
25061 continue
25062 }
25063 _ = right_1.Args[1]
25064 right_1_0 := right_1.Args[0]
25065 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)) {
25066 continue
25067 }
25068 v.Reset(ssaop.OpRotateLeft32)
25069 v.AddArg2(x, y)
25070 return true
25071 }
25072 break
25073 }
25074
25075
25076
25077 for {
25078 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25079 left := v_0
25080 if left.Op != ssaop.OpLsh32x32 {
25081 continue
25082 }
25083 y := left.Args[1]
25084 x := left.Args[0]
25085 right := v_1
25086 if right.Op != ssaop.OpRsh32Ux32 {
25087 continue
25088 }
25089 _ = right.Args[1]
25090 if x != right.Args[0] {
25091 continue
25092 }
25093 right_1 := right.Args[1]
25094 if right_1.Op != ssaop.OpSub32 {
25095 continue
25096 }
25097 _ = right_1.Args[1]
25098 right_1_0 := right_1.Args[0]
25099 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)) {
25100 continue
25101 }
25102 v.Reset(ssaop.OpRotateLeft32)
25103 v.AddArg2(x, y)
25104 return true
25105 }
25106 break
25107 }
25108
25109
25110
25111 for {
25112 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25113 left := v_0
25114 if left.Op != ssaop.OpLsh32x16 {
25115 continue
25116 }
25117 y := left.Args[1]
25118 x := left.Args[0]
25119 right := v_1
25120 if right.Op != ssaop.OpRsh32Ux16 {
25121 continue
25122 }
25123 _ = right.Args[1]
25124 if x != right.Args[0] {
25125 continue
25126 }
25127 right_1 := right.Args[1]
25128 if right_1.Op != ssaop.OpSub16 {
25129 continue
25130 }
25131 _ = right_1.Args[1]
25132 right_1_0 := right_1.Args[0]
25133 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)) {
25134 continue
25135 }
25136 v.Reset(ssaop.OpRotateLeft32)
25137 v.AddArg2(x, y)
25138 return true
25139 }
25140 break
25141 }
25142
25143
25144
25145 for {
25146 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25147 left := v_0
25148 if left.Op != ssaop.OpLsh32x8 {
25149 continue
25150 }
25151 y := left.Args[1]
25152 x := left.Args[0]
25153 right := v_1
25154 if right.Op != ssaop.OpRsh32Ux8 {
25155 continue
25156 }
25157 _ = right.Args[1]
25158 if x != right.Args[0] {
25159 continue
25160 }
25161 right_1 := right.Args[1]
25162 if right_1.Op != ssaop.OpSub8 {
25163 continue
25164 }
25165 _ = right_1.Args[1]
25166 right_1_0 := right_1.Args[0]
25167 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)) {
25168 continue
25169 }
25170 v.Reset(ssaop.OpRotateLeft32)
25171 v.AddArg2(x, y)
25172 return true
25173 }
25174 break
25175 }
25176
25177
25178
25179 for {
25180 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25181 right := v_0
25182 if right.Op != ssaop.OpRsh32Ux64 {
25183 continue
25184 }
25185 y := right.Args[1]
25186 x := right.Args[0]
25187 left := v_1
25188 if left.Op != ssaop.OpLsh32x64 {
25189 continue
25190 }
25191 _ = left.Args[1]
25192 if x != left.Args[0] {
25193 continue
25194 }
25195 z := left.Args[1]
25196 if z.Op != ssaop.OpSub64 {
25197 continue
25198 }
25199 _ = z.Args[1]
25200 z_0 := z.Args[0]
25201 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)) {
25202 continue
25203 }
25204 v.Reset(ssaop.OpRotateLeft32)
25205 v.AddArg2(x, z)
25206 return true
25207 }
25208 break
25209 }
25210
25211
25212
25213 for {
25214 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25215 right := v_0
25216 if right.Op != ssaop.OpRsh32Ux32 {
25217 continue
25218 }
25219 y := right.Args[1]
25220 x := right.Args[0]
25221 left := v_1
25222 if left.Op != ssaop.OpLsh32x32 {
25223 continue
25224 }
25225 _ = left.Args[1]
25226 if x != left.Args[0] {
25227 continue
25228 }
25229 z := left.Args[1]
25230 if z.Op != ssaop.OpSub32 {
25231 continue
25232 }
25233 _ = z.Args[1]
25234 z_0 := z.Args[0]
25235 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)) {
25236 continue
25237 }
25238 v.Reset(ssaop.OpRotateLeft32)
25239 v.AddArg2(x, z)
25240 return true
25241 }
25242 break
25243 }
25244
25245
25246
25247 for {
25248 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25249 right := v_0
25250 if right.Op != ssaop.OpRsh32Ux16 {
25251 continue
25252 }
25253 y := right.Args[1]
25254 x := right.Args[0]
25255 left := v_1
25256 if left.Op != ssaop.OpLsh32x16 {
25257 continue
25258 }
25259 _ = left.Args[1]
25260 if x != left.Args[0] {
25261 continue
25262 }
25263 z := left.Args[1]
25264 if z.Op != ssaop.OpSub16 {
25265 continue
25266 }
25267 _ = z.Args[1]
25268 z_0 := z.Args[0]
25269 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)) {
25270 continue
25271 }
25272 v.Reset(ssaop.OpRotateLeft32)
25273 v.AddArg2(x, z)
25274 return true
25275 }
25276 break
25277 }
25278
25279
25280
25281 for {
25282 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25283 right := v_0
25284 if right.Op != ssaop.OpRsh32Ux8 {
25285 continue
25286 }
25287 y := right.Args[1]
25288 x := right.Args[0]
25289 left := v_1
25290 if left.Op != ssaop.OpLsh32x8 {
25291 continue
25292 }
25293 _ = left.Args[1]
25294 if x != left.Args[0] {
25295 continue
25296 }
25297 z := left.Args[1]
25298 if z.Op != ssaop.OpSub8 {
25299 continue
25300 }
25301 _ = z.Args[1]
25302 z_0 := z.Args[0]
25303 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)) {
25304 continue
25305 }
25306 v.Reset(ssaop.OpRotateLeft32)
25307 v.AddArg2(x, z)
25308 return true
25309 }
25310 break
25311 }
25312 return false
25313 }
25314 func rewriteValue_OpOr64(v *ssa.Value) bool {
25315 v_1 := v.Args[1]
25316 v_0 := v.Args[0]
25317 b := v.Block
25318 config := b.Func.Config
25319
25320
25321 for {
25322 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25323 if v_0.Op != ssaop.OpConst64 {
25324 continue
25325 }
25326 c := ssa.AuxIntToInt64(v_0.AuxInt)
25327 if v_1.Op != ssaop.OpConst64 {
25328 continue
25329 }
25330 d := ssa.AuxIntToInt64(v_1.AuxInt)
25331 v.Reset(ssaop.OpConst64)
25332 v.AuxInt = ssa.Int64ToAuxInt(c | d)
25333 return true
25334 }
25335 break
25336 }
25337
25338
25339 for {
25340 t := v.Type
25341 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25342 if v_0.Op != ssaop.OpCom64 {
25343 continue
25344 }
25345 x := v_0.Args[0]
25346 if v_1.Op != ssaop.OpCom64 {
25347 continue
25348 }
25349 y := v_1.Args[0]
25350 v.Reset(ssaop.OpCom64)
25351 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
25352 v0.AddArg2(x, y)
25353 v.AddArg(v0)
25354 return true
25355 }
25356 break
25357 }
25358
25359
25360 for {
25361 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25362 x := v_0
25363 if v_1.Op != ssaop.OpAnd64 {
25364 continue
25365 }
25366 _ = v_1.Args[1]
25367 v_1_0 := v_1.Args[0]
25368 v_1_1 := v_1.Args[1]
25369 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25370 if x != v_1_0 {
25371 continue
25372 }
25373 v.CopyOf(x)
25374 return true
25375 }
25376 }
25377 break
25378 }
25379
25380
25381 for {
25382 x := v_0
25383 if x != v_1 {
25384 break
25385 }
25386 v.CopyOf(x)
25387 return true
25388 }
25389
25390
25391 for {
25392 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25393 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
25394 continue
25395 }
25396 x := v_1
25397 v.CopyOf(x)
25398 return true
25399 }
25400 break
25401 }
25402
25403
25404 for {
25405 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25406 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
25407 continue
25408 }
25409 v.Reset(ssaop.OpConst64)
25410 v.AuxInt = ssa.Int64ToAuxInt(-1)
25411 return true
25412 }
25413 break
25414 }
25415
25416
25417 for {
25418 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25419 if v_0.Op != ssaop.OpCom64 {
25420 continue
25421 }
25422 x := v_0.Args[0]
25423 if x != v_1 {
25424 continue
25425 }
25426 v.Reset(ssaop.OpConst64)
25427 v.AuxInt = ssa.Int64ToAuxInt(-1)
25428 return true
25429 }
25430 break
25431 }
25432
25433
25434 for {
25435 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25436 x := v_0
25437 if v_1.Op != ssaop.OpOr64 {
25438 continue
25439 }
25440 _ = v_1.Args[1]
25441 v_1_0 := v_1.Args[0]
25442 v_1_1 := v_1.Args[1]
25443 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25444 if x != v_1_0 {
25445 continue
25446 }
25447 y := v_1_1
25448 v.Reset(ssaop.OpOr64)
25449 v.AddArg2(x, y)
25450 return true
25451 }
25452 }
25453 break
25454 }
25455
25456
25457
25458 for {
25459 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25460 if v_0.Op != ssaop.OpAnd64 {
25461 continue
25462 }
25463 _ = v_0.Args[1]
25464 v_0_0 := v_0.Args[0]
25465 v_0_1 := v_0.Args[1]
25466 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
25467 x := v_0_0
25468 if v_0_1.Op != ssaop.OpConst64 {
25469 continue
25470 }
25471 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
25472 if v_1.Op != ssaop.OpConst64 {
25473 continue
25474 }
25475 t := v_1.Type
25476 c1 := ssa.AuxIntToInt64(v_1.AuxInt)
25477 if !(^(c1 | c2) == 0) {
25478 continue
25479 }
25480 v.Reset(ssaop.OpOr64)
25481 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
25482 v0.AuxInt = ssa.Int64ToAuxInt(c1)
25483 v.AddArg2(v0, x)
25484 return true
25485 }
25486 }
25487 break
25488 }
25489
25490
25491
25492 for {
25493 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25494 if v_0.Op != ssaop.OpOr64 {
25495 continue
25496 }
25497 _ = v_0.Args[1]
25498 v_0_0 := v_0.Args[0]
25499 v_0_1 := v_0.Args[1]
25500 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
25501 i := v_0_0
25502 if i.Op != ssaop.OpConst64 {
25503 continue
25504 }
25505 t := i.Type
25506 z := v_0_1
25507 x := v_1
25508 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
25509 continue
25510 }
25511 v.Reset(ssaop.OpOr64)
25512 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, t)
25513 v0.AddArg2(z, x)
25514 v.AddArg2(i, v0)
25515 return true
25516 }
25517 }
25518 break
25519 }
25520
25521
25522 for {
25523 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25524 if v_0.Op != ssaop.OpConst64 {
25525 continue
25526 }
25527 t := v_0.Type
25528 c := ssa.AuxIntToInt64(v_0.AuxInt)
25529 if v_1.Op != ssaop.OpOr64 {
25530 continue
25531 }
25532 _ = v_1.Args[1]
25533 v_1_0 := v_1.Args[0]
25534 v_1_1 := v_1.Args[1]
25535 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25536 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
25537 continue
25538 }
25539 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
25540 x := v_1_1
25541 v.Reset(ssaop.OpOr64)
25542 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
25543 v0.AuxInt = ssa.Int64ToAuxInt(c | d)
25544 v.AddArg2(v0, x)
25545 return true
25546 }
25547 }
25548 break
25549 }
25550
25551
25552
25553 for {
25554 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25555 if v_0.Op != ssaop.OpLsh64x64 {
25556 continue
25557 }
25558 _ = v_0.Args[1]
25559 x := v_0.Args[0]
25560 z := v_0.Args[1]
25561 if z.Op != ssaop.OpConst64 {
25562 continue
25563 }
25564 c := ssa.AuxIntToInt64(z.AuxInt)
25565 if v_1.Op != ssaop.OpRsh64Ux64 {
25566 continue
25567 }
25568 _ = v_1.Args[1]
25569 if x != v_1.Args[0] {
25570 continue
25571 }
25572 v_1_1 := v_1.Args[1]
25573 if v_1_1.Op != ssaop.OpConst64 {
25574 continue
25575 }
25576 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
25577 if !(c < 64 && d == 64-c && canRotate(config, 64)) {
25578 continue
25579 }
25580 v.Reset(ssaop.OpRotateLeft64)
25581 v.AddArg2(x, z)
25582 return true
25583 }
25584 break
25585 }
25586
25587
25588
25589 for {
25590 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25591 left := v_0
25592 if left.Op != ssaop.OpLsh64x64 {
25593 continue
25594 }
25595 y := left.Args[1]
25596 x := left.Args[0]
25597 right := v_1
25598 if right.Op != ssaop.OpRsh64Ux64 {
25599 continue
25600 }
25601 _ = right.Args[1]
25602 if x != right.Args[0] {
25603 continue
25604 }
25605 right_1 := right.Args[1]
25606 if right_1.Op != ssaop.OpSub64 {
25607 continue
25608 }
25609 _ = right_1.Args[1]
25610 right_1_0 := right_1.Args[0]
25611 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)) {
25612 continue
25613 }
25614 v.Reset(ssaop.OpRotateLeft64)
25615 v.AddArg2(x, y)
25616 return true
25617 }
25618 break
25619 }
25620
25621
25622
25623 for {
25624 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25625 left := v_0
25626 if left.Op != ssaop.OpLsh64x32 {
25627 continue
25628 }
25629 y := left.Args[1]
25630 x := left.Args[0]
25631 right := v_1
25632 if right.Op != ssaop.OpRsh64Ux32 {
25633 continue
25634 }
25635 _ = right.Args[1]
25636 if x != right.Args[0] {
25637 continue
25638 }
25639 right_1 := right.Args[1]
25640 if right_1.Op != ssaop.OpSub32 {
25641 continue
25642 }
25643 _ = right_1.Args[1]
25644 right_1_0 := right_1.Args[0]
25645 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)) {
25646 continue
25647 }
25648 v.Reset(ssaop.OpRotateLeft64)
25649 v.AddArg2(x, y)
25650 return true
25651 }
25652 break
25653 }
25654
25655
25656
25657 for {
25658 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25659 left := v_0
25660 if left.Op != ssaop.OpLsh64x16 {
25661 continue
25662 }
25663 y := left.Args[1]
25664 x := left.Args[0]
25665 right := v_1
25666 if right.Op != ssaop.OpRsh64Ux16 {
25667 continue
25668 }
25669 _ = right.Args[1]
25670 if x != right.Args[0] {
25671 continue
25672 }
25673 right_1 := right.Args[1]
25674 if right_1.Op != ssaop.OpSub16 {
25675 continue
25676 }
25677 _ = right_1.Args[1]
25678 right_1_0 := right_1.Args[0]
25679 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)) {
25680 continue
25681 }
25682 v.Reset(ssaop.OpRotateLeft64)
25683 v.AddArg2(x, y)
25684 return true
25685 }
25686 break
25687 }
25688
25689
25690
25691 for {
25692 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25693 left := v_0
25694 if left.Op != ssaop.OpLsh64x8 {
25695 continue
25696 }
25697 y := left.Args[1]
25698 x := left.Args[0]
25699 right := v_1
25700 if right.Op != ssaop.OpRsh64Ux8 {
25701 continue
25702 }
25703 _ = right.Args[1]
25704 if x != right.Args[0] {
25705 continue
25706 }
25707 right_1 := right.Args[1]
25708 if right_1.Op != ssaop.OpSub8 {
25709 continue
25710 }
25711 _ = right_1.Args[1]
25712 right_1_0 := right_1.Args[0]
25713 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)) {
25714 continue
25715 }
25716 v.Reset(ssaop.OpRotateLeft64)
25717 v.AddArg2(x, y)
25718 return true
25719 }
25720 break
25721 }
25722
25723
25724
25725 for {
25726 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25727 right := v_0
25728 if right.Op != ssaop.OpRsh64Ux64 {
25729 continue
25730 }
25731 y := right.Args[1]
25732 x := right.Args[0]
25733 left := v_1
25734 if left.Op != ssaop.OpLsh64x64 {
25735 continue
25736 }
25737 _ = left.Args[1]
25738 if x != left.Args[0] {
25739 continue
25740 }
25741 z := left.Args[1]
25742 if z.Op != ssaop.OpSub64 {
25743 continue
25744 }
25745 _ = z.Args[1]
25746 z_0 := z.Args[0]
25747 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)) {
25748 continue
25749 }
25750 v.Reset(ssaop.OpRotateLeft64)
25751 v.AddArg2(x, z)
25752 return true
25753 }
25754 break
25755 }
25756
25757
25758
25759 for {
25760 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25761 right := v_0
25762 if right.Op != ssaop.OpRsh64Ux32 {
25763 continue
25764 }
25765 y := right.Args[1]
25766 x := right.Args[0]
25767 left := v_1
25768 if left.Op != ssaop.OpLsh64x32 {
25769 continue
25770 }
25771 _ = left.Args[1]
25772 if x != left.Args[0] {
25773 continue
25774 }
25775 z := left.Args[1]
25776 if z.Op != ssaop.OpSub32 {
25777 continue
25778 }
25779 _ = z.Args[1]
25780 z_0 := z.Args[0]
25781 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)) {
25782 continue
25783 }
25784 v.Reset(ssaop.OpRotateLeft64)
25785 v.AddArg2(x, z)
25786 return true
25787 }
25788 break
25789 }
25790
25791
25792
25793 for {
25794 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25795 right := v_0
25796 if right.Op != ssaop.OpRsh64Ux16 {
25797 continue
25798 }
25799 y := right.Args[1]
25800 x := right.Args[0]
25801 left := v_1
25802 if left.Op != ssaop.OpLsh64x16 {
25803 continue
25804 }
25805 _ = left.Args[1]
25806 if x != left.Args[0] {
25807 continue
25808 }
25809 z := left.Args[1]
25810 if z.Op != ssaop.OpSub16 {
25811 continue
25812 }
25813 _ = z.Args[1]
25814 z_0 := z.Args[0]
25815 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)) {
25816 continue
25817 }
25818 v.Reset(ssaop.OpRotateLeft64)
25819 v.AddArg2(x, z)
25820 return true
25821 }
25822 break
25823 }
25824
25825
25826
25827 for {
25828 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25829 right := v_0
25830 if right.Op != ssaop.OpRsh64Ux8 {
25831 continue
25832 }
25833 y := right.Args[1]
25834 x := right.Args[0]
25835 left := v_1
25836 if left.Op != ssaop.OpLsh64x8 {
25837 continue
25838 }
25839 _ = left.Args[1]
25840 if x != left.Args[0] {
25841 continue
25842 }
25843 z := left.Args[1]
25844 if z.Op != ssaop.OpSub8 {
25845 continue
25846 }
25847 _ = z.Args[1]
25848 z_0 := z.Args[0]
25849 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)) {
25850 continue
25851 }
25852 v.Reset(ssaop.OpRotateLeft64)
25853 v.AddArg2(x, z)
25854 return true
25855 }
25856 break
25857 }
25858 return false
25859 }
25860 func rewriteValue_OpOr8(v *ssa.Value) bool {
25861 v_1 := v.Args[1]
25862 v_0 := v.Args[0]
25863 b := v.Block
25864 config := b.Func.Config
25865
25866
25867 for {
25868 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25869 if v_0.Op != ssaop.OpConst8 {
25870 continue
25871 }
25872 c := ssa.AuxIntToInt8(v_0.AuxInt)
25873 if v_1.Op != ssaop.OpConst8 {
25874 continue
25875 }
25876 d := ssa.AuxIntToInt8(v_1.AuxInt)
25877 v.Reset(ssaop.OpConst8)
25878 v.AuxInt = ssa.Int8ToAuxInt(c | d)
25879 return true
25880 }
25881 break
25882 }
25883
25884
25885 for {
25886 t := v.Type
25887 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25888 if v_0.Op != ssaop.OpCom8 {
25889 continue
25890 }
25891 x := v_0.Args[0]
25892 if v_1.Op != ssaop.OpCom8 {
25893 continue
25894 }
25895 y := v_1.Args[0]
25896 v.Reset(ssaop.OpCom8)
25897 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
25898 v0.AddArg2(x, y)
25899 v.AddArg(v0)
25900 return true
25901 }
25902 break
25903 }
25904
25905
25906 for {
25907 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25908 x := v_0
25909 if v_1.Op != ssaop.OpAnd8 {
25910 continue
25911 }
25912 _ = v_1.Args[1]
25913 v_1_0 := v_1.Args[0]
25914 v_1_1 := v_1.Args[1]
25915 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25916 if x != v_1_0 {
25917 continue
25918 }
25919 v.CopyOf(x)
25920 return true
25921 }
25922 }
25923 break
25924 }
25925
25926
25927 for {
25928 x := v_0
25929 if x != v_1 {
25930 break
25931 }
25932 v.CopyOf(x)
25933 return true
25934 }
25935
25936
25937 for {
25938 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25939 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
25940 continue
25941 }
25942 x := v_1
25943 v.CopyOf(x)
25944 return true
25945 }
25946 break
25947 }
25948
25949
25950 for {
25951 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25952 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
25953 continue
25954 }
25955 v.Reset(ssaop.OpConst8)
25956 v.AuxInt = ssa.Int8ToAuxInt(-1)
25957 return true
25958 }
25959 break
25960 }
25961
25962
25963 for {
25964 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25965 if v_0.Op != ssaop.OpCom8 {
25966 continue
25967 }
25968 x := v_0.Args[0]
25969 if x != v_1 {
25970 continue
25971 }
25972 v.Reset(ssaop.OpConst8)
25973 v.AuxInt = ssa.Int8ToAuxInt(-1)
25974 return true
25975 }
25976 break
25977 }
25978
25979
25980 for {
25981 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25982 x := v_0
25983 if v_1.Op != ssaop.OpOr8 {
25984 continue
25985 }
25986 _ = v_1.Args[1]
25987 v_1_0 := v_1.Args[0]
25988 v_1_1 := v_1.Args[1]
25989 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25990 if x != v_1_0 {
25991 continue
25992 }
25993 y := v_1_1
25994 v.Reset(ssaop.OpOr8)
25995 v.AddArg2(x, y)
25996 return true
25997 }
25998 }
25999 break
26000 }
26001
26002
26003
26004 for {
26005 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26006 if v_0.Op != ssaop.OpAnd8 {
26007 continue
26008 }
26009 _ = v_0.Args[1]
26010 v_0_0 := v_0.Args[0]
26011 v_0_1 := v_0.Args[1]
26012 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
26013 x := v_0_0
26014 if v_0_1.Op != ssaop.OpConst8 {
26015 continue
26016 }
26017 c2 := ssa.AuxIntToInt8(v_0_1.AuxInt)
26018 if v_1.Op != ssaop.OpConst8 {
26019 continue
26020 }
26021 t := v_1.Type
26022 c1 := ssa.AuxIntToInt8(v_1.AuxInt)
26023 if !(^(c1 | c2) == 0) {
26024 continue
26025 }
26026 v.Reset(ssaop.OpOr8)
26027 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
26028 v0.AuxInt = ssa.Int8ToAuxInt(c1)
26029 v.AddArg2(v0, x)
26030 return true
26031 }
26032 }
26033 break
26034 }
26035
26036
26037
26038 for {
26039 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26040 if v_0.Op != ssaop.OpOr8 {
26041 continue
26042 }
26043 _ = v_0.Args[1]
26044 v_0_0 := v_0.Args[0]
26045 v_0_1 := v_0.Args[1]
26046 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
26047 i := v_0_0
26048 if i.Op != ssaop.OpConst8 {
26049 continue
26050 }
26051 t := i.Type
26052 z := v_0_1
26053 x := v_1
26054 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
26055 continue
26056 }
26057 v.Reset(ssaop.OpOr8)
26058 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, t)
26059 v0.AddArg2(z, x)
26060 v.AddArg2(i, v0)
26061 return true
26062 }
26063 }
26064 break
26065 }
26066
26067
26068 for {
26069 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26070 if v_0.Op != ssaop.OpConst8 {
26071 continue
26072 }
26073 t := v_0.Type
26074 c := ssa.AuxIntToInt8(v_0.AuxInt)
26075 if v_1.Op != ssaop.OpOr8 {
26076 continue
26077 }
26078 _ = v_1.Args[1]
26079 v_1_0 := v_1.Args[0]
26080 v_1_1 := v_1.Args[1]
26081 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
26082 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
26083 continue
26084 }
26085 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
26086 x := v_1_1
26087 v.Reset(ssaop.OpOr8)
26088 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
26089 v0.AuxInt = ssa.Int8ToAuxInt(c | d)
26090 v.AddArg2(v0, x)
26091 return true
26092 }
26093 }
26094 break
26095 }
26096
26097
26098
26099 for {
26100 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26101 if v_0.Op != ssaop.OpLsh8x64 {
26102 continue
26103 }
26104 _ = v_0.Args[1]
26105 x := v_0.Args[0]
26106 z := v_0.Args[1]
26107 if z.Op != ssaop.OpConst64 {
26108 continue
26109 }
26110 c := ssa.AuxIntToInt64(z.AuxInt)
26111 if v_1.Op != ssaop.OpRsh8Ux64 {
26112 continue
26113 }
26114 _ = v_1.Args[1]
26115 if x != v_1.Args[0] {
26116 continue
26117 }
26118 v_1_1 := v_1.Args[1]
26119 if v_1_1.Op != ssaop.OpConst64 {
26120 continue
26121 }
26122 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26123 if !(c < 8 && d == 8-c && canRotate(config, 8)) {
26124 continue
26125 }
26126 v.Reset(ssaop.OpRotateLeft8)
26127 v.AddArg2(x, z)
26128 return true
26129 }
26130 break
26131 }
26132
26133
26134
26135 for {
26136 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26137 left := v_0
26138 if left.Op != ssaop.OpLsh8x64 {
26139 continue
26140 }
26141 y := left.Args[1]
26142 x := left.Args[0]
26143 right := v_1
26144 if right.Op != ssaop.OpRsh8Ux64 {
26145 continue
26146 }
26147 _ = right.Args[1]
26148 if x != right.Args[0] {
26149 continue
26150 }
26151 right_1 := right.Args[1]
26152 if right_1.Op != ssaop.OpSub64 {
26153 continue
26154 }
26155 _ = right_1.Args[1]
26156 right_1_0 := right_1.Args[0]
26157 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)) {
26158 continue
26159 }
26160 v.Reset(ssaop.OpRotateLeft8)
26161 v.AddArg2(x, y)
26162 return true
26163 }
26164 break
26165 }
26166
26167
26168
26169 for {
26170 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26171 left := v_0
26172 if left.Op != ssaop.OpLsh8x32 {
26173 continue
26174 }
26175 y := left.Args[1]
26176 x := left.Args[0]
26177 right := v_1
26178 if right.Op != ssaop.OpRsh8Ux32 {
26179 continue
26180 }
26181 _ = right.Args[1]
26182 if x != right.Args[0] {
26183 continue
26184 }
26185 right_1 := right.Args[1]
26186 if right_1.Op != ssaop.OpSub32 {
26187 continue
26188 }
26189 _ = right_1.Args[1]
26190 right_1_0 := right_1.Args[0]
26191 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)) {
26192 continue
26193 }
26194 v.Reset(ssaop.OpRotateLeft8)
26195 v.AddArg2(x, y)
26196 return true
26197 }
26198 break
26199 }
26200
26201
26202
26203 for {
26204 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26205 left := v_0
26206 if left.Op != ssaop.OpLsh8x16 {
26207 continue
26208 }
26209 y := left.Args[1]
26210 x := left.Args[0]
26211 right := v_1
26212 if right.Op != ssaop.OpRsh8Ux16 {
26213 continue
26214 }
26215 _ = right.Args[1]
26216 if x != right.Args[0] {
26217 continue
26218 }
26219 right_1 := right.Args[1]
26220 if right_1.Op != ssaop.OpSub16 {
26221 continue
26222 }
26223 _ = right_1.Args[1]
26224 right_1_0 := right_1.Args[0]
26225 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)) {
26226 continue
26227 }
26228 v.Reset(ssaop.OpRotateLeft8)
26229 v.AddArg2(x, y)
26230 return true
26231 }
26232 break
26233 }
26234
26235
26236
26237 for {
26238 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26239 left := v_0
26240 if left.Op != ssaop.OpLsh8x8 {
26241 continue
26242 }
26243 y := left.Args[1]
26244 x := left.Args[0]
26245 right := v_1
26246 if right.Op != ssaop.OpRsh8Ux8 {
26247 continue
26248 }
26249 _ = right.Args[1]
26250 if x != right.Args[0] {
26251 continue
26252 }
26253 right_1 := right.Args[1]
26254 if right_1.Op != ssaop.OpSub8 {
26255 continue
26256 }
26257 _ = right_1.Args[1]
26258 right_1_0 := right_1.Args[0]
26259 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)) {
26260 continue
26261 }
26262 v.Reset(ssaop.OpRotateLeft8)
26263 v.AddArg2(x, y)
26264 return true
26265 }
26266 break
26267 }
26268
26269
26270
26271 for {
26272 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26273 right := v_0
26274 if right.Op != ssaop.OpRsh8Ux64 {
26275 continue
26276 }
26277 y := right.Args[1]
26278 x := right.Args[0]
26279 left := v_1
26280 if left.Op != ssaop.OpLsh8x64 {
26281 continue
26282 }
26283 _ = left.Args[1]
26284 if x != left.Args[0] {
26285 continue
26286 }
26287 z := left.Args[1]
26288 if z.Op != ssaop.OpSub64 {
26289 continue
26290 }
26291 _ = z.Args[1]
26292 z_0 := z.Args[0]
26293 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)) {
26294 continue
26295 }
26296 v.Reset(ssaop.OpRotateLeft8)
26297 v.AddArg2(x, z)
26298 return true
26299 }
26300 break
26301 }
26302
26303
26304
26305 for {
26306 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26307 right := v_0
26308 if right.Op != ssaop.OpRsh8Ux32 {
26309 continue
26310 }
26311 y := right.Args[1]
26312 x := right.Args[0]
26313 left := v_1
26314 if left.Op != ssaop.OpLsh8x32 {
26315 continue
26316 }
26317 _ = left.Args[1]
26318 if x != left.Args[0] {
26319 continue
26320 }
26321 z := left.Args[1]
26322 if z.Op != ssaop.OpSub32 {
26323 continue
26324 }
26325 _ = z.Args[1]
26326 z_0 := z.Args[0]
26327 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)) {
26328 continue
26329 }
26330 v.Reset(ssaop.OpRotateLeft8)
26331 v.AddArg2(x, z)
26332 return true
26333 }
26334 break
26335 }
26336
26337
26338
26339 for {
26340 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26341 right := v_0
26342 if right.Op != ssaop.OpRsh8Ux16 {
26343 continue
26344 }
26345 y := right.Args[1]
26346 x := right.Args[0]
26347 left := v_1
26348 if left.Op != ssaop.OpLsh8x16 {
26349 continue
26350 }
26351 _ = left.Args[1]
26352 if x != left.Args[0] {
26353 continue
26354 }
26355 z := left.Args[1]
26356 if z.Op != ssaop.OpSub16 {
26357 continue
26358 }
26359 _ = z.Args[1]
26360 z_0 := z.Args[0]
26361 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)) {
26362 continue
26363 }
26364 v.Reset(ssaop.OpRotateLeft8)
26365 v.AddArg2(x, z)
26366 return true
26367 }
26368 break
26369 }
26370
26371
26372
26373 for {
26374 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26375 right := v_0
26376 if right.Op != ssaop.OpRsh8Ux8 {
26377 continue
26378 }
26379 y := right.Args[1]
26380 x := right.Args[0]
26381 left := v_1
26382 if left.Op != ssaop.OpLsh8x8 {
26383 continue
26384 }
26385 _ = left.Args[1]
26386 if x != left.Args[0] {
26387 continue
26388 }
26389 z := left.Args[1]
26390 if z.Op != ssaop.OpSub8 {
26391 continue
26392 }
26393 _ = z.Args[1]
26394 z_0 := z.Args[0]
26395 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)) {
26396 continue
26397 }
26398 v.Reset(ssaop.OpRotateLeft8)
26399 v.AddArg2(x, z)
26400 return true
26401 }
26402 break
26403 }
26404 return false
26405 }
26406 func rewriteValue_OpOrB(v *ssa.Value) bool {
26407 v_1 := v.Args[1]
26408 v_0 := v.Args[0]
26409 b := v.Block
26410 typ := &b.Func.Config.Types
26411
26412
26413 for {
26414 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26415 if v_0.Op != ssaop.OpConstBool {
26416 continue
26417 }
26418 c := ssa.AuxIntToBool(v_0.AuxInt)
26419 if v_1.Op != ssaop.OpConstBool {
26420 continue
26421 }
26422 d := ssa.AuxIntToBool(v_1.AuxInt)
26423 v.Reset(ssaop.OpConstBool)
26424 v.AuxInt = ssa.BoolToAuxInt(c || d)
26425 return true
26426 }
26427 break
26428 }
26429
26430
26431
26432 for {
26433 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26434 if v_0.Op != ssaop.OpLess64 {
26435 continue
26436 }
26437 x := v_0.Args[1]
26438 v_0_0 := v_0.Args[0]
26439 if v_0_0.Op != ssaop.OpConst64 {
26440 continue
26441 }
26442 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26443 if v_1.Op != ssaop.OpLess64 {
26444 continue
26445 }
26446 _ = v_1.Args[1]
26447 if x != v_1.Args[0] {
26448 continue
26449 }
26450 v_1_1 := v_1.Args[1]
26451 if v_1_1.Op != ssaop.OpConst64 {
26452 continue
26453 }
26454 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26455 if !(c >= d) {
26456 continue
26457 }
26458 v.Reset(ssaop.OpLess64U)
26459 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26460 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
26461 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26462 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26463 v2.AuxInt = ssa.Int64ToAuxInt(d)
26464 v1.AddArg2(x, v2)
26465 v.AddArg2(v0, v1)
26466 return true
26467 }
26468 break
26469 }
26470
26471
26472
26473 for {
26474 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26475 if v_0.Op != ssaop.OpLeq64 {
26476 continue
26477 }
26478 x := v_0.Args[1]
26479 v_0_0 := v_0.Args[0]
26480 if v_0_0.Op != ssaop.OpConst64 {
26481 continue
26482 }
26483 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26484 if v_1.Op != ssaop.OpLess64 {
26485 continue
26486 }
26487 _ = v_1.Args[1]
26488 if x != v_1.Args[0] {
26489 continue
26490 }
26491 v_1_1 := v_1.Args[1]
26492 if v_1_1.Op != ssaop.OpConst64 {
26493 continue
26494 }
26495 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26496 if !(c >= d) {
26497 continue
26498 }
26499 v.Reset(ssaop.OpLeq64U)
26500 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26501 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
26502 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26503 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26504 v2.AuxInt = ssa.Int64ToAuxInt(d)
26505 v1.AddArg2(x, v2)
26506 v.AddArg2(v0, v1)
26507 return true
26508 }
26509 break
26510 }
26511
26512
26513
26514 for {
26515 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26516 if v_0.Op != ssaop.OpLess32 {
26517 continue
26518 }
26519 x := v_0.Args[1]
26520 v_0_0 := v_0.Args[0]
26521 if v_0_0.Op != ssaop.OpConst32 {
26522 continue
26523 }
26524 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26525 if v_1.Op != ssaop.OpLess32 {
26526 continue
26527 }
26528 _ = v_1.Args[1]
26529 if x != v_1.Args[0] {
26530 continue
26531 }
26532 v_1_1 := v_1.Args[1]
26533 if v_1_1.Op != ssaop.OpConst32 {
26534 continue
26535 }
26536 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26537 if !(c >= d) {
26538 continue
26539 }
26540 v.Reset(ssaop.OpLess32U)
26541 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26542 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
26543 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26544 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26545 v2.AuxInt = ssa.Int32ToAuxInt(d)
26546 v1.AddArg2(x, v2)
26547 v.AddArg2(v0, v1)
26548 return true
26549 }
26550 break
26551 }
26552
26553
26554
26555 for {
26556 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26557 if v_0.Op != ssaop.OpLeq32 {
26558 continue
26559 }
26560 x := v_0.Args[1]
26561 v_0_0 := v_0.Args[0]
26562 if v_0_0.Op != ssaop.OpConst32 {
26563 continue
26564 }
26565 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26566 if v_1.Op != ssaop.OpLess32 {
26567 continue
26568 }
26569 _ = v_1.Args[1]
26570 if x != v_1.Args[0] {
26571 continue
26572 }
26573 v_1_1 := v_1.Args[1]
26574 if v_1_1.Op != ssaop.OpConst32 {
26575 continue
26576 }
26577 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26578 if !(c >= d) {
26579 continue
26580 }
26581 v.Reset(ssaop.OpLeq32U)
26582 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26583 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
26584 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26585 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26586 v2.AuxInt = ssa.Int32ToAuxInt(d)
26587 v1.AddArg2(x, v2)
26588 v.AddArg2(v0, v1)
26589 return true
26590 }
26591 break
26592 }
26593
26594
26595
26596 for {
26597 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26598 if v_0.Op != ssaop.OpLess16 {
26599 continue
26600 }
26601 x := v_0.Args[1]
26602 v_0_0 := v_0.Args[0]
26603 if v_0_0.Op != ssaop.OpConst16 {
26604 continue
26605 }
26606 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26607 if v_1.Op != ssaop.OpLess16 {
26608 continue
26609 }
26610 _ = v_1.Args[1]
26611 if x != v_1.Args[0] {
26612 continue
26613 }
26614 v_1_1 := v_1.Args[1]
26615 if v_1_1.Op != ssaop.OpConst16 {
26616 continue
26617 }
26618 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26619 if !(c >= d) {
26620 continue
26621 }
26622 v.Reset(ssaop.OpLess16U)
26623 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26624 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
26625 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26626 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26627 v2.AuxInt = ssa.Int16ToAuxInt(d)
26628 v1.AddArg2(x, v2)
26629 v.AddArg2(v0, v1)
26630 return true
26631 }
26632 break
26633 }
26634
26635
26636
26637 for {
26638 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26639 if v_0.Op != ssaop.OpLeq16 {
26640 continue
26641 }
26642 x := v_0.Args[1]
26643 v_0_0 := v_0.Args[0]
26644 if v_0_0.Op != ssaop.OpConst16 {
26645 continue
26646 }
26647 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26648 if v_1.Op != ssaop.OpLess16 {
26649 continue
26650 }
26651 _ = v_1.Args[1]
26652 if x != v_1.Args[0] {
26653 continue
26654 }
26655 v_1_1 := v_1.Args[1]
26656 if v_1_1.Op != ssaop.OpConst16 {
26657 continue
26658 }
26659 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26660 if !(c >= d) {
26661 continue
26662 }
26663 v.Reset(ssaop.OpLeq16U)
26664 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26665 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
26666 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26667 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26668 v2.AuxInt = ssa.Int16ToAuxInt(d)
26669 v1.AddArg2(x, v2)
26670 v.AddArg2(v0, v1)
26671 return true
26672 }
26673 break
26674 }
26675
26676
26677
26678 for {
26679 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26680 if v_0.Op != ssaop.OpLess8 {
26681 continue
26682 }
26683 x := v_0.Args[1]
26684 v_0_0 := v_0.Args[0]
26685 if v_0_0.Op != ssaop.OpConst8 {
26686 continue
26687 }
26688 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
26689 if v_1.Op != ssaop.OpLess8 {
26690 continue
26691 }
26692 _ = v_1.Args[1]
26693 if x != v_1.Args[0] {
26694 continue
26695 }
26696 v_1_1 := v_1.Args[1]
26697 if v_1_1.Op != ssaop.OpConst8 {
26698 continue
26699 }
26700 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
26701 if !(c >= d) {
26702 continue
26703 }
26704 v.Reset(ssaop.OpLess8U)
26705 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26706 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
26707 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
26708 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26709 v2.AuxInt = ssa.Int8ToAuxInt(d)
26710 v1.AddArg2(x, v2)
26711 v.AddArg2(v0, v1)
26712 return true
26713 }
26714 break
26715 }
26716
26717
26718
26719 for {
26720 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26721 if v_0.Op != ssaop.OpLeq8 {
26722 continue
26723 }
26724 x := v_0.Args[1]
26725 v_0_0 := v_0.Args[0]
26726 if v_0_0.Op != ssaop.OpConst8 {
26727 continue
26728 }
26729 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
26730 if v_1.Op != ssaop.OpLess8 {
26731 continue
26732 }
26733 _ = v_1.Args[1]
26734 if x != v_1.Args[0] {
26735 continue
26736 }
26737 v_1_1 := v_1.Args[1]
26738 if v_1_1.Op != ssaop.OpConst8 {
26739 continue
26740 }
26741 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
26742 if !(c >= d) {
26743 continue
26744 }
26745 v.Reset(ssaop.OpLeq8U)
26746 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26747 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
26748 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
26749 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26750 v2.AuxInt = ssa.Int8ToAuxInt(d)
26751 v1.AddArg2(x, v2)
26752 v.AddArg2(v0, v1)
26753 return true
26754 }
26755 break
26756 }
26757
26758
26759
26760 for {
26761 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26762 if v_0.Op != ssaop.OpLess64 {
26763 continue
26764 }
26765 x := v_0.Args[1]
26766 v_0_0 := v_0.Args[0]
26767 if v_0_0.Op != ssaop.OpConst64 {
26768 continue
26769 }
26770 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26771 if v_1.Op != ssaop.OpLeq64 {
26772 continue
26773 }
26774 _ = v_1.Args[1]
26775 if x != v_1.Args[0] {
26776 continue
26777 }
26778 v_1_1 := v_1.Args[1]
26779 if v_1_1.Op != ssaop.OpConst64 {
26780 continue
26781 }
26782 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26783 if !(c >= d+1 && d+1 > d) {
26784 continue
26785 }
26786 v.Reset(ssaop.OpLess64U)
26787 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26788 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
26789 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26790 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26791 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
26792 v1.AddArg2(x, v2)
26793 v.AddArg2(v0, v1)
26794 return true
26795 }
26796 break
26797 }
26798
26799
26800
26801 for {
26802 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26803 if v_0.Op != ssaop.OpLeq64 {
26804 continue
26805 }
26806 x := v_0.Args[1]
26807 v_0_0 := v_0.Args[0]
26808 if v_0_0.Op != ssaop.OpConst64 {
26809 continue
26810 }
26811 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26812 if v_1.Op != ssaop.OpLeq64 {
26813 continue
26814 }
26815 _ = v_1.Args[1]
26816 if x != v_1.Args[0] {
26817 continue
26818 }
26819 v_1_1 := v_1.Args[1]
26820 if v_1_1.Op != ssaop.OpConst64 {
26821 continue
26822 }
26823 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26824 if !(c >= d+1 && d+1 > d) {
26825 continue
26826 }
26827 v.Reset(ssaop.OpLeq64U)
26828 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26829 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
26830 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26831 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26832 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
26833 v1.AddArg2(x, v2)
26834 v.AddArg2(v0, v1)
26835 return true
26836 }
26837 break
26838 }
26839
26840
26841
26842 for {
26843 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26844 if v_0.Op != ssaop.OpLess32 {
26845 continue
26846 }
26847 x := v_0.Args[1]
26848 v_0_0 := v_0.Args[0]
26849 if v_0_0.Op != ssaop.OpConst32 {
26850 continue
26851 }
26852 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26853 if v_1.Op != ssaop.OpLeq32 {
26854 continue
26855 }
26856 _ = v_1.Args[1]
26857 if x != v_1.Args[0] {
26858 continue
26859 }
26860 v_1_1 := v_1.Args[1]
26861 if v_1_1.Op != ssaop.OpConst32 {
26862 continue
26863 }
26864 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26865 if !(c >= d+1 && d+1 > d) {
26866 continue
26867 }
26868 v.Reset(ssaop.OpLess32U)
26869 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26870 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
26871 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26872 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26873 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
26874 v1.AddArg2(x, v2)
26875 v.AddArg2(v0, v1)
26876 return true
26877 }
26878 break
26879 }
26880
26881
26882
26883 for {
26884 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26885 if v_0.Op != ssaop.OpLeq32 {
26886 continue
26887 }
26888 x := v_0.Args[1]
26889 v_0_0 := v_0.Args[0]
26890 if v_0_0.Op != ssaop.OpConst32 {
26891 continue
26892 }
26893 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26894 if v_1.Op != ssaop.OpLeq32 {
26895 continue
26896 }
26897 _ = v_1.Args[1]
26898 if x != v_1.Args[0] {
26899 continue
26900 }
26901 v_1_1 := v_1.Args[1]
26902 if v_1_1.Op != ssaop.OpConst32 {
26903 continue
26904 }
26905 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26906 if !(c >= d+1 && d+1 > d) {
26907 continue
26908 }
26909 v.Reset(ssaop.OpLeq32U)
26910 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26911 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
26912 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26913 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26914 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
26915 v1.AddArg2(x, v2)
26916 v.AddArg2(v0, v1)
26917 return true
26918 }
26919 break
26920 }
26921
26922
26923
26924 for {
26925 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26926 if v_0.Op != ssaop.OpLess16 {
26927 continue
26928 }
26929 x := v_0.Args[1]
26930 v_0_0 := v_0.Args[0]
26931 if v_0_0.Op != ssaop.OpConst16 {
26932 continue
26933 }
26934 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26935 if v_1.Op != ssaop.OpLeq16 {
26936 continue
26937 }
26938 _ = v_1.Args[1]
26939 if x != v_1.Args[0] {
26940 continue
26941 }
26942 v_1_1 := v_1.Args[1]
26943 if v_1_1.Op != ssaop.OpConst16 {
26944 continue
26945 }
26946 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26947 if !(c >= d+1 && d+1 > d) {
26948 continue
26949 }
26950 v.Reset(ssaop.OpLess16U)
26951 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26952 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
26953 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26954 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26955 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
26956 v1.AddArg2(x, v2)
26957 v.AddArg2(v0, v1)
26958 return true
26959 }
26960 break
26961 }
26962
26963
26964
26965 for {
26966 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26967 if v_0.Op != ssaop.OpLeq16 {
26968 continue
26969 }
26970 x := v_0.Args[1]
26971 v_0_0 := v_0.Args[0]
26972 if v_0_0.Op != ssaop.OpConst16 {
26973 continue
26974 }
26975 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26976 if v_1.Op != ssaop.OpLeq16 {
26977 continue
26978 }
26979 _ = v_1.Args[1]
26980 if x != v_1.Args[0] {
26981 continue
26982 }
26983 v_1_1 := v_1.Args[1]
26984 if v_1_1.Op != ssaop.OpConst16 {
26985 continue
26986 }
26987 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26988 if !(c >= d+1 && d+1 > d) {
26989 continue
26990 }
26991 v.Reset(ssaop.OpLeq16U)
26992 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26993 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
26994 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26995 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26996 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
26997 v1.AddArg2(x, v2)
26998 v.AddArg2(v0, v1)
26999 return true
27000 }
27001 break
27002 }
27003
27004
27005
27006 for {
27007 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27008 if v_0.Op != ssaop.OpLess8 {
27009 continue
27010 }
27011 x := v_0.Args[1]
27012 v_0_0 := v_0.Args[0]
27013 if v_0_0.Op != ssaop.OpConst8 {
27014 continue
27015 }
27016 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27017 if v_1.Op != ssaop.OpLeq8 {
27018 continue
27019 }
27020 _ = v_1.Args[1]
27021 if x != v_1.Args[0] {
27022 continue
27023 }
27024 v_1_1 := v_1.Args[1]
27025 if v_1_1.Op != ssaop.OpConst8 {
27026 continue
27027 }
27028 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27029 if !(c >= d+1 && d+1 > d) {
27030 continue
27031 }
27032 v.Reset(ssaop.OpLess8U)
27033 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27034 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27035 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27036 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27037 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27038 v1.AddArg2(x, v2)
27039 v.AddArg2(v0, v1)
27040 return true
27041 }
27042 break
27043 }
27044
27045
27046
27047 for {
27048 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27049 if v_0.Op != ssaop.OpLeq8 {
27050 continue
27051 }
27052 x := v_0.Args[1]
27053 v_0_0 := v_0.Args[0]
27054 if v_0_0.Op != ssaop.OpConst8 {
27055 continue
27056 }
27057 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27058 if v_1.Op != ssaop.OpLeq8 {
27059 continue
27060 }
27061 _ = v_1.Args[1]
27062 if x != v_1.Args[0] {
27063 continue
27064 }
27065 v_1_1 := v_1.Args[1]
27066 if v_1_1.Op != ssaop.OpConst8 {
27067 continue
27068 }
27069 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27070 if !(c >= d+1 && d+1 > d) {
27071 continue
27072 }
27073 v.Reset(ssaop.OpLeq8U)
27074 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27075 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27076 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27077 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27078 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27079 v1.AddArg2(x, v2)
27080 v.AddArg2(v0, v1)
27081 return true
27082 }
27083 break
27084 }
27085
27086
27087
27088 for {
27089 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27090 if v_0.Op != ssaop.OpLess64U {
27091 continue
27092 }
27093 x := v_0.Args[1]
27094 v_0_0 := v_0.Args[0]
27095 if v_0_0.Op != ssaop.OpConst64 {
27096 continue
27097 }
27098 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27099 if v_1.Op != ssaop.OpLess64U {
27100 continue
27101 }
27102 _ = v_1.Args[1]
27103 if x != v_1.Args[0] {
27104 continue
27105 }
27106 v_1_1 := v_1.Args[1]
27107 if v_1_1.Op != ssaop.OpConst64 {
27108 continue
27109 }
27110 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27111 if !(uint64(c) >= uint64(d)) {
27112 continue
27113 }
27114 v.Reset(ssaop.OpLess64U)
27115 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27116 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
27117 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27118 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27119 v2.AuxInt = ssa.Int64ToAuxInt(d)
27120 v1.AddArg2(x, v2)
27121 v.AddArg2(v0, v1)
27122 return true
27123 }
27124 break
27125 }
27126
27127
27128
27129 for {
27130 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27131 if v_0.Op != ssaop.OpLeq64U {
27132 continue
27133 }
27134 x := v_0.Args[1]
27135 v_0_0 := v_0.Args[0]
27136 if v_0_0.Op != ssaop.OpConst64 {
27137 continue
27138 }
27139 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27140 if v_1.Op != ssaop.OpLess64U {
27141 continue
27142 }
27143 _ = v_1.Args[1]
27144 if x != v_1.Args[0] {
27145 continue
27146 }
27147 v_1_1 := v_1.Args[1]
27148 if v_1_1.Op != ssaop.OpConst64 {
27149 continue
27150 }
27151 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27152 if !(uint64(c) >= uint64(d)) {
27153 continue
27154 }
27155 v.Reset(ssaop.OpLeq64U)
27156 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27157 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
27158 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27159 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27160 v2.AuxInt = ssa.Int64ToAuxInt(d)
27161 v1.AddArg2(x, v2)
27162 v.AddArg2(v0, v1)
27163 return true
27164 }
27165 break
27166 }
27167
27168
27169
27170 for {
27171 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27172 if v_0.Op != ssaop.OpLess32U {
27173 continue
27174 }
27175 x := v_0.Args[1]
27176 v_0_0 := v_0.Args[0]
27177 if v_0_0.Op != ssaop.OpConst32 {
27178 continue
27179 }
27180 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27181 if v_1.Op != ssaop.OpLess32U {
27182 continue
27183 }
27184 _ = v_1.Args[1]
27185 if x != v_1.Args[0] {
27186 continue
27187 }
27188 v_1_1 := v_1.Args[1]
27189 if v_1_1.Op != ssaop.OpConst32 {
27190 continue
27191 }
27192 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27193 if !(uint32(c) >= uint32(d)) {
27194 continue
27195 }
27196 v.Reset(ssaop.OpLess32U)
27197 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27198 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
27199 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27200 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27201 v2.AuxInt = ssa.Int32ToAuxInt(d)
27202 v1.AddArg2(x, v2)
27203 v.AddArg2(v0, v1)
27204 return true
27205 }
27206 break
27207 }
27208
27209
27210
27211 for {
27212 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27213 if v_0.Op != ssaop.OpLeq32U {
27214 continue
27215 }
27216 x := v_0.Args[1]
27217 v_0_0 := v_0.Args[0]
27218 if v_0_0.Op != ssaop.OpConst32 {
27219 continue
27220 }
27221 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27222 if v_1.Op != ssaop.OpLess32U {
27223 continue
27224 }
27225 _ = v_1.Args[1]
27226 if x != v_1.Args[0] {
27227 continue
27228 }
27229 v_1_1 := v_1.Args[1]
27230 if v_1_1.Op != ssaop.OpConst32 {
27231 continue
27232 }
27233 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27234 if !(uint32(c) >= uint32(d)) {
27235 continue
27236 }
27237 v.Reset(ssaop.OpLeq32U)
27238 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27239 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
27240 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27241 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27242 v2.AuxInt = ssa.Int32ToAuxInt(d)
27243 v1.AddArg2(x, v2)
27244 v.AddArg2(v0, v1)
27245 return true
27246 }
27247 break
27248 }
27249
27250
27251
27252 for {
27253 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27254 if v_0.Op != ssaop.OpLess16U {
27255 continue
27256 }
27257 x := v_0.Args[1]
27258 v_0_0 := v_0.Args[0]
27259 if v_0_0.Op != ssaop.OpConst16 {
27260 continue
27261 }
27262 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27263 if v_1.Op != ssaop.OpLess16U {
27264 continue
27265 }
27266 _ = v_1.Args[1]
27267 if x != v_1.Args[0] {
27268 continue
27269 }
27270 v_1_1 := v_1.Args[1]
27271 if v_1_1.Op != ssaop.OpConst16 {
27272 continue
27273 }
27274 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27275 if !(uint16(c) >= uint16(d)) {
27276 continue
27277 }
27278 v.Reset(ssaop.OpLess16U)
27279 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27280 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
27281 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27282 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27283 v2.AuxInt = ssa.Int16ToAuxInt(d)
27284 v1.AddArg2(x, v2)
27285 v.AddArg2(v0, v1)
27286 return true
27287 }
27288 break
27289 }
27290
27291
27292
27293 for {
27294 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27295 if v_0.Op != ssaop.OpLeq16U {
27296 continue
27297 }
27298 x := v_0.Args[1]
27299 v_0_0 := v_0.Args[0]
27300 if v_0_0.Op != ssaop.OpConst16 {
27301 continue
27302 }
27303 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27304 if v_1.Op != ssaop.OpLess16U {
27305 continue
27306 }
27307 _ = v_1.Args[1]
27308 if x != v_1.Args[0] {
27309 continue
27310 }
27311 v_1_1 := v_1.Args[1]
27312 if v_1_1.Op != ssaop.OpConst16 {
27313 continue
27314 }
27315 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27316 if !(uint16(c) >= uint16(d)) {
27317 continue
27318 }
27319 v.Reset(ssaop.OpLeq16U)
27320 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27321 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
27322 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27323 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27324 v2.AuxInt = ssa.Int16ToAuxInt(d)
27325 v1.AddArg2(x, v2)
27326 v.AddArg2(v0, v1)
27327 return true
27328 }
27329 break
27330 }
27331
27332
27333
27334 for {
27335 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27336 if v_0.Op != ssaop.OpLess8U {
27337 continue
27338 }
27339 x := v_0.Args[1]
27340 v_0_0 := v_0.Args[0]
27341 if v_0_0.Op != ssaop.OpConst8 {
27342 continue
27343 }
27344 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27345 if v_1.Op != ssaop.OpLess8U {
27346 continue
27347 }
27348 _ = v_1.Args[1]
27349 if x != v_1.Args[0] {
27350 continue
27351 }
27352 v_1_1 := v_1.Args[1]
27353 if v_1_1.Op != ssaop.OpConst8 {
27354 continue
27355 }
27356 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27357 if !(uint8(c) >= uint8(d)) {
27358 continue
27359 }
27360 v.Reset(ssaop.OpLess8U)
27361 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27362 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
27363 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27364 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27365 v2.AuxInt = ssa.Int8ToAuxInt(d)
27366 v1.AddArg2(x, v2)
27367 v.AddArg2(v0, v1)
27368 return true
27369 }
27370 break
27371 }
27372
27373
27374
27375 for {
27376 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27377 if v_0.Op != ssaop.OpLeq8U {
27378 continue
27379 }
27380 x := v_0.Args[1]
27381 v_0_0 := v_0.Args[0]
27382 if v_0_0.Op != ssaop.OpConst8 {
27383 continue
27384 }
27385 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27386 if v_1.Op != ssaop.OpLess8U {
27387 continue
27388 }
27389 _ = v_1.Args[1]
27390 if x != v_1.Args[0] {
27391 continue
27392 }
27393 v_1_1 := v_1.Args[1]
27394 if v_1_1.Op != ssaop.OpConst8 {
27395 continue
27396 }
27397 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27398 if !(uint8(c) >= uint8(d)) {
27399 continue
27400 }
27401 v.Reset(ssaop.OpLeq8U)
27402 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27403 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
27404 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27405 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27406 v2.AuxInt = ssa.Int8ToAuxInt(d)
27407 v1.AddArg2(x, v2)
27408 v.AddArg2(v0, v1)
27409 return true
27410 }
27411 break
27412 }
27413
27414
27415
27416 for {
27417 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27418 if v_0.Op != ssaop.OpLess64U {
27419 continue
27420 }
27421 x := v_0.Args[1]
27422 v_0_0 := v_0.Args[0]
27423 if v_0_0.Op != ssaop.OpConst64 {
27424 continue
27425 }
27426 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27427 if v_1.Op != ssaop.OpLeq64U {
27428 continue
27429 }
27430 _ = v_1.Args[1]
27431 if x != v_1.Args[0] {
27432 continue
27433 }
27434 v_1_1 := v_1.Args[1]
27435 if v_1_1.Op != ssaop.OpConst64 {
27436 continue
27437 }
27438 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27439 if !(uint64(c) >= uint64(d+1) && uint64(d+1) > uint64(d)) {
27440 continue
27441 }
27442 v.Reset(ssaop.OpLess64U)
27443 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27444 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
27445 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27446 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27447 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
27448 v1.AddArg2(x, v2)
27449 v.AddArg2(v0, v1)
27450 return true
27451 }
27452 break
27453 }
27454
27455
27456
27457 for {
27458 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27459 if v_0.Op != ssaop.OpLeq64U {
27460 continue
27461 }
27462 x := v_0.Args[1]
27463 v_0_0 := v_0.Args[0]
27464 if v_0_0.Op != ssaop.OpConst64 {
27465 continue
27466 }
27467 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27468 if v_1.Op != ssaop.OpLeq64U {
27469 continue
27470 }
27471 _ = v_1.Args[1]
27472 if x != v_1.Args[0] {
27473 continue
27474 }
27475 v_1_1 := v_1.Args[1]
27476 if v_1_1.Op != ssaop.OpConst64 {
27477 continue
27478 }
27479 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27480 if !(uint64(c) >= uint64(d+1) && uint64(d+1) > uint64(d)) {
27481 continue
27482 }
27483 v.Reset(ssaop.OpLeq64U)
27484 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27485 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
27486 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27487 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27488 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
27489 v1.AddArg2(x, v2)
27490 v.AddArg2(v0, v1)
27491 return true
27492 }
27493 break
27494 }
27495
27496
27497
27498 for {
27499 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27500 if v_0.Op != ssaop.OpLess32U {
27501 continue
27502 }
27503 x := v_0.Args[1]
27504 v_0_0 := v_0.Args[0]
27505 if v_0_0.Op != ssaop.OpConst32 {
27506 continue
27507 }
27508 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27509 if v_1.Op != ssaop.OpLeq32U {
27510 continue
27511 }
27512 _ = v_1.Args[1]
27513 if x != v_1.Args[0] {
27514 continue
27515 }
27516 v_1_1 := v_1.Args[1]
27517 if v_1_1.Op != ssaop.OpConst32 {
27518 continue
27519 }
27520 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27521 if !(uint32(c) >= uint32(d+1) && uint32(d+1) > uint32(d)) {
27522 continue
27523 }
27524 v.Reset(ssaop.OpLess32U)
27525 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27526 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
27527 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27528 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27529 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
27530 v1.AddArg2(x, v2)
27531 v.AddArg2(v0, v1)
27532 return true
27533 }
27534 break
27535 }
27536
27537
27538
27539 for {
27540 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27541 if v_0.Op != ssaop.OpLeq32U {
27542 continue
27543 }
27544 x := v_0.Args[1]
27545 v_0_0 := v_0.Args[0]
27546 if v_0_0.Op != ssaop.OpConst32 {
27547 continue
27548 }
27549 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27550 if v_1.Op != ssaop.OpLeq32U {
27551 continue
27552 }
27553 _ = v_1.Args[1]
27554 if x != v_1.Args[0] {
27555 continue
27556 }
27557 v_1_1 := v_1.Args[1]
27558 if v_1_1.Op != ssaop.OpConst32 {
27559 continue
27560 }
27561 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27562 if !(uint32(c) >= uint32(d+1) && uint32(d+1) > uint32(d)) {
27563 continue
27564 }
27565 v.Reset(ssaop.OpLeq32U)
27566 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27567 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
27568 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27569 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27570 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
27571 v1.AddArg2(x, v2)
27572 v.AddArg2(v0, v1)
27573 return true
27574 }
27575 break
27576 }
27577
27578
27579
27580 for {
27581 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27582 if v_0.Op != ssaop.OpLess16U {
27583 continue
27584 }
27585 x := v_0.Args[1]
27586 v_0_0 := v_0.Args[0]
27587 if v_0_0.Op != ssaop.OpConst16 {
27588 continue
27589 }
27590 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27591 if v_1.Op != ssaop.OpLeq16U {
27592 continue
27593 }
27594 _ = v_1.Args[1]
27595 if x != v_1.Args[0] {
27596 continue
27597 }
27598 v_1_1 := v_1.Args[1]
27599 if v_1_1.Op != ssaop.OpConst16 {
27600 continue
27601 }
27602 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27603 if !(uint16(c) >= uint16(d+1) && uint16(d+1) > uint16(d)) {
27604 continue
27605 }
27606 v.Reset(ssaop.OpLess16U)
27607 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27608 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
27609 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27610 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27611 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
27612 v1.AddArg2(x, v2)
27613 v.AddArg2(v0, v1)
27614 return true
27615 }
27616 break
27617 }
27618
27619
27620
27621 for {
27622 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27623 if v_0.Op != ssaop.OpLeq16U {
27624 continue
27625 }
27626 x := v_0.Args[1]
27627 v_0_0 := v_0.Args[0]
27628 if v_0_0.Op != ssaop.OpConst16 {
27629 continue
27630 }
27631 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27632 if v_1.Op != ssaop.OpLeq16U {
27633 continue
27634 }
27635 _ = v_1.Args[1]
27636 if x != v_1.Args[0] {
27637 continue
27638 }
27639 v_1_1 := v_1.Args[1]
27640 if v_1_1.Op != ssaop.OpConst16 {
27641 continue
27642 }
27643 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27644 if !(uint16(c) >= uint16(d+1) && uint16(d+1) > uint16(d)) {
27645 continue
27646 }
27647 v.Reset(ssaop.OpLeq16U)
27648 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27649 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
27650 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27651 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27652 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
27653 v1.AddArg2(x, v2)
27654 v.AddArg2(v0, v1)
27655 return true
27656 }
27657 break
27658 }
27659
27660
27661
27662 for {
27663 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27664 if v_0.Op != ssaop.OpLess8U {
27665 continue
27666 }
27667 x := v_0.Args[1]
27668 v_0_0 := v_0.Args[0]
27669 if v_0_0.Op != ssaop.OpConst8 {
27670 continue
27671 }
27672 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27673 if v_1.Op != ssaop.OpLeq8U {
27674 continue
27675 }
27676 _ = v_1.Args[1]
27677 if x != v_1.Args[0] {
27678 continue
27679 }
27680 v_1_1 := v_1.Args[1]
27681 if v_1_1.Op != ssaop.OpConst8 {
27682 continue
27683 }
27684 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27685 if !(uint8(c) >= uint8(d+1) && uint8(d+1) > uint8(d)) {
27686 continue
27687 }
27688 v.Reset(ssaop.OpLess8U)
27689 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27690 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27691 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27692 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27693 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27694 v1.AddArg2(x, v2)
27695 v.AddArg2(v0, v1)
27696 return true
27697 }
27698 break
27699 }
27700
27701
27702
27703 for {
27704 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27705 if v_0.Op != ssaop.OpLeq8U {
27706 continue
27707 }
27708 x := v_0.Args[1]
27709 v_0_0 := v_0.Args[0]
27710 if v_0_0.Op != ssaop.OpConst8 {
27711 continue
27712 }
27713 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27714 if v_1.Op != ssaop.OpLeq8U {
27715 continue
27716 }
27717 _ = v_1.Args[1]
27718 if x != v_1.Args[0] {
27719 continue
27720 }
27721 v_1_1 := v_1.Args[1]
27722 if v_1_1.Op != ssaop.OpConst8 {
27723 continue
27724 }
27725 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27726 if !(uint8(c) >= uint8(d+1) && uint8(d+1) > uint8(d)) {
27727 continue
27728 }
27729 v.Reset(ssaop.OpLeq8U)
27730 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27731 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27732 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27733 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27734 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27735 v1.AddArg2(x, v2)
27736 v.AddArg2(v0, v1)
27737 return true
27738 }
27739 break
27740 }
27741
27742
27743
27744 for {
27745 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27746 if v_0.Op != ssaop.OpEq64 {
27747 continue
27748 }
27749 _ = v_0.Args[1]
27750 v_0_0 := v_0.Args[0]
27751 v_0_1 := v_0.Args[1]
27752 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27753 x := v_0_0
27754 cv := v_0_1
27755 if cv.Op != ssaop.OpConst64 {
27756 continue
27757 }
27758 c := ssa.AuxIntToInt64(cv.AuxInt)
27759 if v_1.Op != ssaop.OpEq64 {
27760 continue
27761 }
27762 _ = v_1.Args[1]
27763 v_1_0 := v_1.Args[0]
27764 v_1_1 := v_1.Args[1]
27765 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27766 if x != v_1_0 || v_1_1.Op != ssaop.OpConst64 {
27767 continue
27768 }
27769 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27770 if !(c|d == c && ssa.OneBit(c^d)) {
27771 continue
27772 }
27773 v.Reset(ssaop.OpEq64)
27774 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, x.Type)
27775 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27776 v1.AuxInt = ssa.Int64ToAuxInt(c ^ d)
27777 v0.AddArg2(x, v1)
27778 v.AddArg2(v0, cv)
27779 return true
27780 }
27781 }
27782 }
27783 break
27784 }
27785
27786
27787
27788 for {
27789 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27790 if v_0.Op != ssaop.OpEq32 {
27791 continue
27792 }
27793 _ = v_0.Args[1]
27794 v_0_0 := v_0.Args[0]
27795 v_0_1 := v_0.Args[1]
27796 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27797 x := v_0_0
27798 cv := v_0_1
27799 if cv.Op != ssaop.OpConst32 {
27800 continue
27801 }
27802 c := ssa.AuxIntToInt32(cv.AuxInt)
27803 if v_1.Op != ssaop.OpEq32 {
27804 continue
27805 }
27806 _ = v_1.Args[1]
27807 v_1_0 := v_1.Args[0]
27808 v_1_1 := v_1.Args[1]
27809 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27810 if x != v_1_0 || v_1_1.Op != ssaop.OpConst32 {
27811 continue
27812 }
27813 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27814 if !(c|d == c && ssa.OneBit(c^d)) {
27815 continue
27816 }
27817 v.Reset(ssaop.OpEq32)
27818 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, x.Type)
27819 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27820 v1.AuxInt = ssa.Int32ToAuxInt(c ^ d)
27821 v0.AddArg2(x, v1)
27822 v.AddArg2(v0, cv)
27823 return true
27824 }
27825 }
27826 }
27827 break
27828 }
27829
27830
27831
27832 for {
27833 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27834 if v_0.Op != ssaop.OpEq16 {
27835 continue
27836 }
27837 _ = v_0.Args[1]
27838 v_0_0 := v_0.Args[0]
27839 v_0_1 := v_0.Args[1]
27840 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27841 x := v_0_0
27842 cv := v_0_1
27843 if cv.Op != ssaop.OpConst16 {
27844 continue
27845 }
27846 c := ssa.AuxIntToInt16(cv.AuxInt)
27847 if v_1.Op != ssaop.OpEq16 {
27848 continue
27849 }
27850 _ = v_1.Args[1]
27851 v_1_0 := v_1.Args[0]
27852 v_1_1 := v_1.Args[1]
27853 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27854 if x != v_1_0 || v_1_1.Op != ssaop.OpConst16 {
27855 continue
27856 }
27857 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27858 if !(c|d == c && ssa.OneBit(c^d)) {
27859 continue
27860 }
27861 v.Reset(ssaop.OpEq16)
27862 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, x.Type)
27863 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27864 v1.AuxInt = ssa.Int16ToAuxInt(c ^ d)
27865 v0.AddArg2(x, v1)
27866 v.AddArg2(v0, cv)
27867 return true
27868 }
27869 }
27870 }
27871 break
27872 }
27873
27874
27875
27876 for {
27877 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27878 if v_0.Op != ssaop.OpEq8 {
27879 continue
27880 }
27881 _ = v_0.Args[1]
27882 v_0_0 := v_0.Args[0]
27883 v_0_1 := v_0.Args[1]
27884 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27885 x := v_0_0
27886 cv := v_0_1
27887 if cv.Op != ssaop.OpConst8 {
27888 continue
27889 }
27890 c := ssa.AuxIntToInt8(cv.AuxInt)
27891 if v_1.Op != ssaop.OpEq8 {
27892 continue
27893 }
27894 _ = v_1.Args[1]
27895 v_1_0 := v_1.Args[0]
27896 v_1_1 := v_1.Args[1]
27897 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27898 if x != v_1_0 || v_1_1.Op != ssaop.OpConst8 {
27899 continue
27900 }
27901 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27902 if !(c|d == c && ssa.OneBit(c^d)) {
27903 continue
27904 }
27905 v.Reset(ssaop.OpEq8)
27906 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, x.Type)
27907 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27908 v1.AuxInt = ssa.Int8ToAuxInt(c ^ d)
27909 v0.AddArg2(x, v1)
27910 v.AddArg2(v0, cv)
27911 return true
27912 }
27913 }
27914 }
27915 break
27916 }
27917
27918
27919 for {
27920 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27921 if v_0.Op != ssaop.OpNeq64F {
27922 continue
27923 }
27924 x := v_0.Args[1]
27925 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
27926 continue
27927 }
27928 _ = v_1.Args[1]
27929 if x != v_1.Args[0] {
27930 continue
27931 }
27932 y := v_1.Args[1]
27933 if y.Op != ssaop.OpConst64F {
27934 continue
27935 }
27936 v.Reset(ssaop.OpNot)
27937 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
27938 v0.AddArg2(y, x)
27939 v.AddArg(v0)
27940 return true
27941 }
27942 break
27943 }
27944
27945
27946 for {
27947 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27948 if v_0.Op != ssaop.OpNeq64F {
27949 continue
27950 }
27951 x := v_0.Args[1]
27952 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
27953 continue
27954 }
27955 _ = v_1.Args[1]
27956 if x != v_1.Args[0] {
27957 continue
27958 }
27959 y := v_1.Args[1]
27960 if y.Op != ssaop.OpConst64F {
27961 continue
27962 }
27963 v.Reset(ssaop.OpNot)
27964 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
27965 v0.AddArg2(y, x)
27966 v.AddArg(v0)
27967 return true
27968 }
27969 break
27970 }
27971
27972
27973 for {
27974 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27975 if v_0.Op != ssaop.OpNeq64F {
27976 continue
27977 }
27978 x := v_0.Args[1]
27979 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
27980 continue
27981 }
27982 _ = v_1.Args[1]
27983 y := v_1.Args[0]
27984 if y.Op != ssaop.OpConst64F {
27985 continue
27986 }
27987 if x != v_1.Args[1] {
27988 continue
27989 }
27990 v.Reset(ssaop.OpNot)
27991 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
27992 v0.AddArg2(x, y)
27993 v.AddArg(v0)
27994 return true
27995 }
27996 break
27997 }
27998
27999
28000 for {
28001 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28002 if v_0.Op != ssaop.OpNeq64F {
28003 continue
28004 }
28005 x := v_0.Args[1]
28006 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28007 continue
28008 }
28009 _ = v_1.Args[1]
28010 y := v_1.Args[0]
28011 if y.Op != ssaop.OpConst64F {
28012 continue
28013 }
28014 if x != v_1.Args[1] {
28015 continue
28016 }
28017 v.Reset(ssaop.OpNot)
28018 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28019 v0.AddArg2(x, y)
28020 v.AddArg(v0)
28021 return true
28022 }
28023 break
28024 }
28025
28026
28027 for {
28028 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28029 if v_0.Op != ssaop.OpNeq32F {
28030 continue
28031 }
28032 x := v_0.Args[1]
28033 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28034 continue
28035 }
28036 _ = v_1.Args[1]
28037 if x != v_1.Args[0] {
28038 continue
28039 }
28040 y := v_1.Args[1]
28041 if y.Op != ssaop.OpConst32F {
28042 continue
28043 }
28044 v.Reset(ssaop.OpNot)
28045 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28046 v0.AddArg2(y, x)
28047 v.AddArg(v0)
28048 return true
28049 }
28050 break
28051 }
28052
28053
28054 for {
28055 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28056 if v_0.Op != ssaop.OpNeq32F {
28057 continue
28058 }
28059 x := v_0.Args[1]
28060 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28061 continue
28062 }
28063 _ = v_1.Args[1]
28064 if x != v_1.Args[0] {
28065 continue
28066 }
28067 y := v_1.Args[1]
28068 if y.Op != ssaop.OpConst32F {
28069 continue
28070 }
28071 v.Reset(ssaop.OpNot)
28072 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28073 v0.AddArg2(y, x)
28074 v.AddArg(v0)
28075 return true
28076 }
28077 break
28078 }
28079
28080
28081 for {
28082 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28083 if v_0.Op != ssaop.OpNeq32F {
28084 continue
28085 }
28086 x := v_0.Args[1]
28087 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28088 continue
28089 }
28090 _ = v_1.Args[1]
28091 y := v_1.Args[0]
28092 if y.Op != ssaop.OpConst32F {
28093 continue
28094 }
28095 if x != v_1.Args[1] {
28096 continue
28097 }
28098 v.Reset(ssaop.OpNot)
28099 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28100 v0.AddArg2(x, y)
28101 v.AddArg(v0)
28102 return true
28103 }
28104 break
28105 }
28106
28107
28108 for {
28109 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28110 if v_0.Op != ssaop.OpNeq32F {
28111 continue
28112 }
28113 x := v_0.Args[1]
28114 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28115 continue
28116 }
28117 _ = v_1.Args[1]
28118 y := v_1.Args[0]
28119 if y.Op != ssaop.OpConst32F {
28120 continue
28121 }
28122 if x != v_1.Args[1] {
28123 continue
28124 }
28125 v.Reset(ssaop.OpNot)
28126 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28127 v0.AddArg2(x, y)
28128 v.AddArg(v0)
28129 return true
28130 }
28131 break
28132 }
28133
28134
28135 for {
28136 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28137 if v_0.Op != ssaop.OpNeq64F {
28138 continue
28139 }
28140 x := v_0.Args[1]
28141 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28142 continue
28143 }
28144 _ = v_1.Args[1]
28145 abs := v_1.Args[0]
28146 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28147 continue
28148 }
28149 y := v_1.Args[1]
28150 if y.Op != ssaop.OpConst64F {
28151 continue
28152 }
28153 v.Reset(ssaop.OpNot)
28154 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28155 v0.AddArg2(y, abs)
28156 v.AddArg(v0)
28157 return true
28158 }
28159 break
28160 }
28161
28162
28163 for {
28164 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28165 if v_0.Op != ssaop.OpNeq64F {
28166 continue
28167 }
28168 x := v_0.Args[1]
28169 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28170 continue
28171 }
28172 _ = v_1.Args[1]
28173 abs := v_1.Args[0]
28174 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28175 continue
28176 }
28177 y := v_1.Args[1]
28178 if y.Op != ssaop.OpConst64F {
28179 continue
28180 }
28181 v.Reset(ssaop.OpNot)
28182 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28183 v0.AddArg2(y, abs)
28184 v.AddArg(v0)
28185 return true
28186 }
28187 break
28188 }
28189
28190
28191 for {
28192 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28193 if v_0.Op != ssaop.OpNeq64F {
28194 continue
28195 }
28196 x := v_0.Args[1]
28197 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28198 continue
28199 }
28200 _ = v_1.Args[1]
28201 y := v_1.Args[0]
28202 if y.Op != ssaop.OpConst64F {
28203 continue
28204 }
28205 abs := v_1.Args[1]
28206 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28207 continue
28208 }
28209 v.Reset(ssaop.OpNot)
28210 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28211 v0.AddArg2(abs, y)
28212 v.AddArg(v0)
28213 return true
28214 }
28215 break
28216 }
28217
28218
28219 for {
28220 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28221 if v_0.Op != ssaop.OpNeq64F {
28222 continue
28223 }
28224 x := v_0.Args[1]
28225 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28226 continue
28227 }
28228 _ = v_1.Args[1]
28229 y := v_1.Args[0]
28230 if y.Op != ssaop.OpConst64F {
28231 continue
28232 }
28233 abs := v_1.Args[1]
28234 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28235 continue
28236 }
28237 v.Reset(ssaop.OpNot)
28238 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28239 v0.AddArg2(abs, y)
28240 v.AddArg(v0)
28241 return true
28242 }
28243 break
28244 }
28245
28246
28247 for {
28248 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28249 if v_0.Op != ssaop.OpNeq64F {
28250 continue
28251 }
28252 x := v_0.Args[1]
28253 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28254 continue
28255 }
28256 _ = v_1.Args[1]
28257 neg := v_1.Args[0]
28258 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28259 continue
28260 }
28261 y := v_1.Args[1]
28262 if y.Op != ssaop.OpConst64F {
28263 continue
28264 }
28265 v.Reset(ssaop.OpNot)
28266 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28267 v0.AddArg2(y, neg)
28268 v.AddArg(v0)
28269 return true
28270 }
28271 break
28272 }
28273
28274
28275 for {
28276 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28277 if v_0.Op != ssaop.OpNeq64F {
28278 continue
28279 }
28280 x := v_0.Args[1]
28281 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28282 continue
28283 }
28284 _ = v_1.Args[1]
28285 neg := v_1.Args[0]
28286 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28287 continue
28288 }
28289 y := v_1.Args[1]
28290 if y.Op != ssaop.OpConst64F {
28291 continue
28292 }
28293 v.Reset(ssaop.OpNot)
28294 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28295 v0.AddArg2(y, neg)
28296 v.AddArg(v0)
28297 return true
28298 }
28299 break
28300 }
28301
28302
28303 for {
28304 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28305 if v_0.Op != ssaop.OpNeq64F {
28306 continue
28307 }
28308 x := v_0.Args[1]
28309 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28310 continue
28311 }
28312 _ = v_1.Args[1]
28313 y := v_1.Args[0]
28314 if y.Op != ssaop.OpConst64F {
28315 continue
28316 }
28317 neg := v_1.Args[1]
28318 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28319 continue
28320 }
28321 v.Reset(ssaop.OpNot)
28322 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28323 v0.AddArg2(neg, y)
28324 v.AddArg(v0)
28325 return true
28326 }
28327 break
28328 }
28329
28330
28331 for {
28332 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28333 if v_0.Op != ssaop.OpNeq64F {
28334 continue
28335 }
28336 x := v_0.Args[1]
28337 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28338 continue
28339 }
28340 _ = v_1.Args[1]
28341 y := v_1.Args[0]
28342 if y.Op != ssaop.OpConst64F {
28343 continue
28344 }
28345 neg := v_1.Args[1]
28346 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28347 continue
28348 }
28349 v.Reset(ssaop.OpNot)
28350 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28351 v0.AddArg2(neg, y)
28352 v.AddArg(v0)
28353 return true
28354 }
28355 break
28356 }
28357
28358
28359 for {
28360 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28361 if v_0.Op != ssaop.OpNeq32F {
28362 continue
28363 }
28364 x := v_0.Args[1]
28365 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28366 continue
28367 }
28368 _ = v_1.Args[1]
28369 neg := v_1.Args[0]
28370 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28371 continue
28372 }
28373 y := v_1.Args[1]
28374 if y.Op != ssaop.OpConst32F {
28375 continue
28376 }
28377 v.Reset(ssaop.OpNot)
28378 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28379 v0.AddArg2(y, neg)
28380 v.AddArg(v0)
28381 return true
28382 }
28383 break
28384 }
28385
28386
28387 for {
28388 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28389 if v_0.Op != ssaop.OpNeq32F {
28390 continue
28391 }
28392 x := v_0.Args[1]
28393 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28394 continue
28395 }
28396 _ = v_1.Args[1]
28397 neg := v_1.Args[0]
28398 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28399 continue
28400 }
28401 y := v_1.Args[1]
28402 if y.Op != ssaop.OpConst32F {
28403 continue
28404 }
28405 v.Reset(ssaop.OpNot)
28406 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28407 v0.AddArg2(y, neg)
28408 v.AddArg(v0)
28409 return true
28410 }
28411 break
28412 }
28413
28414
28415 for {
28416 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28417 if v_0.Op != ssaop.OpNeq32F {
28418 continue
28419 }
28420 x := v_0.Args[1]
28421 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28422 continue
28423 }
28424 _ = v_1.Args[1]
28425 y := v_1.Args[0]
28426 if y.Op != ssaop.OpConst32F {
28427 continue
28428 }
28429 neg := v_1.Args[1]
28430 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28431 continue
28432 }
28433 v.Reset(ssaop.OpNot)
28434 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28435 v0.AddArg2(neg, y)
28436 v.AddArg(v0)
28437 return true
28438 }
28439 break
28440 }
28441
28442
28443 for {
28444 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28445 if v_0.Op != ssaop.OpNeq32F {
28446 continue
28447 }
28448 x := v_0.Args[1]
28449 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28450 continue
28451 }
28452 _ = v_1.Args[1]
28453 y := v_1.Args[0]
28454 if y.Op != ssaop.OpConst32F {
28455 continue
28456 }
28457 neg := v_1.Args[1]
28458 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28459 continue
28460 }
28461 v.Reset(ssaop.OpNot)
28462 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28463 v0.AddArg2(neg, y)
28464 v.AddArg(v0)
28465 return true
28466 }
28467 break
28468 }
28469
28470
28471 for {
28472 x := v_0
28473 if x != v_1 {
28474 break
28475 }
28476 v.CopyOf(x)
28477 return true
28478 }
28479
28480
28481 for {
28482 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28483 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
28484 continue
28485 }
28486 x := v_1
28487 v.CopyOf(x)
28488 return true
28489 }
28490 break
28491 }
28492
28493
28494 for {
28495 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28496 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
28497 continue
28498 }
28499 v.Reset(ssaop.OpConstBool)
28500 v.AuxInt = ssa.BoolToAuxInt(true)
28501 return true
28502 }
28503 break
28504 }
28505 return false
28506 }
28507 func rewriteValue_OpPhi(v *ssa.Value) bool {
28508 b := v.Block
28509
28510
28511 for {
28512 if len(v.Args) != 2 {
28513 break
28514 }
28515 _ = v.Args[1]
28516 v_0 := v.Args[0]
28517 if v_0.Op != ssaop.OpConst8 {
28518 break
28519 }
28520 c := ssa.AuxIntToInt8(v_0.AuxInt)
28521 v_1 := v.Args[1]
28522 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != c {
28523 break
28524 }
28525 v.Reset(ssaop.OpConst8)
28526 v.AuxInt = ssa.Int8ToAuxInt(c)
28527 return true
28528 }
28529
28530
28531 for {
28532 if len(v.Args) != 2 {
28533 break
28534 }
28535 _ = v.Args[1]
28536 v_0 := v.Args[0]
28537 if v_0.Op != ssaop.OpConst16 {
28538 break
28539 }
28540 c := ssa.AuxIntToInt16(v_0.AuxInt)
28541 v_1 := v.Args[1]
28542 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != c {
28543 break
28544 }
28545 v.Reset(ssaop.OpConst16)
28546 v.AuxInt = ssa.Int16ToAuxInt(c)
28547 return true
28548 }
28549
28550
28551 for {
28552 if len(v.Args) != 2 {
28553 break
28554 }
28555 _ = v.Args[1]
28556 v_0 := v.Args[0]
28557 if v_0.Op != ssaop.OpConst32 {
28558 break
28559 }
28560 c := ssa.AuxIntToInt32(v_0.AuxInt)
28561 v_1 := v.Args[1]
28562 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != c {
28563 break
28564 }
28565 v.Reset(ssaop.OpConst32)
28566 v.AuxInt = ssa.Int32ToAuxInt(c)
28567 return true
28568 }
28569
28570
28571 for {
28572 if len(v.Args) != 2 {
28573 break
28574 }
28575 _ = v.Args[1]
28576 v_0 := v.Args[0]
28577 if v_0.Op != ssaop.OpConst64 {
28578 break
28579 }
28580 c := ssa.AuxIntToInt64(v_0.AuxInt)
28581 v_1 := v.Args[1]
28582 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c {
28583 break
28584 }
28585 v.Reset(ssaop.OpConst64)
28586 v.AuxInt = ssa.Int64ToAuxInt(c)
28587 return true
28588 }
28589
28590
28591
28592 for {
28593 if len(v.Args) != 2 {
28594 break
28595 }
28596 t := v.Type
28597 _ = v.Args[1]
28598 nx := v.Args[0]
28599 if nx.Op != ssaop.OpNot {
28600 break
28601 }
28602 x := nx.Args[0]
28603 ny := v.Args[1]
28604 if ny.Op != ssaop.OpNot {
28605 break
28606 }
28607 y := ny.Args[0]
28608 if !(nx.Uses == 1 && ny.Uses == 1) {
28609 break
28610 }
28611 v.Reset(ssaop.OpNot)
28612 v0 := b.NewValue0(v.Pos, ssaop.OpPhi, t)
28613 v0.AddArg2(x, y)
28614 v.AddArg(v0)
28615 return true
28616 }
28617 return false
28618 }
28619 func rewriteValue_OpPopCount16(v *ssa.Value) bool {
28620 v_0 := v.Args[0]
28621 b := v.Block
28622 config := b.Func.Config
28623
28624
28625
28626 for {
28627 if v_0.Op != ssaop.OpConst16 {
28628 break
28629 }
28630 c := ssa.AuxIntToInt16(v_0.AuxInt)
28631 if !(config.PtrSize == 8) {
28632 break
28633 }
28634 v.Reset(ssaop.OpConst64)
28635 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount16(uint16(c))))
28636 return true
28637 }
28638
28639
28640
28641 for {
28642 if v_0.Op != ssaop.OpConst16 {
28643 break
28644 }
28645 c := ssa.AuxIntToInt16(v_0.AuxInt)
28646 if !(config.PtrSize == 4) {
28647 break
28648 }
28649 v.Reset(ssaop.OpConst32)
28650 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount16(uint16(c))))
28651 return true
28652 }
28653 return false
28654 }
28655 func rewriteValue_OpPopCount32(v *ssa.Value) bool {
28656 v_0 := v.Args[0]
28657 b := v.Block
28658 config := b.Func.Config
28659
28660
28661
28662 for {
28663 if v_0.Op != ssaop.OpConst32 {
28664 break
28665 }
28666 c := ssa.AuxIntToInt32(v_0.AuxInt)
28667 if !(config.PtrSize == 8) {
28668 break
28669 }
28670 v.Reset(ssaop.OpConst64)
28671 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount32(uint32(c))))
28672 return true
28673 }
28674
28675
28676
28677 for {
28678 if v_0.Op != ssaop.OpConst32 {
28679 break
28680 }
28681 c := ssa.AuxIntToInt32(v_0.AuxInt)
28682 if !(config.PtrSize == 4) {
28683 break
28684 }
28685 v.Reset(ssaop.OpConst32)
28686 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount32(uint32(c))))
28687 return true
28688 }
28689 return false
28690 }
28691 func rewriteValue_OpPopCount64(v *ssa.Value) bool {
28692 v_0 := v.Args[0]
28693 b := v.Block
28694 config := b.Func.Config
28695
28696
28697
28698 for {
28699 if v_0.Op != ssaop.OpConst64 {
28700 break
28701 }
28702 c := ssa.AuxIntToInt64(v_0.AuxInt)
28703 if !(config.PtrSize == 8) {
28704 break
28705 }
28706 v.Reset(ssaop.OpConst64)
28707 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount64(uint64(c))))
28708 return true
28709 }
28710
28711
28712
28713 for {
28714 if v_0.Op != ssaop.OpConst64 {
28715 break
28716 }
28717 c := ssa.AuxIntToInt64(v_0.AuxInt)
28718 if !(config.PtrSize == 4) {
28719 break
28720 }
28721 v.Reset(ssaop.OpConst32)
28722 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount64(uint64(c))))
28723 return true
28724 }
28725 return false
28726 }
28727 func rewriteValue_OpPopCount8(v *ssa.Value) bool {
28728 v_0 := v.Args[0]
28729 b := v.Block
28730 config := b.Func.Config
28731
28732
28733
28734 for {
28735 if v_0.Op != ssaop.OpConst8 {
28736 break
28737 }
28738 c := ssa.AuxIntToInt8(v_0.AuxInt)
28739 if !(config.PtrSize == 8) {
28740 break
28741 }
28742 v.Reset(ssaop.OpConst64)
28743 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount8(uint8(c))))
28744 return true
28745 }
28746
28747
28748
28749 for {
28750 if v_0.Op != ssaop.OpConst8 {
28751 break
28752 }
28753 c := ssa.AuxIntToInt8(v_0.AuxInt)
28754 if !(config.PtrSize == 4) {
28755 break
28756 }
28757 v.Reset(ssaop.OpConst32)
28758 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount8(uint8(c))))
28759 return true
28760 }
28761 return false
28762 }
28763 func rewriteValue_OpPtrIndex(v *ssa.Value) bool {
28764 v_1 := v.Args[1]
28765 v_0 := v.Args[0]
28766 b := v.Block
28767 config := b.Func.Config
28768 typ := &b.Func.Config.Types
28769
28770
28771
28772 for {
28773 t := v.Type
28774 ptr := v_0
28775 idx := v_1
28776 if !(config.PtrSize == 4 && ssa.Is32Bit(t.Elem().Size())) {
28777 break
28778 }
28779 v.Reset(ssaop.OpAddPtr)
28780 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, typ.Int)
28781 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int)
28782 v1.AuxInt = ssa.Int32ToAuxInt(int32(t.Elem().Size()))
28783 v0.AddArg2(idx, v1)
28784 v.AddArg2(ptr, v0)
28785 return true
28786 }
28787
28788
28789
28790 for {
28791 t := v.Type
28792 ptr := v_0
28793 idx := v_1
28794 if !(config.PtrSize == 8) {
28795 break
28796 }
28797 v.Reset(ssaop.OpAddPtr)
28798 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, typ.Int)
28799 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int)
28800 v1.AuxInt = ssa.Int64ToAuxInt(t.Elem().Size())
28801 v0.AddArg2(idx, v1)
28802 v.AddArg2(ptr, v0)
28803 return true
28804 }
28805 return false
28806 }
28807 func rewriteValue_OpRotateLeft16(v *ssa.Value) bool {
28808 v_1 := v.Args[1]
28809 v_0 := v.Args[0]
28810 b := v.Block
28811 config := b.Func.Config
28812 typ := &b.Func.Config.Types
28813
28814
28815 for {
28816 if v_0.Op != ssaop.OpConst16 {
28817 break
28818 }
28819 x := ssa.AuxIntToInt16(v_0.AuxInt)
28820 if v_1.Op != ssaop.OpConst64 {
28821 break
28822 }
28823 y := ssa.AuxIntToInt64(v_1.AuxInt)
28824 v.Reset(ssaop.OpConst16)
28825 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.RotateLeft16(uint16(x), int(y))))
28826 return true
28827 }
28828
28829
28830 for {
28831 if v_0.Op != ssaop.OpConst16 {
28832 break
28833 }
28834 x := ssa.AuxIntToInt16(v_0.AuxInt)
28835 if v_1.Op != ssaop.OpConst32 {
28836 break
28837 }
28838 y := ssa.AuxIntToInt32(v_1.AuxInt)
28839 v.Reset(ssaop.OpConst16)
28840 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.RotateLeft16(uint16(x), int(y))))
28841 return true
28842 }
28843
28844
28845
28846 for {
28847 x := v_0
28848 if v_1.Op != ssaop.OpConst16 {
28849 break
28850 }
28851 c := ssa.AuxIntToInt16(v_1.AuxInt)
28852 if !(c%16 == 0) {
28853 break
28854 }
28855 v.CopyOf(x)
28856 return true
28857 }
28858
28859
28860
28861 for {
28862 x := v_0
28863 if v_1.Op != ssaop.OpAnd64 {
28864 break
28865 }
28866 _ = v_1.Args[1]
28867 v_1_0 := v_1.Args[0]
28868 v_1_1 := v_1.Args[1]
28869 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28870 y := v_1_0
28871 if v_1_1.Op != ssaop.OpConst64 {
28872 continue
28873 }
28874 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
28875 if !(c&15 == 15) {
28876 continue
28877 }
28878 v.Reset(ssaop.OpRotateLeft16)
28879 v.AddArg2(x, y)
28880 return true
28881 }
28882 break
28883 }
28884
28885
28886
28887 for {
28888 x := v_0
28889 if v_1.Op != ssaop.OpAnd32 {
28890 break
28891 }
28892 _ = v_1.Args[1]
28893 v_1_0 := v_1.Args[0]
28894 v_1_1 := v_1.Args[1]
28895 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28896 y := v_1_0
28897 if v_1_1.Op != ssaop.OpConst32 {
28898 continue
28899 }
28900 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
28901 if !(c&15 == 15) {
28902 continue
28903 }
28904 v.Reset(ssaop.OpRotateLeft16)
28905 v.AddArg2(x, y)
28906 return true
28907 }
28908 break
28909 }
28910
28911
28912
28913 for {
28914 x := v_0
28915 if v_1.Op != ssaop.OpAnd16 {
28916 break
28917 }
28918 _ = v_1.Args[1]
28919 v_1_0 := v_1.Args[0]
28920 v_1_1 := v_1.Args[1]
28921 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28922 y := v_1_0
28923 if v_1_1.Op != ssaop.OpConst16 {
28924 continue
28925 }
28926 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
28927 if !(c&15 == 15) {
28928 continue
28929 }
28930 v.Reset(ssaop.OpRotateLeft16)
28931 v.AddArg2(x, y)
28932 return true
28933 }
28934 break
28935 }
28936
28937
28938
28939 for {
28940 x := v_0
28941 if v_1.Op != ssaop.OpAnd8 {
28942 break
28943 }
28944 _ = v_1.Args[1]
28945 v_1_0 := v_1.Args[0]
28946 v_1_1 := v_1.Args[1]
28947 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28948 y := v_1_0
28949 if v_1_1.Op != ssaop.OpConst8 {
28950 continue
28951 }
28952 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
28953 if !(c&15 == 15) {
28954 continue
28955 }
28956 v.Reset(ssaop.OpRotateLeft16)
28957 v.AddArg2(x, y)
28958 return true
28959 }
28960 break
28961 }
28962
28963
28964
28965 for {
28966 x := v_0
28967 if v_1.Op != ssaop.OpNeg64 {
28968 break
28969 }
28970 v_1_0 := v_1.Args[0]
28971 if v_1_0.Op != ssaop.OpAnd64 {
28972 break
28973 }
28974 _ = v_1_0.Args[1]
28975 v_1_0_0 := v_1_0.Args[0]
28976 v_1_0_1 := v_1_0.Args[1]
28977 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
28978 y := v_1_0_0
28979 if v_1_0_1.Op != ssaop.OpConst64 {
28980 continue
28981 }
28982 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
28983 if !(c&15 == 15) {
28984 continue
28985 }
28986 v.Reset(ssaop.OpRotateLeft16)
28987 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
28988 v0.AddArg(y)
28989 v.AddArg2(x, v0)
28990 return true
28991 }
28992 break
28993 }
28994
28995
28996
28997 for {
28998 x := v_0
28999 if v_1.Op != ssaop.OpNeg32 {
29000 break
29001 }
29002 v_1_0 := v_1.Args[0]
29003 if v_1_0.Op != ssaop.OpAnd32 {
29004 break
29005 }
29006 _ = v_1_0.Args[1]
29007 v_1_0_0 := v_1_0.Args[0]
29008 v_1_0_1 := v_1_0.Args[1]
29009 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29010 y := v_1_0_0
29011 if v_1_0_1.Op != ssaop.OpConst32 {
29012 continue
29013 }
29014 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
29015 if !(c&15 == 15) {
29016 continue
29017 }
29018 v.Reset(ssaop.OpRotateLeft16)
29019 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29020 v0.AddArg(y)
29021 v.AddArg2(x, v0)
29022 return true
29023 }
29024 break
29025 }
29026
29027
29028
29029 for {
29030 x := v_0
29031 if v_1.Op != ssaop.OpNeg16 {
29032 break
29033 }
29034 v_1_0 := v_1.Args[0]
29035 if v_1_0.Op != ssaop.OpAnd16 {
29036 break
29037 }
29038 _ = v_1_0.Args[1]
29039 v_1_0_0 := v_1_0.Args[0]
29040 v_1_0_1 := v_1_0.Args[1]
29041 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29042 y := v_1_0_0
29043 if v_1_0_1.Op != ssaop.OpConst16 {
29044 continue
29045 }
29046 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
29047 if !(c&15 == 15) {
29048 continue
29049 }
29050 v.Reset(ssaop.OpRotateLeft16)
29051 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29052 v0.AddArg(y)
29053 v.AddArg2(x, v0)
29054 return true
29055 }
29056 break
29057 }
29058
29059
29060
29061 for {
29062 x := v_0
29063 if v_1.Op != ssaop.OpNeg8 {
29064 break
29065 }
29066 v_1_0 := v_1.Args[0]
29067 if v_1_0.Op != ssaop.OpAnd8 {
29068 break
29069 }
29070 _ = v_1_0.Args[1]
29071 v_1_0_0 := v_1_0.Args[0]
29072 v_1_0_1 := v_1_0.Args[1]
29073 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29074 y := v_1_0_0
29075 if v_1_0_1.Op != ssaop.OpConst8 {
29076 continue
29077 }
29078 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
29079 if !(c&15 == 15) {
29080 continue
29081 }
29082 v.Reset(ssaop.OpRotateLeft16)
29083 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29084 v0.AddArg(y)
29085 v.AddArg2(x, v0)
29086 return true
29087 }
29088 break
29089 }
29090
29091
29092
29093 for {
29094 x := v_0
29095 if v_1.Op != ssaop.OpAdd64 {
29096 break
29097 }
29098 _ = v_1.Args[1]
29099 v_1_0 := v_1.Args[0]
29100 v_1_1 := v_1.Args[1]
29101 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29102 y := v_1_0
29103 if v_1_1.Op != ssaop.OpConst64 {
29104 continue
29105 }
29106 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29107 if !(c&15 == 0) {
29108 continue
29109 }
29110 v.Reset(ssaop.OpRotateLeft16)
29111 v.AddArg2(x, y)
29112 return true
29113 }
29114 break
29115 }
29116
29117
29118
29119 for {
29120 x := v_0
29121 if v_1.Op != ssaop.OpAdd32 {
29122 break
29123 }
29124 _ = v_1.Args[1]
29125 v_1_0 := v_1.Args[0]
29126 v_1_1 := v_1.Args[1]
29127 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29128 y := v_1_0
29129 if v_1_1.Op != ssaop.OpConst32 {
29130 continue
29131 }
29132 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29133 if !(c&15 == 0) {
29134 continue
29135 }
29136 v.Reset(ssaop.OpRotateLeft16)
29137 v.AddArg2(x, y)
29138 return true
29139 }
29140 break
29141 }
29142
29143
29144
29145 for {
29146 x := v_0
29147 if v_1.Op != ssaop.OpAdd16 {
29148 break
29149 }
29150 _ = v_1.Args[1]
29151 v_1_0 := v_1.Args[0]
29152 v_1_1 := v_1.Args[1]
29153 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29154 y := v_1_0
29155 if v_1_1.Op != ssaop.OpConst16 {
29156 continue
29157 }
29158 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29159 if !(c&15 == 0) {
29160 continue
29161 }
29162 v.Reset(ssaop.OpRotateLeft16)
29163 v.AddArg2(x, y)
29164 return true
29165 }
29166 break
29167 }
29168
29169
29170
29171 for {
29172 x := v_0
29173 if v_1.Op != ssaop.OpAdd8 {
29174 break
29175 }
29176 _ = v_1.Args[1]
29177 v_1_0 := v_1.Args[0]
29178 v_1_1 := v_1.Args[1]
29179 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29180 y := v_1_0
29181 if v_1_1.Op != ssaop.OpConst8 {
29182 continue
29183 }
29184 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29185 if !(c&15 == 0) {
29186 continue
29187 }
29188 v.Reset(ssaop.OpRotateLeft16)
29189 v.AddArg2(x, y)
29190 return true
29191 }
29192 break
29193 }
29194
29195
29196
29197 for {
29198 x := v_0
29199 if v_1.Op != ssaop.OpSub64 {
29200 break
29201 }
29202 y := v_1.Args[1]
29203 v_1_0 := v_1.Args[0]
29204 if v_1_0.Op != ssaop.OpConst64 {
29205 break
29206 }
29207 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
29208 if !(c&15 == 0) {
29209 break
29210 }
29211 v.Reset(ssaop.OpRotateLeft16)
29212 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29213 v0.AddArg(y)
29214 v.AddArg2(x, v0)
29215 return true
29216 }
29217
29218
29219
29220 for {
29221 x := v_0
29222 if v_1.Op != ssaop.OpSub32 {
29223 break
29224 }
29225 y := v_1.Args[1]
29226 v_1_0 := v_1.Args[0]
29227 if v_1_0.Op != ssaop.OpConst32 {
29228 break
29229 }
29230 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
29231 if !(c&15 == 0) {
29232 break
29233 }
29234 v.Reset(ssaop.OpRotateLeft16)
29235 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29236 v0.AddArg(y)
29237 v.AddArg2(x, v0)
29238 return true
29239 }
29240
29241
29242
29243 for {
29244 x := v_0
29245 if v_1.Op != ssaop.OpSub16 {
29246 break
29247 }
29248 y := v_1.Args[1]
29249 v_1_0 := v_1.Args[0]
29250 if v_1_0.Op != ssaop.OpConst16 {
29251 break
29252 }
29253 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
29254 if !(c&15 == 0) {
29255 break
29256 }
29257 v.Reset(ssaop.OpRotateLeft16)
29258 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29259 v0.AddArg(y)
29260 v.AddArg2(x, v0)
29261 return true
29262 }
29263
29264
29265
29266 for {
29267 x := v_0
29268 if v_1.Op != ssaop.OpSub8 {
29269 break
29270 }
29271 y := v_1.Args[1]
29272 v_1_0 := v_1.Args[0]
29273 if v_1_0.Op != ssaop.OpConst8 {
29274 break
29275 }
29276 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
29277 if !(c&15 == 0) {
29278 break
29279 }
29280 v.Reset(ssaop.OpRotateLeft16)
29281 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29282 v0.AddArg(y)
29283 v.AddArg2(x, v0)
29284 return true
29285 }
29286
29287
29288
29289 for {
29290 x := v_0
29291 if v_1.Op != ssaop.OpConst64 {
29292 break
29293 }
29294 c := ssa.AuxIntToInt64(v_1.AuxInt)
29295 if !(config.PtrSize == 4) {
29296 break
29297 }
29298 v.Reset(ssaop.OpRotateLeft16)
29299 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
29300 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
29301 v.AddArg2(x, v0)
29302 return true
29303 }
29304
29305
29306
29307 for {
29308 if v_0.Op != ssaop.OpRotateLeft16 {
29309 break
29310 }
29311 c := v_0.Args[1]
29312 x := v_0.Args[0]
29313 d := v_1
29314 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
29315 break
29316 }
29317 v.Reset(ssaop.OpRotateLeft16)
29318 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
29319 v0.AddArg2(c, d)
29320 v.AddArg2(x, v0)
29321 return true
29322 }
29323
29324
29325
29326 for {
29327 if v_0.Op != ssaop.OpRotateLeft16 {
29328 break
29329 }
29330 c := v_0.Args[1]
29331 x := v_0.Args[0]
29332 d := v_1
29333 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
29334 break
29335 }
29336 v.Reset(ssaop.OpRotateLeft16)
29337 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
29338 v0.AddArg2(c, d)
29339 v.AddArg2(x, v0)
29340 return true
29341 }
29342
29343
29344
29345 for {
29346 if v_0.Op != ssaop.OpRotateLeft16 {
29347 break
29348 }
29349 c := v_0.Args[1]
29350 x := v_0.Args[0]
29351 d := v_1
29352 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
29353 break
29354 }
29355 v.Reset(ssaop.OpRotateLeft16)
29356 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
29357 v0.AddArg2(c, d)
29358 v.AddArg2(x, v0)
29359 return true
29360 }
29361
29362
29363
29364 for {
29365 if v_0.Op != ssaop.OpRotateLeft16 {
29366 break
29367 }
29368 c := v_0.Args[1]
29369 x := v_0.Args[0]
29370 d := v_1
29371 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
29372 break
29373 }
29374 v.Reset(ssaop.OpRotateLeft16)
29375 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
29376 v0.AddArg2(c, d)
29377 v.AddArg2(x, v0)
29378 return true
29379 }
29380 return false
29381 }
29382 func rewriteValue_OpRotateLeft32(v *ssa.Value) bool {
29383 v_1 := v.Args[1]
29384 v_0 := v.Args[0]
29385 b := v.Block
29386 config := b.Func.Config
29387 typ := &b.Func.Config.Types
29388
29389
29390 for {
29391 if v_0.Op != ssaop.OpConst32 {
29392 break
29393 }
29394 x := ssa.AuxIntToInt32(v_0.AuxInt)
29395 if v_1.Op != ssaop.OpConst64 {
29396 break
29397 }
29398 y := ssa.AuxIntToInt64(v_1.AuxInt)
29399 v.Reset(ssaop.OpConst32)
29400 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.RotateLeft32(uint32(x), int(y))))
29401 return true
29402 }
29403
29404
29405 for {
29406 if v_0.Op != ssaop.OpConst32 {
29407 break
29408 }
29409 x := ssa.AuxIntToInt32(v_0.AuxInt)
29410 if v_1.Op != ssaop.OpConst32 {
29411 break
29412 }
29413 y := ssa.AuxIntToInt32(v_1.AuxInt)
29414 v.Reset(ssaop.OpConst32)
29415 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.RotateLeft32(uint32(x), int(y))))
29416 return true
29417 }
29418
29419
29420
29421 for {
29422 x := v_0
29423 if v_1.Op != ssaop.OpConst32 {
29424 break
29425 }
29426 c := ssa.AuxIntToInt32(v_1.AuxInt)
29427 if !(c%32 == 0) {
29428 break
29429 }
29430 v.CopyOf(x)
29431 return true
29432 }
29433
29434
29435
29436 for {
29437 x := v_0
29438 if v_1.Op != ssaop.OpAnd64 {
29439 break
29440 }
29441 _ = v_1.Args[1]
29442 v_1_0 := v_1.Args[0]
29443 v_1_1 := v_1.Args[1]
29444 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29445 y := v_1_0
29446 if v_1_1.Op != ssaop.OpConst64 {
29447 continue
29448 }
29449 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29450 if !(c&31 == 31) {
29451 continue
29452 }
29453 v.Reset(ssaop.OpRotateLeft32)
29454 v.AddArg2(x, y)
29455 return true
29456 }
29457 break
29458 }
29459
29460
29461
29462 for {
29463 x := v_0
29464 if v_1.Op != ssaop.OpAnd32 {
29465 break
29466 }
29467 _ = v_1.Args[1]
29468 v_1_0 := v_1.Args[0]
29469 v_1_1 := v_1.Args[1]
29470 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29471 y := v_1_0
29472 if v_1_1.Op != ssaop.OpConst32 {
29473 continue
29474 }
29475 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29476 if !(c&31 == 31) {
29477 continue
29478 }
29479 v.Reset(ssaop.OpRotateLeft32)
29480 v.AddArg2(x, y)
29481 return true
29482 }
29483 break
29484 }
29485
29486
29487
29488 for {
29489 x := v_0
29490 if v_1.Op != ssaop.OpAnd16 {
29491 break
29492 }
29493 _ = v_1.Args[1]
29494 v_1_0 := v_1.Args[0]
29495 v_1_1 := v_1.Args[1]
29496 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29497 y := v_1_0
29498 if v_1_1.Op != ssaop.OpConst16 {
29499 continue
29500 }
29501 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29502 if !(c&31 == 31) {
29503 continue
29504 }
29505 v.Reset(ssaop.OpRotateLeft32)
29506 v.AddArg2(x, y)
29507 return true
29508 }
29509 break
29510 }
29511
29512
29513
29514 for {
29515 x := v_0
29516 if v_1.Op != ssaop.OpAnd8 {
29517 break
29518 }
29519 _ = v_1.Args[1]
29520 v_1_0 := v_1.Args[0]
29521 v_1_1 := v_1.Args[1]
29522 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29523 y := v_1_0
29524 if v_1_1.Op != ssaop.OpConst8 {
29525 continue
29526 }
29527 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29528 if !(c&31 == 31) {
29529 continue
29530 }
29531 v.Reset(ssaop.OpRotateLeft32)
29532 v.AddArg2(x, y)
29533 return true
29534 }
29535 break
29536 }
29537
29538
29539
29540 for {
29541 x := v_0
29542 if v_1.Op != ssaop.OpNeg64 {
29543 break
29544 }
29545 v_1_0 := v_1.Args[0]
29546 if v_1_0.Op != ssaop.OpAnd64 {
29547 break
29548 }
29549 _ = v_1_0.Args[1]
29550 v_1_0_0 := v_1_0.Args[0]
29551 v_1_0_1 := v_1_0.Args[1]
29552 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29553 y := v_1_0_0
29554 if v_1_0_1.Op != ssaop.OpConst64 {
29555 continue
29556 }
29557 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
29558 if !(c&31 == 31) {
29559 continue
29560 }
29561 v.Reset(ssaop.OpRotateLeft32)
29562 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29563 v0.AddArg(y)
29564 v.AddArg2(x, v0)
29565 return true
29566 }
29567 break
29568 }
29569
29570
29571
29572 for {
29573 x := v_0
29574 if v_1.Op != ssaop.OpNeg32 {
29575 break
29576 }
29577 v_1_0 := v_1.Args[0]
29578 if v_1_0.Op != ssaop.OpAnd32 {
29579 break
29580 }
29581 _ = v_1_0.Args[1]
29582 v_1_0_0 := v_1_0.Args[0]
29583 v_1_0_1 := v_1_0.Args[1]
29584 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29585 y := v_1_0_0
29586 if v_1_0_1.Op != ssaop.OpConst32 {
29587 continue
29588 }
29589 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
29590 if !(c&31 == 31) {
29591 continue
29592 }
29593 v.Reset(ssaop.OpRotateLeft32)
29594 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29595 v0.AddArg(y)
29596 v.AddArg2(x, v0)
29597 return true
29598 }
29599 break
29600 }
29601
29602
29603
29604 for {
29605 x := v_0
29606 if v_1.Op != ssaop.OpNeg16 {
29607 break
29608 }
29609 v_1_0 := v_1.Args[0]
29610 if v_1_0.Op != ssaop.OpAnd16 {
29611 break
29612 }
29613 _ = v_1_0.Args[1]
29614 v_1_0_0 := v_1_0.Args[0]
29615 v_1_0_1 := v_1_0.Args[1]
29616 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29617 y := v_1_0_0
29618 if v_1_0_1.Op != ssaop.OpConst16 {
29619 continue
29620 }
29621 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
29622 if !(c&31 == 31) {
29623 continue
29624 }
29625 v.Reset(ssaop.OpRotateLeft32)
29626 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29627 v0.AddArg(y)
29628 v.AddArg2(x, v0)
29629 return true
29630 }
29631 break
29632 }
29633
29634
29635
29636 for {
29637 x := v_0
29638 if v_1.Op != ssaop.OpNeg8 {
29639 break
29640 }
29641 v_1_0 := v_1.Args[0]
29642 if v_1_0.Op != ssaop.OpAnd8 {
29643 break
29644 }
29645 _ = v_1_0.Args[1]
29646 v_1_0_0 := v_1_0.Args[0]
29647 v_1_0_1 := v_1_0.Args[1]
29648 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29649 y := v_1_0_0
29650 if v_1_0_1.Op != ssaop.OpConst8 {
29651 continue
29652 }
29653 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
29654 if !(c&31 == 31) {
29655 continue
29656 }
29657 v.Reset(ssaop.OpRotateLeft32)
29658 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29659 v0.AddArg(y)
29660 v.AddArg2(x, v0)
29661 return true
29662 }
29663 break
29664 }
29665
29666
29667
29668 for {
29669 x := v_0
29670 if v_1.Op != ssaop.OpAdd64 {
29671 break
29672 }
29673 _ = v_1.Args[1]
29674 v_1_0 := v_1.Args[0]
29675 v_1_1 := v_1.Args[1]
29676 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29677 y := v_1_0
29678 if v_1_1.Op != ssaop.OpConst64 {
29679 continue
29680 }
29681 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29682 if !(c&31 == 0) {
29683 continue
29684 }
29685 v.Reset(ssaop.OpRotateLeft32)
29686 v.AddArg2(x, y)
29687 return true
29688 }
29689 break
29690 }
29691
29692
29693
29694 for {
29695 x := v_0
29696 if v_1.Op != ssaop.OpAdd32 {
29697 break
29698 }
29699 _ = v_1.Args[1]
29700 v_1_0 := v_1.Args[0]
29701 v_1_1 := v_1.Args[1]
29702 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29703 y := v_1_0
29704 if v_1_1.Op != ssaop.OpConst32 {
29705 continue
29706 }
29707 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29708 if !(c&31 == 0) {
29709 continue
29710 }
29711 v.Reset(ssaop.OpRotateLeft32)
29712 v.AddArg2(x, y)
29713 return true
29714 }
29715 break
29716 }
29717
29718
29719
29720 for {
29721 x := v_0
29722 if v_1.Op != ssaop.OpAdd16 {
29723 break
29724 }
29725 _ = v_1.Args[1]
29726 v_1_0 := v_1.Args[0]
29727 v_1_1 := v_1.Args[1]
29728 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29729 y := v_1_0
29730 if v_1_1.Op != ssaop.OpConst16 {
29731 continue
29732 }
29733 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29734 if !(c&31 == 0) {
29735 continue
29736 }
29737 v.Reset(ssaop.OpRotateLeft32)
29738 v.AddArg2(x, y)
29739 return true
29740 }
29741 break
29742 }
29743
29744
29745
29746 for {
29747 x := v_0
29748 if v_1.Op != ssaop.OpAdd8 {
29749 break
29750 }
29751 _ = v_1.Args[1]
29752 v_1_0 := v_1.Args[0]
29753 v_1_1 := v_1.Args[1]
29754 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29755 y := v_1_0
29756 if v_1_1.Op != ssaop.OpConst8 {
29757 continue
29758 }
29759 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29760 if !(c&31 == 0) {
29761 continue
29762 }
29763 v.Reset(ssaop.OpRotateLeft32)
29764 v.AddArg2(x, y)
29765 return true
29766 }
29767 break
29768 }
29769
29770
29771
29772 for {
29773 x := v_0
29774 if v_1.Op != ssaop.OpSub64 {
29775 break
29776 }
29777 y := v_1.Args[1]
29778 v_1_0 := v_1.Args[0]
29779 if v_1_0.Op != ssaop.OpConst64 {
29780 break
29781 }
29782 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
29783 if !(c&31 == 0) {
29784 break
29785 }
29786 v.Reset(ssaop.OpRotateLeft32)
29787 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29788 v0.AddArg(y)
29789 v.AddArg2(x, v0)
29790 return true
29791 }
29792
29793
29794
29795 for {
29796 x := v_0
29797 if v_1.Op != ssaop.OpSub32 {
29798 break
29799 }
29800 y := v_1.Args[1]
29801 v_1_0 := v_1.Args[0]
29802 if v_1_0.Op != ssaop.OpConst32 {
29803 break
29804 }
29805 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
29806 if !(c&31 == 0) {
29807 break
29808 }
29809 v.Reset(ssaop.OpRotateLeft32)
29810 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29811 v0.AddArg(y)
29812 v.AddArg2(x, v0)
29813 return true
29814 }
29815
29816
29817
29818 for {
29819 x := v_0
29820 if v_1.Op != ssaop.OpSub16 {
29821 break
29822 }
29823 y := v_1.Args[1]
29824 v_1_0 := v_1.Args[0]
29825 if v_1_0.Op != ssaop.OpConst16 {
29826 break
29827 }
29828 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
29829 if !(c&31 == 0) {
29830 break
29831 }
29832 v.Reset(ssaop.OpRotateLeft32)
29833 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29834 v0.AddArg(y)
29835 v.AddArg2(x, v0)
29836 return true
29837 }
29838
29839
29840
29841 for {
29842 x := v_0
29843 if v_1.Op != ssaop.OpSub8 {
29844 break
29845 }
29846 y := v_1.Args[1]
29847 v_1_0 := v_1.Args[0]
29848 if v_1_0.Op != ssaop.OpConst8 {
29849 break
29850 }
29851 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
29852 if !(c&31 == 0) {
29853 break
29854 }
29855 v.Reset(ssaop.OpRotateLeft32)
29856 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29857 v0.AddArg(y)
29858 v.AddArg2(x, v0)
29859 return true
29860 }
29861
29862
29863
29864 for {
29865 x := v_0
29866 if v_1.Op != ssaop.OpConst64 {
29867 break
29868 }
29869 c := ssa.AuxIntToInt64(v_1.AuxInt)
29870 if !(config.PtrSize == 4) {
29871 break
29872 }
29873 v.Reset(ssaop.OpRotateLeft32)
29874 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
29875 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
29876 v.AddArg2(x, v0)
29877 return true
29878 }
29879
29880
29881
29882 for {
29883 if v_0.Op != ssaop.OpRotateLeft32 {
29884 break
29885 }
29886 c := v_0.Args[1]
29887 x := v_0.Args[0]
29888 d := v_1
29889 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
29890 break
29891 }
29892 v.Reset(ssaop.OpRotateLeft32)
29893 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
29894 v0.AddArg2(c, d)
29895 v.AddArg2(x, v0)
29896 return true
29897 }
29898
29899
29900
29901 for {
29902 if v_0.Op != ssaop.OpRotateLeft32 {
29903 break
29904 }
29905 c := v_0.Args[1]
29906 x := v_0.Args[0]
29907 d := v_1
29908 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
29909 break
29910 }
29911 v.Reset(ssaop.OpRotateLeft32)
29912 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
29913 v0.AddArg2(c, d)
29914 v.AddArg2(x, v0)
29915 return true
29916 }
29917
29918
29919
29920 for {
29921 if v_0.Op != ssaop.OpRotateLeft32 {
29922 break
29923 }
29924 c := v_0.Args[1]
29925 x := v_0.Args[0]
29926 d := v_1
29927 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
29928 break
29929 }
29930 v.Reset(ssaop.OpRotateLeft32)
29931 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
29932 v0.AddArg2(c, d)
29933 v.AddArg2(x, v0)
29934 return true
29935 }
29936
29937
29938
29939 for {
29940 if v_0.Op != ssaop.OpRotateLeft32 {
29941 break
29942 }
29943 c := v_0.Args[1]
29944 x := v_0.Args[0]
29945 d := v_1
29946 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
29947 break
29948 }
29949 v.Reset(ssaop.OpRotateLeft32)
29950 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
29951 v0.AddArg2(c, d)
29952 v.AddArg2(x, v0)
29953 return true
29954 }
29955 return false
29956 }
29957 func rewriteValue_OpRotateLeft64(v *ssa.Value) bool {
29958 v_1 := v.Args[1]
29959 v_0 := v.Args[0]
29960 b := v.Block
29961 config := b.Func.Config
29962 typ := &b.Func.Config.Types
29963
29964
29965 for {
29966 if v_0.Op != ssaop.OpConst64 {
29967 break
29968 }
29969 x := ssa.AuxIntToInt64(v_0.AuxInt)
29970 if v_1.Op != ssaop.OpConst64 {
29971 break
29972 }
29973 y := ssa.AuxIntToInt64(v_1.AuxInt)
29974 v.Reset(ssaop.OpConst64)
29975 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.RotateLeft64(uint64(x), int(y))))
29976 return true
29977 }
29978
29979
29980 for {
29981 if v_0.Op != ssaop.OpConst64 {
29982 break
29983 }
29984 x := ssa.AuxIntToInt64(v_0.AuxInt)
29985 if v_1.Op != ssaop.OpConst32 {
29986 break
29987 }
29988 y := ssa.AuxIntToInt32(v_1.AuxInt)
29989 v.Reset(ssaop.OpConst64)
29990 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.RotateLeft64(uint64(x), int(y))))
29991 return true
29992 }
29993
29994
29995
29996 for {
29997 x := v_0
29998 if v_1.Op != ssaop.OpConst64 {
29999 break
30000 }
30001 c := ssa.AuxIntToInt64(v_1.AuxInt)
30002 if !(c%64 == 0) {
30003 break
30004 }
30005 v.CopyOf(x)
30006 return true
30007 }
30008
30009
30010
30011 for {
30012 x := v_0
30013 if v_1.Op != ssaop.OpAnd64 {
30014 break
30015 }
30016 _ = v_1.Args[1]
30017 v_1_0 := v_1.Args[0]
30018 v_1_1 := v_1.Args[1]
30019 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30020 y := v_1_0
30021 if v_1_1.Op != ssaop.OpConst64 {
30022 continue
30023 }
30024 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30025 if !(c&63 == 63) {
30026 continue
30027 }
30028 v.Reset(ssaop.OpRotateLeft64)
30029 v.AddArg2(x, y)
30030 return true
30031 }
30032 break
30033 }
30034
30035
30036
30037 for {
30038 x := v_0
30039 if v_1.Op != ssaop.OpAnd32 {
30040 break
30041 }
30042 _ = v_1.Args[1]
30043 v_1_0 := v_1.Args[0]
30044 v_1_1 := v_1.Args[1]
30045 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30046 y := v_1_0
30047 if v_1_1.Op != ssaop.OpConst32 {
30048 continue
30049 }
30050 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30051 if !(c&63 == 63) {
30052 continue
30053 }
30054 v.Reset(ssaop.OpRotateLeft64)
30055 v.AddArg2(x, y)
30056 return true
30057 }
30058 break
30059 }
30060
30061
30062
30063 for {
30064 x := v_0
30065 if v_1.Op != ssaop.OpAnd16 {
30066 break
30067 }
30068 _ = v_1.Args[1]
30069 v_1_0 := v_1.Args[0]
30070 v_1_1 := v_1.Args[1]
30071 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30072 y := v_1_0
30073 if v_1_1.Op != ssaop.OpConst16 {
30074 continue
30075 }
30076 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30077 if !(c&63 == 63) {
30078 continue
30079 }
30080 v.Reset(ssaop.OpRotateLeft64)
30081 v.AddArg2(x, y)
30082 return true
30083 }
30084 break
30085 }
30086
30087
30088
30089 for {
30090 x := v_0
30091 if v_1.Op != ssaop.OpAnd8 {
30092 break
30093 }
30094 _ = v_1.Args[1]
30095 v_1_0 := v_1.Args[0]
30096 v_1_1 := v_1.Args[1]
30097 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30098 y := v_1_0
30099 if v_1_1.Op != ssaop.OpConst8 {
30100 continue
30101 }
30102 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30103 if !(c&63 == 63) {
30104 continue
30105 }
30106 v.Reset(ssaop.OpRotateLeft64)
30107 v.AddArg2(x, y)
30108 return true
30109 }
30110 break
30111 }
30112
30113
30114
30115 for {
30116 x := v_0
30117 if v_1.Op != ssaop.OpNeg64 {
30118 break
30119 }
30120 v_1_0 := v_1.Args[0]
30121 if v_1_0.Op != ssaop.OpAnd64 {
30122 break
30123 }
30124 _ = v_1_0.Args[1]
30125 v_1_0_0 := v_1_0.Args[0]
30126 v_1_0_1 := v_1_0.Args[1]
30127 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30128 y := v_1_0_0
30129 if v_1_0_1.Op != ssaop.OpConst64 {
30130 continue
30131 }
30132 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
30133 if !(c&63 == 63) {
30134 continue
30135 }
30136 v.Reset(ssaop.OpRotateLeft64)
30137 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30138 v0.AddArg(y)
30139 v.AddArg2(x, v0)
30140 return true
30141 }
30142 break
30143 }
30144
30145
30146
30147 for {
30148 x := v_0
30149 if v_1.Op != ssaop.OpNeg32 {
30150 break
30151 }
30152 v_1_0 := v_1.Args[0]
30153 if v_1_0.Op != ssaop.OpAnd32 {
30154 break
30155 }
30156 _ = v_1_0.Args[1]
30157 v_1_0_0 := v_1_0.Args[0]
30158 v_1_0_1 := v_1_0.Args[1]
30159 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30160 y := v_1_0_0
30161 if v_1_0_1.Op != ssaop.OpConst32 {
30162 continue
30163 }
30164 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
30165 if !(c&63 == 63) {
30166 continue
30167 }
30168 v.Reset(ssaop.OpRotateLeft64)
30169 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30170 v0.AddArg(y)
30171 v.AddArg2(x, v0)
30172 return true
30173 }
30174 break
30175 }
30176
30177
30178
30179 for {
30180 x := v_0
30181 if v_1.Op != ssaop.OpNeg16 {
30182 break
30183 }
30184 v_1_0 := v_1.Args[0]
30185 if v_1_0.Op != ssaop.OpAnd16 {
30186 break
30187 }
30188 _ = v_1_0.Args[1]
30189 v_1_0_0 := v_1_0.Args[0]
30190 v_1_0_1 := v_1_0.Args[1]
30191 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30192 y := v_1_0_0
30193 if v_1_0_1.Op != ssaop.OpConst16 {
30194 continue
30195 }
30196 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
30197 if !(c&63 == 63) {
30198 continue
30199 }
30200 v.Reset(ssaop.OpRotateLeft64)
30201 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30202 v0.AddArg(y)
30203 v.AddArg2(x, v0)
30204 return true
30205 }
30206 break
30207 }
30208
30209
30210
30211 for {
30212 x := v_0
30213 if v_1.Op != ssaop.OpNeg8 {
30214 break
30215 }
30216 v_1_0 := v_1.Args[0]
30217 if v_1_0.Op != ssaop.OpAnd8 {
30218 break
30219 }
30220 _ = v_1_0.Args[1]
30221 v_1_0_0 := v_1_0.Args[0]
30222 v_1_0_1 := v_1_0.Args[1]
30223 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30224 y := v_1_0_0
30225 if v_1_0_1.Op != ssaop.OpConst8 {
30226 continue
30227 }
30228 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
30229 if !(c&63 == 63) {
30230 continue
30231 }
30232 v.Reset(ssaop.OpRotateLeft64)
30233 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30234 v0.AddArg(y)
30235 v.AddArg2(x, v0)
30236 return true
30237 }
30238 break
30239 }
30240
30241
30242
30243 for {
30244 x := v_0
30245 if v_1.Op != ssaop.OpAdd64 {
30246 break
30247 }
30248 _ = v_1.Args[1]
30249 v_1_0 := v_1.Args[0]
30250 v_1_1 := v_1.Args[1]
30251 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30252 y := v_1_0
30253 if v_1_1.Op != ssaop.OpConst64 {
30254 continue
30255 }
30256 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30257 if !(c&63 == 0) {
30258 continue
30259 }
30260 v.Reset(ssaop.OpRotateLeft64)
30261 v.AddArg2(x, y)
30262 return true
30263 }
30264 break
30265 }
30266
30267
30268
30269 for {
30270 x := v_0
30271 if v_1.Op != ssaop.OpAdd32 {
30272 break
30273 }
30274 _ = v_1.Args[1]
30275 v_1_0 := v_1.Args[0]
30276 v_1_1 := v_1.Args[1]
30277 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30278 y := v_1_0
30279 if v_1_1.Op != ssaop.OpConst32 {
30280 continue
30281 }
30282 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30283 if !(c&63 == 0) {
30284 continue
30285 }
30286 v.Reset(ssaop.OpRotateLeft64)
30287 v.AddArg2(x, y)
30288 return true
30289 }
30290 break
30291 }
30292
30293
30294
30295 for {
30296 x := v_0
30297 if v_1.Op != ssaop.OpAdd16 {
30298 break
30299 }
30300 _ = v_1.Args[1]
30301 v_1_0 := v_1.Args[0]
30302 v_1_1 := v_1.Args[1]
30303 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30304 y := v_1_0
30305 if v_1_1.Op != ssaop.OpConst16 {
30306 continue
30307 }
30308 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30309 if !(c&63 == 0) {
30310 continue
30311 }
30312 v.Reset(ssaop.OpRotateLeft64)
30313 v.AddArg2(x, y)
30314 return true
30315 }
30316 break
30317 }
30318
30319
30320
30321 for {
30322 x := v_0
30323 if v_1.Op != ssaop.OpAdd8 {
30324 break
30325 }
30326 _ = v_1.Args[1]
30327 v_1_0 := v_1.Args[0]
30328 v_1_1 := v_1.Args[1]
30329 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30330 y := v_1_0
30331 if v_1_1.Op != ssaop.OpConst8 {
30332 continue
30333 }
30334 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30335 if !(c&63 == 0) {
30336 continue
30337 }
30338 v.Reset(ssaop.OpRotateLeft64)
30339 v.AddArg2(x, y)
30340 return true
30341 }
30342 break
30343 }
30344
30345
30346
30347 for {
30348 x := v_0
30349 if v_1.Op != ssaop.OpSub64 {
30350 break
30351 }
30352 y := v_1.Args[1]
30353 v_1_0 := v_1.Args[0]
30354 if v_1_0.Op != ssaop.OpConst64 {
30355 break
30356 }
30357 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
30358 if !(c&63 == 0) {
30359 break
30360 }
30361 v.Reset(ssaop.OpRotateLeft64)
30362 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30363 v0.AddArg(y)
30364 v.AddArg2(x, v0)
30365 return true
30366 }
30367
30368
30369
30370 for {
30371 x := v_0
30372 if v_1.Op != ssaop.OpSub32 {
30373 break
30374 }
30375 y := v_1.Args[1]
30376 v_1_0 := v_1.Args[0]
30377 if v_1_0.Op != ssaop.OpConst32 {
30378 break
30379 }
30380 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
30381 if !(c&63 == 0) {
30382 break
30383 }
30384 v.Reset(ssaop.OpRotateLeft64)
30385 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30386 v0.AddArg(y)
30387 v.AddArg2(x, v0)
30388 return true
30389 }
30390
30391
30392
30393 for {
30394 x := v_0
30395 if v_1.Op != ssaop.OpSub16 {
30396 break
30397 }
30398 y := v_1.Args[1]
30399 v_1_0 := v_1.Args[0]
30400 if v_1_0.Op != ssaop.OpConst16 {
30401 break
30402 }
30403 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
30404 if !(c&63 == 0) {
30405 break
30406 }
30407 v.Reset(ssaop.OpRotateLeft64)
30408 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30409 v0.AddArg(y)
30410 v.AddArg2(x, v0)
30411 return true
30412 }
30413
30414
30415
30416 for {
30417 x := v_0
30418 if v_1.Op != ssaop.OpSub8 {
30419 break
30420 }
30421 y := v_1.Args[1]
30422 v_1_0 := v_1.Args[0]
30423 if v_1_0.Op != ssaop.OpConst8 {
30424 break
30425 }
30426 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
30427 if !(c&63 == 0) {
30428 break
30429 }
30430 v.Reset(ssaop.OpRotateLeft64)
30431 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30432 v0.AddArg(y)
30433 v.AddArg2(x, v0)
30434 return true
30435 }
30436
30437
30438
30439 for {
30440 x := v_0
30441 if v_1.Op != ssaop.OpConst64 {
30442 break
30443 }
30444 c := ssa.AuxIntToInt64(v_1.AuxInt)
30445 if !(config.PtrSize == 4) {
30446 break
30447 }
30448 v.Reset(ssaop.OpRotateLeft64)
30449 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
30450 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
30451 v.AddArg2(x, v0)
30452 return true
30453 }
30454
30455
30456
30457 for {
30458 if v_0.Op != ssaop.OpRotateLeft64 {
30459 break
30460 }
30461 c := v_0.Args[1]
30462 x := v_0.Args[0]
30463 d := v_1
30464 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
30465 break
30466 }
30467 v.Reset(ssaop.OpRotateLeft64)
30468 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
30469 v0.AddArg2(c, d)
30470 v.AddArg2(x, v0)
30471 return true
30472 }
30473
30474
30475
30476 for {
30477 if v_0.Op != ssaop.OpRotateLeft64 {
30478 break
30479 }
30480 c := v_0.Args[1]
30481 x := v_0.Args[0]
30482 d := v_1
30483 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
30484 break
30485 }
30486 v.Reset(ssaop.OpRotateLeft64)
30487 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
30488 v0.AddArg2(c, d)
30489 v.AddArg2(x, v0)
30490 return true
30491 }
30492
30493
30494
30495 for {
30496 if v_0.Op != ssaop.OpRotateLeft64 {
30497 break
30498 }
30499 c := v_0.Args[1]
30500 x := v_0.Args[0]
30501 d := v_1
30502 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
30503 break
30504 }
30505 v.Reset(ssaop.OpRotateLeft64)
30506 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
30507 v0.AddArg2(c, d)
30508 v.AddArg2(x, v0)
30509 return true
30510 }
30511
30512
30513
30514 for {
30515 if v_0.Op != ssaop.OpRotateLeft64 {
30516 break
30517 }
30518 c := v_0.Args[1]
30519 x := v_0.Args[0]
30520 d := v_1
30521 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
30522 break
30523 }
30524 v.Reset(ssaop.OpRotateLeft64)
30525 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
30526 v0.AddArg2(c, d)
30527 v.AddArg2(x, v0)
30528 return true
30529 }
30530 return false
30531 }
30532 func rewriteValue_OpRotateLeft8(v *ssa.Value) bool {
30533 v_1 := v.Args[1]
30534 v_0 := v.Args[0]
30535 b := v.Block
30536 config := b.Func.Config
30537 typ := &b.Func.Config.Types
30538
30539
30540 for {
30541 if v_0.Op != ssaop.OpConst8 {
30542 break
30543 }
30544 x := ssa.AuxIntToInt8(v_0.AuxInt)
30545 if v_1.Op != ssaop.OpConst64 {
30546 break
30547 }
30548 y := ssa.AuxIntToInt64(v_1.AuxInt)
30549 v.Reset(ssaop.OpConst8)
30550 v.AuxInt = ssa.Int8ToAuxInt(int8(bits.RotateLeft8(uint8(x), int(y))))
30551 return true
30552 }
30553
30554
30555 for {
30556 if v_0.Op != ssaop.OpConst8 {
30557 break
30558 }
30559 x := ssa.AuxIntToInt8(v_0.AuxInt)
30560 if v_1.Op != ssaop.OpConst32 {
30561 break
30562 }
30563 y := ssa.AuxIntToInt32(v_1.AuxInt)
30564 v.Reset(ssaop.OpConst8)
30565 v.AuxInt = ssa.Int8ToAuxInt(int8(bits.RotateLeft8(uint8(x), int(y))))
30566 return true
30567 }
30568
30569
30570
30571 for {
30572 x := v_0
30573 if v_1.Op != ssaop.OpConst8 {
30574 break
30575 }
30576 c := ssa.AuxIntToInt8(v_1.AuxInt)
30577 if !(c%8 == 0) {
30578 break
30579 }
30580 v.CopyOf(x)
30581 return true
30582 }
30583
30584
30585
30586 for {
30587 x := v_0
30588 if v_1.Op != ssaop.OpAnd64 {
30589 break
30590 }
30591 _ = v_1.Args[1]
30592 v_1_0 := v_1.Args[0]
30593 v_1_1 := v_1.Args[1]
30594 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30595 y := v_1_0
30596 if v_1_1.Op != ssaop.OpConst64 {
30597 continue
30598 }
30599 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30600 if !(c&7 == 7) {
30601 continue
30602 }
30603 v.Reset(ssaop.OpRotateLeft8)
30604 v.AddArg2(x, y)
30605 return true
30606 }
30607 break
30608 }
30609
30610
30611
30612 for {
30613 x := v_0
30614 if v_1.Op != ssaop.OpAnd32 {
30615 break
30616 }
30617 _ = v_1.Args[1]
30618 v_1_0 := v_1.Args[0]
30619 v_1_1 := v_1.Args[1]
30620 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30621 y := v_1_0
30622 if v_1_1.Op != ssaop.OpConst32 {
30623 continue
30624 }
30625 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30626 if !(c&7 == 7) {
30627 continue
30628 }
30629 v.Reset(ssaop.OpRotateLeft8)
30630 v.AddArg2(x, y)
30631 return true
30632 }
30633 break
30634 }
30635
30636
30637
30638 for {
30639 x := v_0
30640 if v_1.Op != ssaop.OpAnd16 {
30641 break
30642 }
30643 _ = v_1.Args[1]
30644 v_1_0 := v_1.Args[0]
30645 v_1_1 := v_1.Args[1]
30646 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30647 y := v_1_0
30648 if v_1_1.Op != ssaop.OpConst16 {
30649 continue
30650 }
30651 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30652 if !(c&7 == 7) {
30653 continue
30654 }
30655 v.Reset(ssaop.OpRotateLeft8)
30656 v.AddArg2(x, y)
30657 return true
30658 }
30659 break
30660 }
30661
30662
30663
30664 for {
30665 x := v_0
30666 if v_1.Op != ssaop.OpAnd8 {
30667 break
30668 }
30669 _ = v_1.Args[1]
30670 v_1_0 := v_1.Args[0]
30671 v_1_1 := v_1.Args[1]
30672 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30673 y := v_1_0
30674 if v_1_1.Op != ssaop.OpConst8 {
30675 continue
30676 }
30677 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30678 if !(c&7 == 7) {
30679 continue
30680 }
30681 v.Reset(ssaop.OpRotateLeft8)
30682 v.AddArg2(x, y)
30683 return true
30684 }
30685 break
30686 }
30687
30688
30689
30690 for {
30691 x := v_0
30692 if v_1.Op != ssaop.OpNeg64 {
30693 break
30694 }
30695 v_1_0 := v_1.Args[0]
30696 if v_1_0.Op != ssaop.OpAnd64 {
30697 break
30698 }
30699 _ = v_1_0.Args[1]
30700 v_1_0_0 := v_1_0.Args[0]
30701 v_1_0_1 := v_1_0.Args[1]
30702 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30703 y := v_1_0_0
30704 if v_1_0_1.Op != ssaop.OpConst64 {
30705 continue
30706 }
30707 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
30708 if !(c&7 == 7) {
30709 continue
30710 }
30711 v.Reset(ssaop.OpRotateLeft8)
30712 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30713 v0.AddArg(y)
30714 v.AddArg2(x, v0)
30715 return true
30716 }
30717 break
30718 }
30719
30720
30721
30722 for {
30723 x := v_0
30724 if v_1.Op != ssaop.OpNeg32 {
30725 break
30726 }
30727 v_1_0 := v_1.Args[0]
30728 if v_1_0.Op != ssaop.OpAnd32 {
30729 break
30730 }
30731 _ = v_1_0.Args[1]
30732 v_1_0_0 := v_1_0.Args[0]
30733 v_1_0_1 := v_1_0.Args[1]
30734 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30735 y := v_1_0_0
30736 if v_1_0_1.Op != ssaop.OpConst32 {
30737 continue
30738 }
30739 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
30740 if !(c&7 == 7) {
30741 continue
30742 }
30743 v.Reset(ssaop.OpRotateLeft8)
30744 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30745 v0.AddArg(y)
30746 v.AddArg2(x, v0)
30747 return true
30748 }
30749 break
30750 }
30751
30752
30753
30754 for {
30755 x := v_0
30756 if v_1.Op != ssaop.OpNeg16 {
30757 break
30758 }
30759 v_1_0 := v_1.Args[0]
30760 if v_1_0.Op != ssaop.OpAnd16 {
30761 break
30762 }
30763 _ = v_1_0.Args[1]
30764 v_1_0_0 := v_1_0.Args[0]
30765 v_1_0_1 := v_1_0.Args[1]
30766 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30767 y := v_1_0_0
30768 if v_1_0_1.Op != ssaop.OpConst16 {
30769 continue
30770 }
30771 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
30772 if !(c&7 == 7) {
30773 continue
30774 }
30775 v.Reset(ssaop.OpRotateLeft8)
30776 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30777 v0.AddArg(y)
30778 v.AddArg2(x, v0)
30779 return true
30780 }
30781 break
30782 }
30783
30784
30785
30786 for {
30787 x := v_0
30788 if v_1.Op != ssaop.OpNeg8 {
30789 break
30790 }
30791 v_1_0 := v_1.Args[0]
30792 if v_1_0.Op != ssaop.OpAnd8 {
30793 break
30794 }
30795 _ = v_1_0.Args[1]
30796 v_1_0_0 := v_1_0.Args[0]
30797 v_1_0_1 := v_1_0.Args[1]
30798 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30799 y := v_1_0_0
30800 if v_1_0_1.Op != ssaop.OpConst8 {
30801 continue
30802 }
30803 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
30804 if !(c&7 == 7) {
30805 continue
30806 }
30807 v.Reset(ssaop.OpRotateLeft8)
30808 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30809 v0.AddArg(y)
30810 v.AddArg2(x, v0)
30811 return true
30812 }
30813 break
30814 }
30815
30816
30817
30818 for {
30819 x := v_0
30820 if v_1.Op != ssaop.OpAdd64 {
30821 break
30822 }
30823 _ = v_1.Args[1]
30824 v_1_0 := v_1.Args[0]
30825 v_1_1 := v_1.Args[1]
30826 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30827 y := v_1_0
30828 if v_1_1.Op != ssaop.OpConst64 {
30829 continue
30830 }
30831 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30832 if !(c&7 == 0) {
30833 continue
30834 }
30835 v.Reset(ssaop.OpRotateLeft8)
30836 v.AddArg2(x, y)
30837 return true
30838 }
30839 break
30840 }
30841
30842
30843
30844 for {
30845 x := v_0
30846 if v_1.Op != ssaop.OpAdd32 {
30847 break
30848 }
30849 _ = v_1.Args[1]
30850 v_1_0 := v_1.Args[0]
30851 v_1_1 := v_1.Args[1]
30852 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30853 y := v_1_0
30854 if v_1_1.Op != ssaop.OpConst32 {
30855 continue
30856 }
30857 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30858 if !(c&7 == 0) {
30859 continue
30860 }
30861 v.Reset(ssaop.OpRotateLeft8)
30862 v.AddArg2(x, y)
30863 return true
30864 }
30865 break
30866 }
30867
30868
30869
30870 for {
30871 x := v_0
30872 if v_1.Op != ssaop.OpAdd16 {
30873 break
30874 }
30875 _ = v_1.Args[1]
30876 v_1_0 := v_1.Args[0]
30877 v_1_1 := v_1.Args[1]
30878 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30879 y := v_1_0
30880 if v_1_1.Op != ssaop.OpConst16 {
30881 continue
30882 }
30883 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30884 if !(c&7 == 0) {
30885 continue
30886 }
30887 v.Reset(ssaop.OpRotateLeft8)
30888 v.AddArg2(x, y)
30889 return true
30890 }
30891 break
30892 }
30893
30894
30895
30896 for {
30897 x := v_0
30898 if v_1.Op != ssaop.OpAdd8 {
30899 break
30900 }
30901 _ = v_1.Args[1]
30902 v_1_0 := v_1.Args[0]
30903 v_1_1 := v_1.Args[1]
30904 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30905 y := v_1_0
30906 if v_1_1.Op != ssaop.OpConst8 {
30907 continue
30908 }
30909 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30910 if !(c&7 == 0) {
30911 continue
30912 }
30913 v.Reset(ssaop.OpRotateLeft8)
30914 v.AddArg2(x, y)
30915 return true
30916 }
30917 break
30918 }
30919
30920
30921
30922 for {
30923 x := v_0
30924 if v_1.Op != ssaop.OpSub64 {
30925 break
30926 }
30927 y := v_1.Args[1]
30928 v_1_0 := v_1.Args[0]
30929 if v_1_0.Op != ssaop.OpConst64 {
30930 break
30931 }
30932 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
30933 if !(c&7 == 0) {
30934 break
30935 }
30936 v.Reset(ssaop.OpRotateLeft8)
30937 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30938 v0.AddArg(y)
30939 v.AddArg2(x, v0)
30940 return true
30941 }
30942
30943
30944
30945 for {
30946 x := v_0
30947 if v_1.Op != ssaop.OpSub32 {
30948 break
30949 }
30950 y := v_1.Args[1]
30951 v_1_0 := v_1.Args[0]
30952 if v_1_0.Op != ssaop.OpConst32 {
30953 break
30954 }
30955 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
30956 if !(c&7 == 0) {
30957 break
30958 }
30959 v.Reset(ssaop.OpRotateLeft8)
30960 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30961 v0.AddArg(y)
30962 v.AddArg2(x, v0)
30963 return true
30964 }
30965
30966
30967
30968 for {
30969 x := v_0
30970 if v_1.Op != ssaop.OpSub16 {
30971 break
30972 }
30973 y := v_1.Args[1]
30974 v_1_0 := v_1.Args[0]
30975 if v_1_0.Op != ssaop.OpConst16 {
30976 break
30977 }
30978 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
30979 if !(c&7 == 0) {
30980 break
30981 }
30982 v.Reset(ssaop.OpRotateLeft8)
30983 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30984 v0.AddArg(y)
30985 v.AddArg2(x, v0)
30986 return true
30987 }
30988
30989
30990
30991 for {
30992 x := v_0
30993 if v_1.Op != ssaop.OpSub8 {
30994 break
30995 }
30996 y := v_1.Args[1]
30997 v_1_0 := v_1.Args[0]
30998 if v_1_0.Op != ssaop.OpConst8 {
30999 break
31000 }
31001 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
31002 if !(c&7 == 0) {
31003 break
31004 }
31005 v.Reset(ssaop.OpRotateLeft8)
31006 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
31007 v0.AddArg(y)
31008 v.AddArg2(x, v0)
31009 return true
31010 }
31011
31012
31013
31014 for {
31015 x := v_0
31016 if v_1.Op != ssaop.OpConst64 {
31017 break
31018 }
31019 c := ssa.AuxIntToInt64(v_1.AuxInt)
31020 if !(config.PtrSize == 4) {
31021 break
31022 }
31023 v.Reset(ssaop.OpRotateLeft8)
31024 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
31025 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
31026 v.AddArg2(x, v0)
31027 return true
31028 }
31029
31030
31031
31032 for {
31033 if v_0.Op != ssaop.OpRotateLeft8 {
31034 break
31035 }
31036 c := v_0.Args[1]
31037 x := v_0.Args[0]
31038 d := v_1
31039 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
31040 break
31041 }
31042 v.Reset(ssaop.OpRotateLeft8)
31043 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
31044 v0.AddArg2(c, d)
31045 v.AddArg2(x, v0)
31046 return true
31047 }
31048
31049
31050
31051 for {
31052 if v_0.Op != ssaop.OpRotateLeft8 {
31053 break
31054 }
31055 c := v_0.Args[1]
31056 x := v_0.Args[0]
31057 d := v_1
31058 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
31059 break
31060 }
31061 v.Reset(ssaop.OpRotateLeft8)
31062 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
31063 v0.AddArg2(c, d)
31064 v.AddArg2(x, v0)
31065 return true
31066 }
31067
31068
31069
31070 for {
31071 if v_0.Op != ssaop.OpRotateLeft8 {
31072 break
31073 }
31074 c := v_0.Args[1]
31075 x := v_0.Args[0]
31076 d := v_1
31077 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
31078 break
31079 }
31080 v.Reset(ssaop.OpRotateLeft8)
31081 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
31082 v0.AddArg2(c, d)
31083 v.AddArg2(x, v0)
31084 return true
31085 }
31086
31087
31088
31089 for {
31090 if v_0.Op != ssaop.OpRotateLeft8 {
31091 break
31092 }
31093 c := v_0.Args[1]
31094 x := v_0.Args[0]
31095 d := v_1
31096 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
31097 break
31098 }
31099 v.Reset(ssaop.OpRotateLeft8)
31100 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
31101 v0.AddArg2(c, d)
31102 v.AddArg2(x, v0)
31103 return true
31104 }
31105 return false
31106 }
31107 func rewriteValue_OpRound32F(v *ssa.Value) bool {
31108 v_0 := v.Args[0]
31109
31110
31111 for {
31112 x := v_0
31113 if x.Op != ssaop.OpConst32F {
31114 break
31115 }
31116 v.CopyOf(x)
31117 return true
31118 }
31119 return false
31120 }
31121 func rewriteValue_OpRound64F(v *ssa.Value) bool {
31122 v_0 := v.Args[0]
31123
31124
31125 for {
31126 x := v_0
31127 if x.Op != ssaop.OpConst64F {
31128 break
31129 }
31130 v.CopyOf(x)
31131 return true
31132 }
31133 return false
31134 }
31135 func rewriteValue_OpRoundToEven(v *ssa.Value) bool {
31136 v_0 := v.Args[0]
31137
31138
31139 for {
31140 if v_0.Op != ssaop.OpConst64F {
31141 break
31142 }
31143 c := ssa.AuxIntToFloat64(v_0.AuxInt)
31144 v.Reset(ssaop.OpConst64F)
31145 v.AuxInt = ssa.Float64ToAuxInt(math.RoundToEven(c))
31146 return true
31147 }
31148 return false
31149 }
31150 func rewriteValue_OpRsh16Ux16(v *ssa.Value) bool {
31151 v_1 := v.Args[1]
31152 v_0 := v.Args[0]
31153 b := v.Block
31154
31155
31156 for {
31157 x := v_0
31158 if v_1.Op != ssaop.OpConst16 {
31159 break
31160 }
31161 c := ssa.AuxIntToInt16(v_1.AuxInt)
31162 v.Reset(ssaop.OpRsh16Ux64)
31163 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31164 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31165 v.AddArg2(x, v0)
31166 return true
31167 }
31168
31169
31170 for {
31171 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31172 break
31173 }
31174 v.Reset(ssaop.OpConst16)
31175 v.AuxInt = ssa.Int16ToAuxInt(0)
31176 return true
31177 }
31178
31179
31180
31181 for {
31182 if ssa.AuxIntToBool(v.AuxInt) != false {
31183 break
31184 }
31185 x := v_0
31186 con := v_1
31187 if con.Op != ssaop.OpConst16 {
31188 break
31189 }
31190 c := ssa.AuxIntToInt16(con.AuxInt)
31191 if !(0 < c && c < 16) {
31192 break
31193 }
31194 v.Reset(ssaop.OpRsh16Ux16)
31195 v.AuxInt = ssa.BoolToAuxInt(true)
31196 v.AddArg2(x, con)
31197 return true
31198 }
31199 return false
31200 }
31201 func rewriteValue_OpRsh16Ux32(v *ssa.Value) bool {
31202 v_1 := v.Args[1]
31203 v_0 := v.Args[0]
31204 b := v.Block
31205
31206
31207 for {
31208 x := v_0
31209 if v_1.Op != ssaop.OpConst32 {
31210 break
31211 }
31212 c := ssa.AuxIntToInt32(v_1.AuxInt)
31213 v.Reset(ssaop.OpRsh16Ux64)
31214 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31215 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31216 v.AddArg2(x, v0)
31217 return true
31218 }
31219
31220
31221 for {
31222 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31223 break
31224 }
31225 v.Reset(ssaop.OpConst16)
31226 v.AuxInt = ssa.Int16ToAuxInt(0)
31227 return true
31228 }
31229
31230
31231
31232 for {
31233 if ssa.AuxIntToBool(v.AuxInt) != false {
31234 break
31235 }
31236 x := v_0
31237 con := v_1
31238 if con.Op != ssaop.OpConst32 {
31239 break
31240 }
31241 c := ssa.AuxIntToInt32(con.AuxInt)
31242 if !(0 < c && c < 16) {
31243 break
31244 }
31245 v.Reset(ssaop.OpRsh16Ux32)
31246 v.AuxInt = ssa.BoolToAuxInt(true)
31247 v.AddArg2(x, con)
31248 return true
31249 }
31250 return false
31251 }
31252 func rewriteValue_OpRsh16Ux64(v *ssa.Value) bool {
31253 v_1 := v.Args[1]
31254 v_0 := v.Args[0]
31255 b := v.Block
31256 typ := &b.Func.Config.Types
31257
31258
31259 for {
31260 if v_0.Op != ssaop.OpConst16 {
31261 break
31262 }
31263 c := ssa.AuxIntToInt16(v_0.AuxInt)
31264 if v_1.Op != ssaop.OpConst64 {
31265 break
31266 }
31267 d := ssa.AuxIntToInt64(v_1.AuxInt)
31268 v.Reset(ssaop.OpConst16)
31269 v.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) >> uint64(d)))
31270 return true
31271 }
31272
31273
31274 for {
31275 x := v_0
31276 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31277 break
31278 }
31279 v.CopyOf(x)
31280 return true
31281 }
31282
31283
31284 for {
31285 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31286 break
31287 }
31288 v.Reset(ssaop.OpConst16)
31289 v.AuxInt = ssa.Int16ToAuxInt(0)
31290 return true
31291 }
31292
31293
31294
31295 for {
31296 if v_1.Op != ssaop.OpConst64 {
31297 break
31298 }
31299 c := ssa.AuxIntToInt64(v_1.AuxInt)
31300 if !(uint64(c) >= 16) {
31301 break
31302 }
31303 v.Reset(ssaop.OpConst16)
31304 v.AuxInt = ssa.Int16ToAuxInt(0)
31305 return true
31306 }
31307
31308
31309
31310 for {
31311 t := v.Type
31312 if v_0.Op != ssaop.OpRsh16Ux64 {
31313 break
31314 }
31315 _ = v_0.Args[1]
31316 x := v_0.Args[0]
31317 v_0_1 := v_0.Args[1]
31318 if v_0_1.Op != ssaop.OpConst64 {
31319 break
31320 }
31321 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31322 if v_1.Op != ssaop.OpConst64 {
31323 break
31324 }
31325 d := ssa.AuxIntToInt64(v_1.AuxInt)
31326 if !(!uaddOvf(c, d)) {
31327 break
31328 }
31329 v.Reset(ssaop.OpRsh16Ux64)
31330 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31331 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31332 v.AddArg2(x, v0)
31333 return true
31334 }
31335
31336
31337 for {
31338 if v_0.Op != ssaop.OpRsh16x64 {
31339 break
31340 }
31341 x := v_0.Args[0]
31342 if v_1.Op != ssaop.OpConst64 {
31343 break
31344 }
31345 t := v_1.Type
31346 if ssa.AuxIntToInt64(v_1.AuxInt) != 15 {
31347 break
31348 }
31349 v.Reset(ssaop.OpRsh16Ux64)
31350 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31351 v0.AuxInt = ssa.Int64ToAuxInt(15)
31352 v.AddArg2(x, v0)
31353 return true
31354 }
31355
31356
31357
31358 for {
31359 i := v_0
31360 if i.Op != ssaop.OpLsh16x64 {
31361 break
31362 }
31363 _ = i.Args[1]
31364 x := i.Args[0]
31365 i_1 := i.Args[1]
31366 if i_1.Op != ssaop.OpConst64 {
31367 break
31368 }
31369 c := ssa.AuxIntToInt64(i_1.AuxInt)
31370 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
31371 break
31372 }
31373 v.Reset(ssaop.OpAnd16)
31374 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
31375 v0.AuxInt = ssa.Int16ToAuxInt(int16(^uint16(0) >> c))
31376 v.AddArg2(x, v0)
31377 return true
31378 }
31379
31380
31381
31382 for {
31383 if v_0.Op != ssaop.OpLsh16x64 {
31384 break
31385 }
31386 _ = v_0.Args[1]
31387 v_0_0 := v_0.Args[0]
31388 if v_0_0.Op != ssaop.OpRsh16Ux64 {
31389 break
31390 }
31391 _ = v_0_0.Args[1]
31392 x := v_0_0.Args[0]
31393 v_0_0_1 := v_0_0.Args[1]
31394 if v_0_0_1.Op != ssaop.OpConst64 {
31395 break
31396 }
31397 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
31398 v_0_1 := v_0.Args[1]
31399 if v_0_1.Op != ssaop.OpConst64 {
31400 break
31401 }
31402 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
31403 if v_1.Op != ssaop.OpConst64 {
31404 break
31405 }
31406 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
31407 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
31408 break
31409 }
31410 v.Reset(ssaop.OpRsh16Ux64)
31411 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
31412 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
31413 v.AddArg2(x, v0)
31414 return true
31415 }
31416
31417
31418 for {
31419 if v_0.Op != ssaop.OpLsh16x64 {
31420 break
31421 }
31422 _ = v_0.Args[1]
31423 x := v_0.Args[0]
31424 v_0_1 := v_0.Args[1]
31425 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 {
31426 break
31427 }
31428 v.Reset(ssaop.OpZeroExt8to16)
31429 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc16to8, typ.UInt8)
31430 v0.AddArg(x)
31431 v.AddArg(v0)
31432 return true
31433 }
31434
31435
31436
31437 for {
31438 if ssa.AuxIntToBool(v.AuxInt) != false {
31439 break
31440 }
31441 x := v_0
31442 con := v_1
31443 if con.Op != ssaop.OpConst64 {
31444 break
31445 }
31446 c := ssa.AuxIntToInt64(con.AuxInt)
31447 if !(0 < c && c < 16) {
31448 break
31449 }
31450 v.Reset(ssaop.OpRsh16Ux64)
31451 v.AuxInt = ssa.BoolToAuxInt(true)
31452 v.AddArg2(x, con)
31453 return true
31454 }
31455 return false
31456 }
31457 func rewriteValue_OpRsh16Ux8(v *ssa.Value) bool {
31458 v_1 := v.Args[1]
31459 v_0 := v.Args[0]
31460 b := v.Block
31461
31462
31463 for {
31464 x := v_0
31465 if v_1.Op != ssaop.OpConst8 {
31466 break
31467 }
31468 c := ssa.AuxIntToInt8(v_1.AuxInt)
31469 v.Reset(ssaop.OpRsh16Ux64)
31470 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31471 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
31472 v.AddArg2(x, v0)
31473 return true
31474 }
31475
31476
31477 for {
31478 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31479 break
31480 }
31481 v.Reset(ssaop.OpConst16)
31482 v.AuxInt = ssa.Int16ToAuxInt(0)
31483 return true
31484 }
31485
31486
31487
31488 for {
31489 if ssa.AuxIntToBool(v.AuxInt) != false {
31490 break
31491 }
31492 x := v_0
31493 con := v_1
31494 if con.Op != ssaop.OpConst8 {
31495 break
31496 }
31497 c := ssa.AuxIntToInt8(con.AuxInt)
31498 if !(0 < c && c < 16) {
31499 break
31500 }
31501 v.Reset(ssaop.OpRsh16Ux8)
31502 v.AuxInt = ssa.BoolToAuxInt(true)
31503 v.AddArg2(x, con)
31504 return true
31505 }
31506 return false
31507 }
31508 func rewriteValue_OpRsh16x16(v *ssa.Value) bool {
31509 v_1 := v.Args[1]
31510 v_0 := v.Args[0]
31511 b := v.Block
31512
31513
31514 for {
31515 x := v_0
31516 if v_1.Op != ssaop.OpConst16 {
31517 break
31518 }
31519 c := ssa.AuxIntToInt16(v_1.AuxInt)
31520 v.Reset(ssaop.OpRsh16x64)
31521 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31522 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31523 v.AddArg2(x, v0)
31524 return true
31525 }
31526
31527
31528 for {
31529 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31530 break
31531 }
31532 v.Reset(ssaop.OpConst16)
31533 v.AuxInt = ssa.Int16ToAuxInt(0)
31534 return true
31535 }
31536
31537
31538
31539 for {
31540 if ssa.AuxIntToBool(v.AuxInt) != false {
31541 break
31542 }
31543 x := v_0
31544 con := v_1
31545 if con.Op != ssaop.OpConst16 {
31546 break
31547 }
31548 c := ssa.AuxIntToInt16(con.AuxInt)
31549 if !(0 < c && c < 16) {
31550 break
31551 }
31552 v.Reset(ssaop.OpRsh16x16)
31553 v.AuxInt = ssa.BoolToAuxInt(true)
31554 v.AddArg2(x, con)
31555 return true
31556 }
31557 return false
31558 }
31559 func rewriteValue_OpRsh16x32(v *ssa.Value) bool {
31560 v_1 := v.Args[1]
31561 v_0 := v.Args[0]
31562 b := v.Block
31563
31564
31565 for {
31566 x := v_0
31567 if v_1.Op != ssaop.OpConst32 {
31568 break
31569 }
31570 c := ssa.AuxIntToInt32(v_1.AuxInt)
31571 v.Reset(ssaop.OpRsh16x64)
31572 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31573 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31574 v.AddArg2(x, v0)
31575 return true
31576 }
31577
31578
31579 for {
31580 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31581 break
31582 }
31583 v.Reset(ssaop.OpConst16)
31584 v.AuxInt = ssa.Int16ToAuxInt(0)
31585 return true
31586 }
31587
31588
31589
31590 for {
31591 if ssa.AuxIntToBool(v.AuxInt) != false {
31592 break
31593 }
31594 x := v_0
31595 con := v_1
31596 if con.Op != ssaop.OpConst32 {
31597 break
31598 }
31599 c := ssa.AuxIntToInt32(con.AuxInt)
31600 if !(0 < c && c < 16) {
31601 break
31602 }
31603 v.Reset(ssaop.OpRsh16x32)
31604 v.AuxInt = ssa.BoolToAuxInt(true)
31605 v.AddArg2(x, con)
31606 return true
31607 }
31608 return false
31609 }
31610 func rewriteValue_OpRsh16x64(v *ssa.Value) bool {
31611 v_1 := v.Args[1]
31612 v_0 := v.Args[0]
31613 b := v.Block
31614 typ := &b.Func.Config.Types
31615
31616
31617 for {
31618 if v_0.Op != ssaop.OpConst16 {
31619 break
31620 }
31621 c := ssa.AuxIntToInt16(v_0.AuxInt)
31622 if v_1.Op != ssaop.OpConst64 {
31623 break
31624 }
31625 d := ssa.AuxIntToInt64(v_1.AuxInt)
31626 v.Reset(ssaop.OpConst16)
31627 v.AuxInt = ssa.Int16ToAuxInt(c >> uint64(d))
31628 return true
31629 }
31630
31631
31632 for {
31633 x := v_0
31634 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31635 break
31636 }
31637 v.CopyOf(x)
31638 return true
31639 }
31640
31641
31642 for {
31643 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31644 break
31645 }
31646 v.Reset(ssaop.OpConst16)
31647 v.AuxInt = ssa.Int16ToAuxInt(0)
31648 return true
31649 }
31650
31651
31652
31653 for {
31654 t := v.Type
31655 if v_0.Op != ssaop.OpRsh16x64 {
31656 break
31657 }
31658 _ = v_0.Args[1]
31659 x := v_0.Args[0]
31660 v_0_1 := v_0.Args[1]
31661 if v_0_1.Op != ssaop.OpConst64 {
31662 break
31663 }
31664 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31665 if v_1.Op != ssaop.OpConst64 {
31666 break
31667 }
31668 d := ssa.AuxIntToInt64(v_1.AuxInt)
31669 if !(!uaddOvf(c, d)) {
31670 break
31671 }
31672 v.Reset(ssaop.OpRsh16x64)
31673 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31674 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31675 v.AddArg2(x, v0)
31676 return true
31677 }
31678
31679
31680 for {
31681 if v_0.Op != ssaop.OpLsh16x64 {
31682 break
31683 }
31684 _ = v_0.Args[1]
31685 x := v_0.Args[0]
31686 v_0_1 := v_0.Args[1]
31687 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 {
31688 break
31689 }
31690 v.Reset(ssaop.OpSignExt8to16)
31691 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc16to8, typ.Int8)
31692 v0.AddArg(x)
31693 v.AddArg(v0)
31694 return true
31695 }
31696
31697
31698
31699 for {
31700 if ssa.AuxIntToBool(v.AuxInt) != false {
31701 break
31702 }
31703 x := v_0
31704 con := v_1
31705 if con.Op != ssaop.OpConst64 {
31706 break
31707 }
31708 c := ssa.AuxIntToInt64(con.AuxInt)
31709 if !(0 < c && c < 16) {
31710 break
31711 }
31712 v.Reset(ssaop.OpRsh16x64)
31713 v.AuxInt = ssa.BoolToAuxInt(true)
31714 v.AddArg2(x, con)
31715 return true
31716 }
31717 return false
31718 }
31719 func rewriteValue_OpRsh16x8(v *ssa.Value) bool {
31720 v_1 := v.Args[1]
31721 v_0 := v.Args[0]
31722 b := v.Block
31723
31724
31725 for {
31726 x := v_0
31727 if v_1.Op != ssaop.OpConst8 {
31728 break
31729 }
31730 c := ssa.AuxIntToInt8(v_1.AuxInt)
31731 v.Reset(ssaop.OpRsh16x64)
31732 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31733 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
31734 v.AddArg2(x, v0)
31735 return true
31736 }
31737
31738
31739 for {
31740 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31741 break
31742 }
31743 v.Reset(ssaop.OpConst16)
31744 v.AuxInt = ssa.Int16ToAuxInt(0)
31745 return true
31746 }
31747
31748
31749
31750 for {
31751 if ssa.AuxIntToBool(v.AuxInt) != false {
31752 break
31753 }
31754 x := v_0
31755 con := v_1
31756 if con.Op != ssaop.OpConst8 {
31757 break
31758 }
31759 c := ssa.AuxIntToInt8(con.AuxInt)
31760 if !(0 < c && c < 16) {
31761 break
31762 }
31763 v.Reset(ssaop.OpRsh16x8)
31764 v.AuxInt = ssa.BoolToAuxInt(true)
31765 v.AddArg2(x, con)
31766 return true
31767 }
31768 return false
31769 }
31770 func rewriteValue_OpRsh32Ux16(v *ssa.Value) bool {
31771 v_1 := v.Args[1]
31772 v_0 := v.Args[0]
31773 b := v.Block
31774
31775
31776 for {
31777 x := v_0
31778 if v_1.Op != ssaop.OpConst16 {
31779 break
31780 }
31781 c := ssa.AuxIntToInt16(v_1.AuxInt)
31782 v.Reset(ssaop.OpRsh32Ux64)
31783 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31784 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31785 v.AddArg2(x, v0)
31786 return true
31787 }
31788
31789
31790 for {
31791 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31792 break
31793 }
31794 v.Reset(ssaop.OpConst32)
31795 v.AuxInt = ssa.Int32ToAuxInt(0)
31796 return true
31797 }
31798
31799
31800
31801 for {
31802 if ssa.AuxIntToBool(v.AuxInt) != false {
31803 break
31804 }
31805 x := v_0
31806 con := v_1
31807 if con.Op != ssaop.OpConst16 {
31808 break
31809 }
31810 c := ssa.AuxIntToInt16(con.AuxInt)
31811 if !(0 < c && c < 32) {
31812 break
31813 }
31814 v.Reset(ssaop.OpRsh32Ux16)
31815 v.AuxInt = ssa.BoolToAuxInt(true)
31816 v.AddArg2(x, con)
31817 return true
31818 }
31819 return false
31820 }
31821 func rewriteValue_OpRsh32Ux32(v *ssa.Value) bool {
31822 v_1 := v.Args[1]
31823 v_0 := v.Args[0]
31824 b := v.Block
31825
31826
31827 for {
31828 x := v_0
31829 if v_1.Op != ssaop.OpConst32 {
31830 break
31831 }
31832 c := ssa.AuxIntToInt32(v_1.AuxInt)
31833 v.Reset(ssaop.OpRsh32Ux64)
31834 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31835 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31836 v.AddArg2(x, v0)
31837 return true
31838 }
31839
31840
31841 for {
31842 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31843 break
31844 }
31845 v.Reset(ssaop.OpConst32)
31846 v.AuxInt = ssa.Int32ToAuxInt(0)
31847 return true
31848 }
31849
31850
31851
31852 for {
31853 if ssa.AuxIntToBool(v.AuxInt) != false {
31854 break
31855 }
31856 x := v_0
31857 con := v_1
31858 if con.Op != ssaop.OpConst32 {
31859 break
31860 }
31861 c := ssa.AuxIntToInt32(con.AuxInt)
31862 if !(0 < c && c < 32) {
31863 break
31864 }
31865 v.Reset(ssaop.OpRsh32Ux32)
31866 v.AuxInt = ssa.BoolToAuxInt(true)
31867 v.AddArg2(x, con)
31868 return true
31869 }
31870 return false
31871 }
31872 func rewriteValue_OpRsh32Ux64(v *ssa.Value) bool {
31873 v_1 := v.Args[1]
31874 v_0 := v.Args[0]
31875 b := v.Block
31876 typ := &b.Func.Config.Types
31877
31878
31879 for {
31880 if v_0.Op != ssaop.OpConst32 {
31881 break
31882 }
31883 c := ssa.AuxIntToInt32(v_0.AuxInt)
31884 if v_1.Op != ssaop.OpConst64 {
31885 break
31886 }
31887 d := ssa.AuxIntToInt64(v_1.AuxInt)
31888 v.Reset(ssaop.OpConst32)
31889 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
31890 return true
31891 }
31892
31893
31894 for {
31895 x := v_0
31896 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31897 break
31898 }
31899 v.CopyOf(x)
31900 return true
31901 }
31902
31903
31904 for {
31905 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31906 break
31907 }
31908 v.Reset(ssaop.OpConst32)
31909 v.AuxInt = ssa.Int32ToAuxInt(0)
31910 return true
31911 }
31912
31913
31914
31915 for {
31916 if v_1.Op != ssaop.OpConst64 {
31917 break
31918 }
31919 c := ssa.AuxIntToInt64(v_1.AuxInt)
31920 if !(uint64(c) >= 32) {
31921 break
31922 }
31923 v.Reset(ssaop.OpConst32)
31924 v.AuxInt = ssa.Int32ToAuxInt(0)
31925 return true
31926 }
31927
31928
31929
31930 for {
31931 t := v.Type
31932 if v_0.Op != ssaop.OpRsh32Ux64 {
31933 break
31934 }
31935 _ = v_0.Args[1]
31936 x := v_0.Args[0]
31937 v_0_1 := v_0.Args[1]
31938 if v_0_1.Op != ssaop.OpConst64 {
31939 break
31940 }
31941 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31942 if v_1.Op != ssaop.OpConst64 {
31943 break
31944 }
31945 d := ssa.AuxIntToInt64(v_1.AuxInt)
31946 if !(!uaddOvf(c, d)) {
31947 break
31948 }
31949 v.Reset(ssaop.OpRsh32Ux64)
31950 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31951 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31952 v.AddArg2(x, v0)
31953 return true
31954 }
31955
31956
31957 for {
31958 if v_0.Op != ssaop.OpRsh32x64 {
31959 break
31960 }
31961 x := v_0.Args[0]
31962 if v_1.Op != ssaop.OpConst64 {
31963 break
31964 }
31965 t := v_1.Type
31966 if ssa.AuxIntToInt64(v_1.AuxInt) != 31 {
31967 break
31968 }
31969 v.Reset(ssaop.OpRsh32Ux64)
31970 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31971 v0.AuxInt = ssa.Int64ToAuxInt(31)
31972 v.AddArg2(x, v0)
31973 return true
31974 }
31975
31976
31977
31978 for {
31979 i := v_0
31980 if i.Op != ssaop.OpLsh32x64 {
31981 break
31982 }
31983 _ = i.Args[1]
31984 x := i.Args[0]
31985 i_1 := i.Args[1]
31986 if i_1.Op != ssaop.OpConst64 {
31987 break
31988 }
31989 c := ssa.AuxIntToInt64(i_1.AuxInt)
31990 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
31991 break
31992 }
31993 v.Reset(ssaop.OpAnd32)
31994 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
31995 v0.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(0) >> c))
31996 v.AddArg2(x, v0)
31997 return true
31998 }
31999
32000
32001
32002 for {
32003 if v_0.Op != ssaop.OpLsh32x64 {
32004 break
32005 }
32006 _ = v_0.Args[1]
32007 v_0_0 := v_0.Args[0]
32008 if v_0_0.Op != ssaop.OpRsh32Ux64 {
32009 break
32010 }
32011 _ = v_0_0.Args[1]
32012 x := v_0_0.Args[0]
32013 v_0_0_1 := v_0_0.Args[1]
32014 if v_0_0_1.Op != ssaop.OpConst64 {
32015 break
32016 }
32017 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
32018 v_0_1 := v_0.Args[1]
32019 if v_0_1.Op != ssaop.OpConst64 {
32020 break
32021 }
32022 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
32023 if v_1.Op != ssaop.OpConst64 {
32024 break
32025 }
32026 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
32027 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
32028 break
32029 }
32030 v.Reset(ssaop.OpRsh32Ux64)
32031 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
32032 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
32033 v.AddArg2(x, v0)
32034 return true
32035 }
32036
32037
32038 for {
32039 if v_0.Op != ssaop.OpLsh32x64 {
32040 break
32041 }
32042 _ = v_0.Args[1]
32043 x := v_0.Args[0]
32044 v_0_1 := v_0.Args[1]
32045 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 {
32046 break
32047 }
32048 v.Reset(ssaop.OpZeroExt8to32)
32049 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to8, typ.UInt8)
32050 v0.AddArg(x)
32051 v.AddArg(v0)
32052 return true
32053 }
32054
32055
32056 for {
32057 if v_0.Op != ssaop.OpLsh32x64 {
32058 break
32059 }
32060 _ = v_0.Args[1]
32061 x := v_0.Args[0]
32062 v_0_1 := v_0.Args[1]
32063 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 {
32064 break
32065 }
32066 v.Reset(ssaop.OpZeroExt16to32)
32067 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to16, typ.UInt16)
32068 v0.AddArg(x)
32069 v.AddArg(v0)
32070 return true
32071 }
32072
32073
32074
32075 for {
32076 if ssa.AuxIntToBool(v.AuxInt) != false {
32077 break
32078 }
32079 x := v_0
32080 con := v_1
32081 if con.Op != ssaop.OpConst64 {
32082 break
32083 }
32084 c := ssa.AuxIntToInt64(con.AuxInt)
32085 if !(0 < c && c < 32) {
32086 break
32087 }
32088 v.Reset(ssaop.OpRsh32Ux64)
32089 v.AuxInt = ssa.BoolToAuxInt(true)
32090 v.AddArg2(x, con)
32091 return true
32092 }
32093 return false
32094 }
32095 func rewriteValue_OpRsh32Ux8(v *ssa.Value) bool {
32096 v_1 := v.Args[1]
32097 v_0 := v.Args[0]
32098 b := v.Block
32099
32100
32101 for {
32102 x := v_0
32103 if v_1.Op != ssaop.OpConst8 {
32104 break
32105 }
32106 c := ssa.AuxIntToInt8(v_1.AuxInt)
32107 v.Reset(ssaop.OpRsh32Ux64)
32108 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32109 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32110 v.AddArg2(x, v0)
32111 return true
32112 }
32113
32114
32115 for {
32116 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32117 break
32118 }
32119 v.Reset(ssaop.OpConst32)
32120 v.AuxInt = ssa.Int32ToAuxInt(0)
32121 return true
32122 }
32123
32124
32125
32126 for {
32127 if ssa.AuxIntToBool(v.AuxInt) != false {
32128 break
32129 }
32130 x := v_0
32131 con := v_1
32132 if con.Op != ssaop.OpConst8 {
32133 break
32134 }
32135 c := ssa.AuxIntToInt8(con.AuxInt)
32136 if !(0 < c && c < 32) {
32137 break
32138 }
32139 v.Reset(ssaop.OpRsh32Ux8)
32140 v.AuxInt = ssa.BoolToAuxInt(true)
32141 v.AddArg2(x, con)
32142 return true
32143 }
32144 return false
32145 }
32146 func rewriteValue_OpRsh32x16(v *ssa.Value) bool {
32147 v_1 := v.Args[1]
32148 v_0 := v.Args[0]
32149 b := v.Block
32150
32151
32152 for {
32153 x := v_0
32154 if v_1.Op != ssaop.OpConst16 {
32155 break
32156 }
32157 c := ssa.AuxIntToInt16(v_1.AuxInt)
32158 v.Reset(ssaop.OpRsh32x64)
32159 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32160 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32161 v.AddArg2(x, v0)
32162 return true
32163 }
32164
32165
32166 for {
32167 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32168 break
32169 }
32170 v.Reset(ssaop.OpConst32)
32171 v.AuxInt = ssa.Int32ToAuxInt(0)
32172 return true
32173 }
32174
32175
32176
32177 for {
32178 if ssa.AuxIntToBool(v.AuxInt) != false {
32179 break
32180 }
32181 x := v_0
32182 con := v_1
32183 if con.Op != ssaop.OpConst16 {
32184 break
32185 }
32186 c := ssa.AuxIntToInt16(con.AuxInt)
32187 if !(0 < c && c < 32) {
32188 break
32189 }
32190 v.Reset(ssaop.OpRsh32x16)
32191 v.AuxInt = ssa.BoolToAuxInt(true)
32192 v.AddArg2(x, con)
32193 return true
32194 }
32195 return false
32196 }
32197 func rewriteValue_OpRsh32x32(v *ssa.Value) bool {
32198 v_1 := v.Args[1]
32199 v_0 := v.Args[0]
32200 b := v.Block
32201
32202
32203 for {
32204 x := v_0
32205 if v_1.Op != ssaop.OpConst32 {
32206 break
32207 }
32208 c := ssa.AuxIntToInt32(v_1.AuxInt)
32209 v.Reset(ssaop.OpRsh32x64)
32210 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32211 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32212 v.AddArg2(x, v0)
32213 return true
32214 }
32215
32216
32217 for {
32218 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32219 break
32220 }
32221 v.Reset(ssaop.OpConst32)
32222 v.AuxInt = ssa.Int32ToAuxInt(0)
32223 return true
32224 }
32225
32226
32227
32228 for {
32229 if ssa.AuxIntToBool(v.AuxInt) != false {
32230 break
32231 }
32232 x := v_0
32233 con := v_1
32234 if con.Op != ssaop.OpConst32 {
32235 break
32236 }
32237 c := ssa.AuxIntToInt32(con.AuxInt)
32238 if !(0 < c && c < 32) {
32239 break
32240 }
32241 v.Reset(ssaop.OpRsh32x32)
32242 v.AuxInt = ssa.BoolToAuxInt(true)
32243 v.AddArg2(x, con)
32244 return true
32245 }
32246 return false
32247 }
32248 func rewriteValue_OpRsh32x64(v *ssa.Value) bool {
32249 v_1 := v.Args[1]
32250 v_0 := v.Args[0]
32251 b := v.Block
32252 typ := &b.Func.Config.Types
32253
32254
32255 for {
32256 if v_0.Op != ssaop.OpConst32 {
32257 break
32258 }
32259 c := ssa.AuxIntToInt32(v_0.AuxInt)
32260 if v_1.Op != ssaop.OpConst64 {
32261 break
32262 }
32263 d := ssa.AuxIntToInt64(v_1.AuxInt)
32264 v.Reset(ssaop.OpConst32)
32265 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
32266 return true
32267 }
32268
32269
32270 for {
32271 x := v_0
32272 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32273 break
32274 }
32275 v.CopyOf(x)
32276 return true
32277 }
32278
32279
32280 for {
32281 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32282 break
32283 }
32284 v.Reset(ssaop.OpConst32)
32285 v.AuxInt = ssa.Int32ToAuxInt(0)
32286 return true
32287 }
32288
32289
32290
32291 for {
32292 t := v.Type
32293 if v_0.Op != ssaop.OpRsh32x64 {
32294 break
32295 }
32296 _ = v_0.Args[1]
32297 x := v_0.Args[0]
32298 v_0_1 := v_0.Args[1]
32299 if v_0_1.Op != ssaop.OpConst64 {
32300 break
32301 }
32302 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32303 if v_1.Op != ssaop.OpConst64 {
32304 break
32305 }
32306 d := ssa.AuxIntToInt64(v_1.AuxInt)
32307 if !(!uaddOvf(c, d)) {
32308 break
32309 }
32310 v.Reset(ssaop.OpRsh32x64)
32311 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32312 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32313 v.AddArg2(x, v0)
32314 return true
32315 }
32316
32317
32318 for {
32319 if v_0.Op != ssaop.OpLsh32x64 {
32320 break
32321 }
32322 _ = v_0.Args[1]
32323 x := v_0.Args[0]
32324 v_0_1 := v_0.Args[1]
32325 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 {
32326 break
32327 }
32328 v.Reset(ssaop.OpSignExt8to32)
32329 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to8, typ.Int8)
32330 v0.AddArg(x)
32331 v.AddArg(v0)
32332 return true
32333 }
32334
32335
32336 for {
32337 if v_0.Op != ssaop.OpLsh32x64 {
32338 break
32339 }
32340 _ = v_0.Args[1]
32341 x := v_0.Args[0]
32342 v_0_1 := v_0.Args[1]
32343 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 {
32344 break
32345 }
32346 v.Reset(ssaop.OpSignExt16to32)
32347 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to16, typ.Int16)
32348 v0.AddArg(x)
32349 v.AddArg(v0)
32350 return true
32351 }
32352
32353
32354
32355 for {
32356 if ssa.AuxIntToBool(v.AuxInt) != false {
32357 break
32358 }
32359 x := v_0
32360 con := v_1
32361 if con.Op != ssaop.OpConst64 {
32362 break
32363 }
32364 c := ssa.AuxIntToInt64(con.AuxInt)
32365 if !(0 < c && c < 32) {
32366 break
32367 }
32368 v.Reset(ssaop.OpRsh32x64)
32369 v.AuxInt = ssa.BoolToAuxInt(true)
32370 v.AddArg2(x, con)
32371 return true
32372 }
32373 return false
32374 }
32375 func rewriteValue_OpRsh32x8(v *ssa.Value) bool {
32376 v_1 := v.Args[1]
32377 v_0 := v.Args[0]
32378 b := v.Block
32379
32380
32381 for {
32382 x := v_0
32383 if v_1.Op != ssaop.OpConst8 {
32384 break
32385 }
32386 c := ssa.AuxIntToInt8(v_1.AuxInt)
32387 v.Reset(ssaop.OpRsh32x64)
32388 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32389 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32390 v.AddArg2(x, v0)
32391 return true
32392 }
32393
32394
32395 for {
32396 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32397 break
32398 }
32399 v.Reset(ssaop.OpConst32)
32400 v.AuxInt = ssa.Int32ToAuxInt(0)
32401 return true
32402 }
32403
32404
32405
32406 for {
32407 if ssa.AuxIntToBool(v.AuxInt) != false {
32408 break
32409 }
32410 x := v_0
32411 con := v_1
32412 if con.Op != ssaop.OpConst8 {
32413 break
32414 }
32415 c := ssa.AuxIntToInt8(con.AuxInt)
32416 if !(0 < c && c < 32) {
32417 break
32418 }
32419 v.Reset(ssaop.OpRsh32x8)
32420 v.AuxInt = ssa.BoolToAuxInt(true)
32421 v.AddArg2(x, con)
32422 return true
32423 }
32424 return false
32425 }
32426 func rewriteValue_OpRsh64Ux16(v *ssa.Value) bool {
32427 v_1 := v.Args[1]
32428 v_0 := v.Args[0]
32429 b := v.Block
32430
32431
32432 for {
32433 x := v_0
32434 if v_1.Op != ssaop.OpConst16 {
32435 break
32436 }
32437 c := ssa.AuxIntToInt16(v_1.AuxInt)
32438 v.Reset(ssaop.OpRsh64Ux64)
32439 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32440 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32441 v.AddArg2(x, v0)
32442 return true
32443 }
32444
32445
32446 for {
32447 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32448 break
32449 }
32450 v.Reset(ssaop.OpConst64)
32451 v.AuxInt = ssa.Int64ToAuxInt(0)
32452 return true
32453 }
32454
32455
32456
32457 for {
32458 if ssa.AuxIntToBool(v.AuxInt) != false {
32459 break
32460 }
32461 x := v_0
32462 con := v_1
32463 if con.Op != ssaop.OpConst16 {
32464 break
32465 }
32466 c := ssa.AuxIntToInt16(con.AuxInt)
32467 if !(0 < c && c < 64) {
32468 break
32469 }
32470 v.Reset(ssaop.OpRsh64Ux16)
32471 v.AuxInt = ssa.BoolToAuxInt(true)
32472 v.AddArg2(x, con)
32473 return true
32474 }
32475 return false
32476 }
32477 func rewriteValue_OpRsh64Ux32(v *ssa.Value) bool {
32478 v_1 := v.Args[1]
32479 v_0 := v.Args[0]
32480 b := v.Block
32481
32482
32483 for {
32484 x := v_0
32485 if v_1.Op != ssaop.OpConst32 {
32486 break
32487 }
32488 c := ssa.AuxIntToInt32(v_1.AuxInt)
32489 v.Reset(ssaop.OpRsh64Ux64)
32490 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32491 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32492 v.AddArg2(x, v0)
32493 return true
32494 }
32495
32496
32497 for {
32498 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32499 break
32500 }
32501 v.Reset(ssaop.OpConst64)
32502 v.AuxInt = ssa.Int64ToAuxInt(0)
32503 return true
32504 }
32505
32506
32507
32508 for {
32509 if ssa.AuxIntToBool(v.AuxInt) != false {
32510 break
32511 }
32512 x := v_0
32513 con := v_1
32514 if con.Op != ssaop.OpConst32 {
32515 break
32516 }
32517 c := ssa.AuxIntToInt32(con.AuxInt)
32518 if !(0 < c && c < 64) {
32519 break
32520 }
32521 v.Reset(ssaop.OpRsh64Ux32)
32522 v.AuxInt = ssa.BoolToAuxInt(true)
32523 v.AddArg2(x, con)
32524 return true
32525 }
32526 return false
32527 }
32528 func rewriteValue_OpRsh64Ux64(v *ssa.Value) bool {
32529 v_1 := v.Args[1]
32530 v_0 := v.Args[0]
32531 b := v.Block
32532 typ := &b.Func.Config.Types
32533
32534
32535 for {
32536 if v_0.Op != ssaop.OpConst64 {
32537 break
32538 }
32539 c := ssa.AuxIntToInt64(v_0.AuxInt)
32540 if v_1.Op != ssaop.OpConst64 {
32541 break
32542 }
32543 d := ssa.AuxIntToInt64(v_1.AuxInt)
32544 v.Reset(ssaop.OpConst64)
32545 v.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) >> uint64(d)))
32546 return true
32547 }
32548
32549
32550 for {
32551 x := v_0
32552 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32553 break
32554 }
32555 v.CopyOf(x)
32556 return true
32557 }
32558
32559
32560 for {
32561 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32562 break
32563 }
32564 v.Reset(ssaop.OpConst64)
32565 v.AuxInt = ssa.Int64ToAuxInt(0)
32566 return true
32567 }
32568
32569
32570
32571 for {
32572 if v_1.Op != ssaop.OpConst64 {
32573 break
32574 }
32575 c := ssa.AuxIntToInt64(v_1.AuxInt)
32576 if !(uint64(c) >= 64) {
32577 break
32578 }
32579 v.Reset(ssaop.OpConst64)
32580 v.AuxInt = ssa.Int64ToAuxInt(0)
32581 return true
32582 }
32583
32584
32585
32586 for {
32587 t := v.Type
32588 if v_0.Op != ssaop.OpRsh64Ux64 {
32589 break
32590 }
32591 _ = v_0.Args[1]
32592 x := v_0.Args[0]
32593 v_0_1 := v_0.Args[1]
32594 if v_0_1.Op != ssaop.OpConst64 {
32595 break
32596 }
32597 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32598 if v_1.Op != ssaop.OpConst64 {
32599 break
32600 }
32601 d := ssa.AuxIntToInt64(v_1.AuxInt)
32602 if !(!uaddOvf(c, d)) {
32603 break
32604 }
32605 v.Reset(ssaop.OpRsh64Ux64)
32606 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32607 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32608 v.AddArg2(x, v0)
32609 return true
32610 }
32611
32612
32613 for {
32614 if v_0.Op != ssaop.OpRsh64x64 {
32615 break
32616 }
32617 x := v_0.Args[0]
32618 if v_1.Op != ssaop.OpConst64 {
32619 break
32620 }
32621 t := v_1.Type
32622 if ssa.AuxIntToInt64(v_1.AuxInt) != 63 {
32623 break
32624 }
32625 v.Reset(ssaop.OpRsh64Ux64)
32626 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32627 v0.AuxInt = ssa.Int64ToAuxInt(63)
32628 v.AddArg2(x, v0)
32629 return true
32630 }
32631
32632
32633
32634 for {
32635 i := v_0
32636 if i.Op != ssaop.OpLsh64x64 {
32637 break
32638 }
32639 _ = i.Args[1]
32640 x := i.Args[0]
32641 i_1 := i.Args[1]
32642 if i_1.Op != ssaop.OpConst64 {
32643 break
32644 }
32645 c := ssa.AuxIntToInt64(i_1.AuxInt)
32646 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
32647 break
32648 }
32649 v.Reset(ssaop.OpAnd64)
32650 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
32651 v0.AuxInt = ssa.Int64ToAuxInt(int64(^uint64(0) >> c))
32652 v.AddArg2(x, v0)
32653 return true
32654 }
32655
32656
32657
32658 for {
32659 if v_0.Op != ssaop.OpLsh64x64 {
32660 break
32661 }
32662 _ = v_0.Args[1]
32663 v_0_0 := v_0.Args[0]
32664 if v_0_0.Op != ssaop.OpRsh64Ux64 {
32665 break
32666 }
32667 _ = v_0_0.Args[1]
32668 x := v_0_0.Args[0]
32669 v_0_0_1 := v_0_0.Args[1]
32670 if v_0_0_1.Op != ssaop.OpConst64 {
32671 break
32672 }
32673 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
32674 v_0_1 := v_0.Args[1]
32675 if v_0_1.Op != ssaop.OpConst64 {
32676 break
32677 }
32678 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
32679 if v_1.Op != ssaop.OpConst64 {
32680 break
32681 }
32682 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
32683 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
32684 break
32685 }
32686 v.Reset(ssaop.OpRsh64Ux64)
32687 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
32688 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
32689 v.AddArg2(x, v0)
32690 return true
32691 }
32692
32693
32694 for {
32695 if v_0.Op != ssaop.OpLsh64x64 {
32696 break
32697 }
32698 _ = v_0.Args[1]
32699 x := v_0.Args[0]
32700 v_0_1 := v_0.Args[1]
32701 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 {
32702 break
32703 }
32704 v.Reset(ssaop.OpZeroExt8to64)
32705 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to8, typ.UInt8)
32706 v0.AddArg(x)
32707 v.AddArg(v0)
32708 return true
32709 }
32710
32711
32712 for {
32713 if v_0.Op != ssaop.OpLsh64x64 {
32714 break
32715 }
32716 _ = v_0.Args[1]
32717 x := v_0.Args[0]
32718 v_0_1 := v_0.Args[1]
32719 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 {
32720 break
32721 }
32722 v.Reset(ssaop.OpZeroExt16to64)
32723 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to16, typ.UInt16)
32724 v0.AddArg(x)
32725 v.AddArg(v0)
32726 return true
32727 }
32728
32729
32730 for {
32731 if v_0.Op != ssaop.OpLsh64x64 {
32732 break
32733 }
32734 _ = v_0.Args[1]
32735 x := v_0.Args[0]
32736 v_0_1 := v_0.Args[1]
32737 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 {
32738 break
32739 }
32740 v.Reset(ssaop.OpZeroExt32to64)
32741 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to32, typ.UInt32)
32742 v0.AddArg(x)
32743 v.AddArg(v0)
32744 return true
32745 }
32746
32747
32748
32749 for {
32750 if ssa.AuxIntToBool(v.AuxInt) != false {
32751 break
32752 }
32753 x := v_0
32754 con := v_1
32755 if con.Op != ssaop.OpConst64 {
32756 break
32757 }
32758 c := ssa.AuxIntToInt64(con.AuxInt)
32759 if !(0 < c && c < 64) {
32760 break
32761 }
32762 v.Reset(ssaop.OpRsh64Ux64)
32763 v.AuxInt = ssa.BoolToAuxInt(true)
32764 v.AddArg2(x, con)
32765 return true
32766 }
32767 return false
32768 }
32769 func rewriteValue_OpRsh64Ux8(v *ssa.Value) bool {
32770 v_1 := v.Args[1]
32771 v_0 := v.Args[0]
32772 b := v.Block
32773
32774
32775 for {
32776 x := v_0
32777 if v_1.Op != ssaop.OpConst8 {
32778 break
32779 }
32780 c := ssa.AuxIntToInt8(v_1.AuxInt)
32781 v.Reset(ssaop.OpRsh64Ux64)
32782 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32783 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32784 v.AddArg2(x, v0)
32785 return true
32786 }
32787
32788
32789 for {
32790 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32791 break
32792 }
32793 v.Reset(ssaop.OpConst64)
32794 v.AuxInt = ssa.Int64ToAuxInt(0)
32795 return true
32796 }
32797
32798
32799
32800 for {
32801 if ssa.AuxIntToBool(v.AuxInt) != false {
32802 break
32803 }
32804 x := v_0
32805 con := v_1
32806 if con.Op != ssaop.OpConst8 {
32807 break
32808 }
32809 c := ssa.AuxIntToInt8(con.AuxInt)
32810 if !(0 < c && c < 64) {
32811 break
32812 }
32813 v.Reset(ssaop.OpRsh64Ux8)
32814 v.AuxInt = ssa.BoolToAuxInt(true)
32815 v.AddArg2(x, con)
32816 return true
32817 }
32818 return false
32819 }
32820 func rewriteValue_OpRsh64x16(v *ssa.Value) bool {
32821 v_1 := v.Args[1]
32822 v_0 := v.Args[0]
32823 b := v.Block
32824
32825
32826 for {
32827 x := v_0
32828 if v_1.Op != ssaop.OpConst16 {
32829 break
32830 }
32831 c := ssa.AuxIntToInt16(v_1.AuxInt)
32832 v.Reset(ssaop.OpRsh64x64)
32833 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32834 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32835 v.AddArg2(x, v0)
32836 return true
32837 }
32838
32839
32840 for {
32841 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32842 break
32843 }
32844 v.Reset(ssaop.OpConst64)
32845 v.AuxInt = ssa.Int64ToAuxInt(0)
32846 return true
32847 }
32848
32849
32850
32851 for {
32852 if ssa.AuxIntToBool(v.AuxInt) != false {
32853 break
32854 }
32855 x := v_0
32856 con := v_1
32857 if con.Op != ssaop.OpConst16 {
32858 break
32859 }
32860 c := ssa.AuxIntToInt16(con.AuxInt)
32861 if !(0 < c && c < 64) {
32862 break
32863 }
32864 v.Reset(ssaop.OpRsh64x16)
32865 v.AuxInt = ssa.BoolToAuxInt(true)
32866 v.AddArg2(x, con)
32867 return true
32868 }
32869 return false
32870 }
32871 func rewriteValue_OpRsh64x32(v *ssa.Value) bool {
32872 v_1 := v.Args[1]
32873 v_0 := v.Args[0]
32874 b := v.Block
32875
32876
32877 for {
32878 x := v_0
32879 if v_1.Op != ssaop.OpConst32 {
32880 break
32881 }
32882 c := ssa.AuxIntToInt32(v_1.AuxInt)
32883 v.Reset(ssaop.OpRsh64x64)
32884 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32885 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32886 v.AddArg2(x, v0)
32887 return true
32888 }
32889
32890
32891 for {
32892 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32893 break
32894 }
32895 v.Reset(ssaop.OpConst64)
32896 v.AuxInt = ssa.Int64ToAuxInt(0)
32897 return true
32898 }
32899
32900
32901
32902 for {
32903 if ssa.AuxIntToBool(v.AuxInt) != false {
32904 break
32905 }
32906 x := v_0
32907 con := v_1
32908 if con.Op != ssaop.OpConst32 {
32909 break
32910 }
32911 c := ssa.AuxIntToInt32(con.AuxInt)
32912 if !(0 < c && c < 64) {
32913 break
32914 }
32915 v.Reset(ssaop.OpRsh64x32)
32916 v.AuxInt = ssa.BoolToAuxInt(true)
32917 v.AddArg2(x, con)
32918 return true
32919 }
32920 return false
32921 }
32922 func rewriteValue_OpRsh64x64(v *ssa.Value) bool {
32923 v_1 := v.Args[1]
32924 v_0 := v.Args[0]
32925 b := v.Block
32926 typ := &b.Func.Config.Types
32927
32928
32929 for {
32930 if v_0.Op != ssaop.OpConst64 {
32931 break
32932 }
32933 c := ssa.AuxIntToInt64(v_0.AuxInt)
32934 if v_1.Op != ssaop.OpConst64 {
32935 break
32936 }
32937 d := ssa.AuxIntToInt64(v_1.AuxInt)
32938 v.Reset(ssaop.OpConst64)
32939 v.AuxInt = ssa.Int64ToAuxInt(c >> uint64(d))
32940 return true
32941 }
32942
32943
32944 for {
32945 x := v_0
32946 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32947 break
32948 }
32949 v.CopyOf(x)
32950 return true
32951 }
32952
32953
32954 for {
32955 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32956 break
32957 }
32958 v.Reset(ssaop.OpConst64)
32959 v.AuxInt = ssa.Int64ToAuxInt(0)
32960 return true
32961 }
32962
32963
32964
32965 for {
32966 t := v.Type
32967 if v_0.Op != ssaop.OpRsh64x64 {
32968 break
32969 }
32970 _ = v_0.Args[1]
32971 x := v_0.Args[0]
32972 v_0_1 := v_0.Args[1]
32973 if v_0_1.Op != ssaop.OpConst64 {
32974 break
32975 }
32976 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32977 if v_1.Op != ssaop.OpConst64 {
32978 break
32979 }
32980 d := ssa.AuxIntToInt64(v_1.AuxInt)
32981 if !(!uaddOvf(c, d)) {
32982 break
32983 }
32984 v.Reset(ssaop.OpRsh64x64)
32985 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32986 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32987 v.AddArg2(x, v0)
32988 return true
32989 }
32990
32991
32992 for {
32993 if v_0.Op != ssaop.OpLsh64x64 {
32994 break
32995 }
32996 _ = v_0.Args[1]
32997 x := v_0.Args[0]
32998 v_0_1 := v_0.Args[1]
32999 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 {
33000 break
33001 }
33002 v.Reset(ssaop.OpSignExt8to64)
33003 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to8, typ.Int8)
33004 v0.AddArg(x)
33005 v.AddArg(v0)
33006 return true
33007 }
33008
33009
33010 for {
33011 if v_0.Op != ssaop.OpLsh64x64 {
33012 break
33013 }
33014 _ = v_0.Args[1]
33015 x := v_0.Args[0]
33016 v_0_1 := v_0.Args[1]
33017 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 {
33018 break
33019 }
33020 v.Reset(ssaop.OpSignExt16to64)
33021 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to16, typ.Int16)
33022 v0.AddArg(x)
33023 v.AddArg(v0)
33024 return true
33025 }
33026
33027
33028 for {
33029 if v_0.Op != ssaop.OpLsh64x64 {
33030 break
33031 }
33032 _ = v_0.Args[1]
33033 x := v_0.Args[0]
33034 v_0_1 := v_0.Args[1]
33035 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 {
33036 break
33037 }
33038 v.Reset(ssaop.OpSignExt32to64)
33039 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to32, typ.Int32)
33040 v0.AddArg(x)
33041 v.AddArg(v0)
33042 return true
33043 }
33044
33045
33046
33047 for {
33048 if ssa.AuxIntToBool(v.AuxInt) != false {
33049 break
33050 }
33051 x := v_0
33052 con := v_1
33053 if con.Op != ssaop.OpConst64 {
33054 break
33055 }
33056 c := ssa.AuxIntToInt64(con.AuxInt)
33057 if !(0 < c && c < 64) {
33058 break
33059 }
33060 v.Reset(ssaop.OpRsh64x64)
33061 v.AuxInt = ssa.BoolToAuxInt(true)
33062 v.AddArg2(x, con)
33063 return true
33064 }
33065 return false
33066 }
33067 func rewriteValue_OpRsh64x8(v *ssa.Value) bool {
33068 v_1 := v.Args[1]
33069 v_0 := v.Args[0]
33070 b := v.Block
33071
33072
33073 for {
33074 x := v_0
33075 if v_1.Op != ssaop.OpConst8 {
33076 break
33077 }
33078 c := ssa.AuxIntToInt8(v_1.AuxInt)
33079 v.Reset(ssaop.OpRsh64x64)
33080 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33081 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33082 v.AddArg2(x, v0)
33083 return true
33084 }
33085
33086
33087 for {
33088 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
33089 break
33090 }
33091 v.Reset(ssaop.OpConst64)
33092 v.AuxInt = ssa.Int64ToAuxInt(0)
33093 return true
33094 }
33095
33096
33097
33098 for {
33099 if ssa.AuxIntToBool(v.AuxInt) != false {
33100 break
33101 }
33102 x := v_0
33103 con := v_1
33104 if con.Op != ssaop.OpConst8 {
33105 break
33106 }
33107 c := ssa.AuxIntToInt8(con.AuxInt)
33108 if !(0 < c && c < 64) {
33109 break
33110 }
33111 v.Reset(ssaop.OpRsh64x8)
33112 v.AuxInt = ssa.BoolToAuxInt(true)
33113 v.AddArg2(x, con)
33114 return true
33115 }
33116 return false
33117 }
33118 func rewriteValue_OpRsh8Ux16(v *ssa.Value) bool {
33119 v_1 := v.Args[1]
33120 v_0 := v.Args[0]
33121 b := v.Block
33122
33123
33124 for {
33125 x := v_0
33126 if v_1.Op != ssaop.OpConst16 {
33127 break
33128 }
33129 c := ssa.AuxIntToInt16(v_1.AuxInt)
33130 v.Reset(ssaop.OpRsh8Ux64)
33131 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33132 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
33133 v.AddArg2(x, v0)
33134 return true
33135 }
33136
33137
33138 for {
33139 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33140 break
33141 }
33142 v.Reset(ssaop.OpConst8)
33143 v.AuxInt = ssa.Int8ToAuxInt(0)
33144 return true
33145 }
33146
33147
33148
33149 for {
33150 if ssa.AuxIntToBool(v.AuxInt) != false {
33151 break
33152 }
33153 x := v_0
33154 con := v_1
33155 if con.Op != ssaop.OpConst16 {
33156 break
33157 }
33158 c := ssa.AuxIntToInt16(con.AuxInt)
33159 if !(0 < c && c < 8) {
33160 break
33161 }
33162 v.Reset(ssaop.OpRsh8Ux16)
33163 v.AuxInt = ssa.BoolToAuxInt(true)
33164 v.AddArg2(x, con)
33165 return true
33166 }
33167 return false
33168 }
33169 func rewriteValue_OpRsh8Ux32(v *ssa.Value) bool {
33170 v_1 := v.Args[1]
33171 v_0 := v.Args[0]
33172 b := v.Block
33173
33174
33175 for {
33176 x := v_0
33177 if v_1.Op != ssaop.OpConst32 {
33178 break
33179 }
33180 c := ssa.AuxIntToInt32(v_1.AuxInt)
33181 v.Reset(ssaop.OpRsh8Ux64)
33182 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33183 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
33184 v.AddArg2(x, v0)
33185 return true
33186 }
33187
33188
33189 for {
33190 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33191 break
33192 }
33193 v.Reset(ssaop.OpConst8)
33194 v.AuxInt = ssa.Int8ToAuxInt(0)
33195 return true
33196 }
33197
33198
33199
33200 for {
33201 if ssa.AuxIntToBool(v.AuxInt) != false {
33202 break
33203 }
33204 x := v_0
33205 con := v_1
33206 if con.Op != ssaop.OpConst32 {
33207 break
33208 }
33209 c := ssa.AuxIntToInt32(con.AuxInt)
33210 if !(0 < c && c < 8) {
33211 break
33212 }
33213 v.Reset(ssaop.OpRsh8Ux32)
33214 v.AuxInt = ssa.BoolToAuxInt(true)
33215 v.AddArg2(x, con)
33216 return true
33217 }
33218 return false
33219 }
33220 func rewriteValue_OpRsh8Ux64(v *ssa.Value) bool {
33221 v_1 := v.Args[1]
33222 v_0 := v.Args[0]
33223 b := v.Block
33224 typ := &b.Func.Config.Types
33225
33226
33227 for {
33228 if v_0.Op != ssaop.OpConst8 {
33229 break
33230 }
33231 c := ssa.AuxIntToInt8(v_0.AuxInt)
33232 if v_1.Op != ssaop.OpConst64 {
33233 break
33234 }
33235 d := ssa.AuxIntToInt64(v_1.AuxInt)
33236 v.Reset(ssaop.OpConst8)
33237 v.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) >> uint64(d)))
33238 return true
33239 }
33240
33241
33242 for {
33243 x := v_0
33244 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
33245 break
33246 }
33247 v.CopyOf(x)
33248 return true
33249 }
33250
33251
33252 for {
33253 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33254 break
33255 }
33256 v.Reset(ssaop.OpConst8)
33257 v.AuxInt = ssa.Int8ToAuxInt(0)
33258 return true
33259 }
33260
33261
33262
33263 for {
33264 if v_1.Op != ssaop.OpConst64 {
33265 break
33266 }
33267 c := ssa.AuxIntToInt64(v_1.AuxInt)
33268 if !(uint64(c) >= 8) {
33269 break
33270 }
33271 v.Reset(ssaop.OpConst8)
33272 v.AuxInt = ssa.Int8ToAuxInt(0)
33273 return true
33274 }
33275
33276
33277
33278 for {
33279 t := v.Type
33280 if v_0.Op != ssaop.OpRsh8Ux64 {
33281 break
33282 }
33283 _ = v_0.Args[1]
33284 x := v_0.Args[0]
33285 v_0_1 := v_0.Args[1]
33286 if v_0_1.Op != ssaop.OpConst64 {
33287 break
33288 }
33289 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
33290 if v_1.Op != ssaop.OpConst64 {
33291 break
33292 }
33293 d := ssa.AuxIntToInt64(v_1.AuxInt)
33294 if !(!uaddOvf(c, d)) {
33295 break
33296 }
33297 v.Reset(ssaop.OpRsh8Ux64)
33298 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33299 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
33300 v.AddArg2(x, v0)
33301 return true
33302 }
33303
33304
33305 for {
33306 if v_0.Op != ssaop.OpRsh8x64 {
33307 break
33308 }
33309 x := v_0.Args[0]
33310 if v_1.Op != ssaop.OpConst64 {
33311 break
33312 }
33313 t := v_1.Type
33314 if ssa.AuxIntToInt64(v_1.AuxInt) != 7 {
33315 break
33316 }
33317 v.Reset(ssaop.OpRsh8Ux64)
33318 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33319 v0.AuxInt = ssa.Int64ToAuxInt(7)
33320 v.AddArg2(x, v0)
33321 return true
33322 }
33323
33324
33325
33326 for {
33327 i := v_0
33328 if i.Op != ssaop.OpLsh8x64 {
33329 break
33330 }
33331 _ = i.Args[1]
33332 x := i.Args[0]
33333 i_1 := i.Args[1]
33334 if i_1.Op != ssaop.OpConst64 {
33335 break
33336 }
33337 c := ssa.AuxIntToInt64(i_1.AuxInt)
33338 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
33339 break
33340 }
33341 v.Reset(ssaop.OpAnd8)
33342 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
33343 v0.AuxInt = ssa.Int8ToAuxInt(int8(^uint8(0) >> c))
33344 v.AddArg2(x, v0)
33345 return true
33346 }
33347
33348
33349
33350 for {
33351 if v_0.Op != ssaop.OpLsh8x64 {
33352 break
33353 }
33354 _ = v_0.Args[1]
33355 v_0_0 := v_0.Args[0]
33356 if v_0_0.Op != ssaop.OpRsh8Ux64 {
33357 break
33358 }
33359 _ = v_0_0.Args[1]
33360 x := v_0_0.Args[0]
33361 v_0_0_1 := v_0_0.Args[1]
33362 if v_0_0_1.Op != ssaop.OpConst64 {
33363 break
33364 }
33365 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
33366 v_0_1 := v_0.Args[1]
33367 if v_0_1.Op != ssaop.OpConst64 {
33368 break
33369 }
33370 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
33371 if v_1.Op != ssaop.OpConst64 {
33372 break
33373 }
33374 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
33375 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
33376 break
33377 }
33378 v.Reset(ssaop.OpRsh8Ux64)
33379 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
33380 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
33381 v.AddArg2(x, v0)
33382 return true
33383 }
33384
33385
33386
33387 for {
33388 if ssa.AuxIntToBool(v.AuxInt) != false {
33389 break
33390 }
33391 x := v_0
33392 con := v_1
33393 if con.Op != ssaop.OpConst64 {
33394 break
33395 }
33396 c := ssa.AuxIntToInt64(con.AuxInt)
33397 if !(0 < c && c < 8) {
33398 break
33399 }
33400 v.Reset(ssaop.OpRsh8Ux64)
33401 v.AuxInt = ssa.BoolToAuxInt(true)
33402 v.AddArg2(x, con)
33403 return true
33404 }
33405 return false
33406 }
33407 func rewriteValue_OpRsh8Ux8(v *ssa.Value) bool {
33408 v_1 := v.Args[1]
33409 v_0 := v.Args[0]
33410 b := v.Block
33411
33412
33413 for {
33414 x := v_0
33415 if v_1.Op != ssaop.OpConst8 {
33416 break
33417 }
33418 c := ssa.AuxIntToInt8(v_1.AuxInt)
33419 v.Reset(ssaop.OpRsh8Ux64)
33420 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33421 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33422 v.AddArg2(x, v0)
33423 return true
33424 }
33425
33426
33427 for {
33428 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33429 break
33430 }
33431 v.Reset(ssaop.OpConst8)
33432 v.AuxInt = ssa.Int8ToAuxInt(0)
33433 return true
33434 }
33435
33436
33437
33438 for {
33439 if ssa.AuxIntToBool(v.AuxInt) != false {
33440 break
33441 }
33442 x := v_0
33443 con := v_1
33444 if con.Op != ssaop.OpConst8 {
33445 break
33446 }
33447 c := ssa.AuxIntToInt8(con.AuxInt)
33448 if !(0 < c && c < 8) {
33449 break
33450 }
33451 v.Reset(ssaop.OpRsh8Ux8)
33452 v.AuxInt = ssa.BoolToAuxInt(true)
33453 v.AddArg2(x, con)
33454 return true
33455 }
33456 return false
33457 }
33458 func rewriteValue_OpRsh8x16(v *ssa.Value) bool {
33459 v_1 := v.Args[1]
33460 v_0 := v.Args[0]
33461 b := v.Block
33462
33463
33464 for {
33465 x := v_0
33466 if v_1.Op != ssaop.OpConst16 {
33467 break
33468 }
33469 c := ssa.AuxIntToInt16(v_1.AuxInt)
33470 v.Reset(ssaop.OpRsh8x64)
33471 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33472 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
33473 v.AddArg2(x, v0)
33474 return true
33475 }
33476
33477
33478 for {
33479 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33480 break
33481 }
33482 v.Reset(ssaop.OpConst8)
33483 v.AuxInt = ssa.Int8ToAuxInt(0)
33484 return true
33485 }
33486
33487
33488
33489 for {
33490 if ssa.AuxIntToBool(v.AuxInt) != false {
33491 break
33492 }
33493 x := v_0
33494 con := v_1
33495 if con.Op != ssaop.OpConst16 {
33496 break
33497 }
33498 c := ssa.AuxIntToInt16(con.AuxInt)
33499 if !(0 < c && c < 8) {
33500 break
33501 }
33502 v.Reset(ssaop.OpRsh8x16)
33503 v.AuxInt = ssa.BoolToAuxInt(true)
33504 v.AddArg2(x, con)
33505 return true
33506 }
33507 return false
33508 }
33509 func rewriteValue_OpRsh8x32(v *ssa.Value) bool {
33510 v_1 := v.Args[1]
33511 v_0 := v.Args[0]
33512 b := v.Block
33513
33514
33515 for {
33516 x := v_0
33517 if v_1.Op != ssaop.OpConst32 {
33518 break
33519 }
33520 c := ssa.AuxIntToInt32(v_1.AuxInt)
33521 v.Reset(ssaop.OpRsh8x64)
33522 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33523 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
33524 v.AddArg2(x, v0)
33525 return true
33526 }
33527
33528
33529 for {
33530 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33531 break
33532 }
33533 v.Reset(ssaop.OpConst8)
33534 v.AuxInt = ssa.Int8ToAuxInt(0)
33535 return true
33536 }
33537
33538
33539
33540 for {
33541 if ssa.AuxIntToBool(v.AuxInt) != false {
33542 break
33543 }
33544 x := v_0
33545 con := v_1
33546 if con.Op != ssaop.OpConst32 {
33547 break
33548 }
33549 c := ssa.AuxIntToInt32(con.AuxInt)
33550 if !(0 < c && c < 8) {
33551 break
33552 }
33553 v.Reset(ssaop.OpRsh8x32)
33554 v.AuxInt = ssa.BoolToAuxInt(true)
33555 v.AddArg2(x, con)
33556 return true
33557 }
33558 return false
33559 }
33560 func rewriteValue_OpRsh8x64(v *ssa.Value) bool {
33561 v_1 := v.Args[1]
33562 v_0 := v.Args[0]
33563 b := v.Block
33564
33565
33566 for {
33567 if v_0.Op != ssaop.OpConst8 {
33568 break
33569 }
33570 c := ssa.AuxIntToInt8(v_0.AuxInt)
33571 if v_1.Op != ssaop.OpConst64 {
33572 break
33573 }
33574 d := ssa.AuxIntToInt64(v_1.AuxInt)
33575 v.Reset(ssaop.OpConst8)
33576 v.AuxInt = ssa.Int8ToAuxInt(c >> uint64(d))
33577 return true
33578 }
33579
33580
33581 for {
33582 x := v_0
33583 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
33584 break
33585 }
33586 v.CopyOf(x)
33587 return true
33588 }
33589
33590
33591 for {
33592 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33593 break
33594 }
33595 v.Reset(ssaop.OpConst8)
33596 v.AuxInt = ssa.Int8ToAuxInt(0)
33597 return true
33598 }
33599
33600
33601
33602 for {
33603 t := v.Type
33604 if v_0.Op != ssaop.OpRsh8x64 {
33605 break
33606 }
33607 _ = v_0.Args[1]
33608 x := v_0.Args[0]
33609 v_0_1 := v_0.Args[1]
33610 if v_0_1.Op != ssaop.OpConst64 {
33611 break
33612 }
33613 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
33614 if v_1.Op != ssaop.OpConst64 {
33615 break
33616 }
33617 d := ssa.AuxIntToInt64(v_1.AuxInt)
33618 if !(!uaddOvf(c, d)) {
33619 break
33620 }
33621 v.Reset(ssaop.OpRsh8x64)
33622 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33623 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
33624 v.AddArg2(x, v0)
33625 return true
33626 }
33627
33628
33629
33630 for {
33631 if ssa.AuxIntToBool(v.AuxInt) != false {
33632 break
33633 }
33634 x := v_0
33635 con := v_1
33636 if con.Op != ssaop.OpConst64 {
33637 break
33638 }
33639 c := ssa.AuxIntToInt64(con.AuxInt)
33640 if !(0 < c && c < 8) {
33641 break
33642 }
33643 v.Reset(ssaop.OpRsh8x64)
33644 v.AuxInt = ssa.BoolToAuxInt(true)
33645 v.AddArg2(x, con)
33646 return true
33647 }
33648 return false
33649 }
33650 func rewriteValue_OpRsh8x8(v *ssa.Value) bool {
33651 v_1 := v.Args[1]
33652 v_0 := v.Args[0]
33653 b := v.Block
33654
33655
33656 for {
33657 x := v_0
33658 if v_1.Op != ssaop.OpConst8 {
33659 break
33660 }
33661 c := ssa.AuxIntToInt8(v_1.AuxInt)
33662 v.Reset(ssaop.OpRsh8x64)
33663 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33664 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33665 v.AddArg2(x, v0)
33666 return true
33667 }
33668
33669
33670 for {
33671 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33672 break
33673 }
33674 v.Reset(ssaop.OpConst8)
33675 v.AuxInt = ssa.Int8ToAuxInt(0)
33676 return true
33677 }
33678
33679
33680
33681 for {
33682 if ssa.AuxIntToBool(v.AuxInt) != false {
33683 break
33684 }
33685 x := v_0
33686 con := v_1
33687 if con.Op != ssaop.OpConst8 {
33688 break
33689 }
33690 c := ssa.AuxIntToInt8(con.AuxInt)
33691 if !(0 < c && c < 8) {
33692 break
33693 }
33694 v.Reset(ssaop.OpRsh8x8)
33695 v.AuxInt = ssa.BoolToAuxInt(true)
33696 v.AddArg2(x, con)
33697 return true
33698 }
33699 return false
33700 }
33701 func rewriteValue_OpSelect0(v *ssa.Value) bool {
33702 v_0 := v.Args[0]
33703
33704
33705
33706 for {
33707 a := v_0
33708 if a.Op != ssaop.OpAdd64carry {
33709 break
33710 }
33711 _ = a.Args[2]
33712 x := a.Args[0]
33713 y := a.Args[1]
33714 a_2 := a.Args[2]
33715 if a_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(a_2.AuxInt) != 0 || !(a.Uses == 1) {
33716 break
33717 }
33718 v.Reset(ssaop.OpAdd64)
33719 v.AddArg2(x, y)
33720 return true
33721 }
33722
33723
33724 for {
33725 if v_0.Op != ssaop.OpMakeTuple {
33726 break
33727 }
33728 x := v_0.Args[0]
33729 v.CopyOf(x)
33730 return true
33731 }
33732 return false
33733 }
33734 func rewriteValue_OpSelect1(v *ssa.Value) bool {
33735 v_0 := v.Args[0]
33736
33737
33738 for {
33739 if v_0.Op != ssaop.OpMakeTuple {
33740 break
33741 }
33742 y := v_0.Args[1]
33743 v.CopyOf(y)
33744 return true
33745 }
33746 return false
33747 }
33748 func rewriteValue_OpSelectN(v *ssa.Value) bool {
33749 v_0 := v.Args[0]
33750 b := v.Block
33751 config := b.Func.Config
33752 typ := &b.Func.Config.Types
33753
33754
33755 for {
33756 n := ssa.AuxIntToInt64(v.AuxInt)
33757 m := v_0
33758 if m.Op != ssaop.OpMakeResult {
33759 break
33760 }
33761 v.CopyOf(m.Args[n])
33762 return true
33763 }
33764
33765
33766
33767 for {
33768 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33769 break
33770 }
33771 call := v_0
33772 if call.Op != ssaop.OpStaticCall || len(call.Args) != 3 {
33773 break
33774 }
33775 sym := ssa.AuxToCall(call.Aux)
33776 mem := call.Args[2]
33777 sptr := call.Args[0]
33778 call_1 := call.Args[1]
33779 if call_1.Op != ssaop.OpConst64 {
33780 break
33781 }
33782 c := ssa.AuxIntToInt64(call_1.AuxInt)
33783 if !(isInlinableMemclr(config, int64(c)) && ssa.IsSameCall(sym, "runtime.memclrNoHeapPointers") && call.Uses == 1 && ssa.Clobber(call)) {
33784 break
33785 }
33786 v.Reset(ssaop.OpZero)
33787 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
33788 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33789 v.AddArg2(sptr, mem)
33790 return true
33791 }
33792
33793
33794
33795 for {
33796 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33797 break
33798 }
33799 call := v_0
33800 if call.Op != ssaop.OpStaticCall || len(call.Args) != 3 {
33801 break
33802 }
33803 sym := ssa.AuxToCall(call.Aux)
33804 mem := call.Args[2]
33805 sptr := call.Args[0]
33806 call_1 := call.Args[1]
33807 if call_1.Op != ssaop.OpConst32 {
33808 break
33809 }
33810 c := ssa.AuxIntToInt32(call_1.AuxInt)
33811 if !(isInlinableMemclr(config, int64(c)) && ssa.IsSameCall(sym, "runtime.memclrNoHeapPointers") && call.Uses == 1 && ssa.Clobber(call)) {
33812 break
33813 }
33814 v.Reset(ssaop.OpZero)
33815 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
33816 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33817 v.AddArg2(sptr, mem)
33818 return true
33819 }
33820
33821
33822
33823 for {
33824 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33825 break
33826 }
33827 call := v_0
33828 if call.Op != ssaop.OpStaticCall || len(call.Args) != 1 {
33829 break
33830 }
33831 sym := ssa.AuxToCall(call.Aux)
33832 s1 := call.Args[0]
33833 if s1.Op != ssaop.OpStore {
33834 break
33835 }
33836 _ = s1.Args[2]
33837 s1_1 := s1.Args[1]
33838 if s1_1.Op != ssaop.OpConst64 {
33839 break
33840 }
33841 sz := ssa.AuxIntToInt64(s1_1.AuxInt)
33842 s2 := s1.Args[2]
33843 if s2.Op != ssaop.OpStore {
33844 break
33845 }
33846 _ = s2.Args[2]
33847 src := s2.Args[1]
33848 s3 := s2.Args[2]
33849 if s3.Op != ssaop.OpStore {
33850 break
33851 }
33852 mem := s3.Args[2]
33853 dst := s3.Args[1]
33854 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)) {
33855 break
33856 }
33857 v.Reset(ssaop.OpMove)
33858 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33859 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33860 v.AddArg3(dst, src, mem)
33861 return true
33862 }
33863
33864
33865
33866 for {
33867 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33868 break
33869 }
33870 call := v_0
33871 if call.Op != ssaop.OpStaticCall || len(call.Args) != 1 {
33872 break
33873 }
33874 sym := ssa.AuxToCall(call.Aux)
33875 s1 := call.Args[0]
33876 if s1.Op != ssaop.OpStore {
33877 break
33878 }
33879 _ = s1.Args[2]
33880 s1_1 := s1.Args[1]
33881 if s1_1.Op != ssaop.OpConst32 {
33882 break
33883 }
33884 sz := ssa.AuxIntToInt32(s1_1.AuxInt)
33885 s2 := s1.Args[2]
33886 if s2.Op != ssaop.OpStore {
33887 break
33888 }
33889 _ = s2.Args[2]
33890 src := s2.Args[1]
33891 s3 := s2.Args[2]
33892 if s3.Op != ssaop.OpStore {
33893 break
33894 }
33895 mem := s3.Args[2]
33896 dst := s3.Args[1]
33897 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)) {
33898 break
33899 }
33900 v.Reset(ssaop.OpMove)
33901 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33902 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33903 v.AddArg3(dst, src, mem)
33904 return true
33905 }
33906
33907
33908
33909 for {
33910 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33911 break
33912 }
33913 call := v_0
33914 if call.Op != ssaop.OpStaticCall || len(call.Args) != 4 {
33915 break
33916 }
33917 sym := ssa.AuxToCall(call.Aux)
33918 mem := call.Args[3]
33919 dst := call.Args[0]
33920 src := call.Args[1]
33921 call_2 := call.Args[2]
33922 if call_2.Op != ssaop.OpConst64 {
33923 break
33924 }
33925 sz := ssa.AuxIntToInt64(call_2.AuxInt)
33926 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33927 break
33928 }
33929 v.Reset(ssaop.OpMove)
33930 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33931 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33932 v.AddArg3(dst, src, mem)
33933 return true
33934 }
33935
33936
33937
33938 for {
33939 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33940 break
33941 }
33942 call := v_0
33943 if call.Op != ssaop.OpStaticCall || len(call.Args) != 4 {
33944 break
33945 }
33946 sym := ssa.AuxToCall(call.Aux)
33947 mem := call.Args[3]
33948 dst := call.Args[0]
33949 src := call.Args[1]
33950 call_2 := call.Args[2]
33951 if call_2.Op != ssaop.OpConst32 {
33952 break
33953 }
33954 sz := ssa.AuxIntToInt32(call_2.AuxInt)
33955 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33956 break
33957 }
33958 v.Reset(ssaop.OpMove)
33959 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33960 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33961 v.AddArg3(dst, src, mem)
33962 return true
33963 }
33964
33965
33966
33967 for {
33968 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33969 break
33970 }
33971 call := v_0
33972 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 4 {
33973 break
33974 }
33975 sym := ssa.AuxToCall(call.Aux)
33976 mem := call.Args[3]
33977 dst := call.Args[0]
33978 src := call.Args[1]
33979 call_2 := call.Args[2]
33980 if call_2.Op != ssaop.OpConst64 {
33981 break
33982 }
33983 sz := ssa.AuxIntToInt64(call_2.AuxInt)
33984 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33985 break
33986 }
33987 v.Reset(ssaop.OpMove)
33988 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33989 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33990 v.AddArg3(dst, src, mem)
33991 return true
33992 }
33993
33994
33995
33996 for {
33997 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33998 break
33999 }
34000 call := v_0
34001 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 4 {
34002 break
34003 }
34004 sym := ssa.AuxToCall(call.Aux)
34005 mem := call.Args[3]
34006 dst := call.Args[0]
34007 src := call.Args[1]
34008 call_2 := call.Args[2]
34009 if call_2.Op != ssaop.OpConst32 {
34010 break
34011 }
34012 sz := ssa.AuxIntToInt32(call_2.AuxInt)
34013 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
34014 break
34015 }
34016 v.Reset(ssaop.OpMove)
34017 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
34018 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
34019 v.AddArg3(dst, src, mem)
34020 return true
34021 }
34022
34023
34024
34025 for {
34026 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
34027 break
34028 }
34029 call := v_0
34030 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 2 {
34031 break
34032 }
34033 sym := ssa.AuxToCall(call.Aux)
34034 x := call.Args[1]
34035 if !(needRaceCleanup(sym, call) && ssa.Clobber(call)) {
34036 break
34037 }
34038 v.CopyOf(x)
34039 return true
34040 }
34041
34042
34043
34044 for {
34045 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
34046 break
34047 }
34048 call := v_0
34049 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 1 {
34050 break
34051 }
34052 sym := ssa.AuxToCall(call.Aux)
34053 x := call.Args[0]
34054 if !(needRaceCleanup(sym, call) && ssa.Clobber(call)) {
34055 break
34056 }
34057 v.CopyOf(x)
34058 return true
34059 }
34060
34061
34062
34063 for {
34064 if ssa.AuxIntToInt64(v.AuxInt) != 1 || v_0.Op != ssaop.OpStaticCall || len(v_0.Args) != 6 {
34065 break
34066 }
34067 sym := ssa.AuxToCall(v_0.Aux)
34068 _ = v_0.Args[1]
34069 newLen := v_0.Args[1]
34070 if newLen.Op != ssaop.OpConst64 || !(v.Type.IsInteger() && (ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias"))) {
34071 break
34072 }
34073 v.CopyOf(newLen)
34074 return true
34075 }
34076
34077
34078
34079 for {
34080 if ssa.AuxIntToInt64(v.AuxInt) != 1 || v_0.Op != ssaop.OpStaticCall || len(v_0.Args) != 6 {
34081 break
34082 }
34083 sym := ssa.AuxToCall(v_0.Aux)
34084 _ = v_0.Args[1]
34085 newLen := v_0.Args[1]
34086 if newLen.Op != ssaop.OpConst32 || !(v.Type.IsInteger() && (ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias"))) {
34087 break
34088 }
34089 v.CopyOf(newLen)
34090 return true
34091 }
34092
34093
34094
34095 for {
34096 if ssa.AuxIntToInt64(v.AuxInt) != 0 || v_0.Op != ssaop.OpStaticLECall || len(v_0.Args) != 3 {
34097 break
34098 }
34099 f := ssa.AuxToCall(v_0.Aux)
34100 _ = v_0.Args[2]
34101 x := v_0.Args[0]
34102 y := v_0.Args[1]
34103 v_0_2 := v_0.Args[2]
34104 if v_0_2.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0_2.AuxInt) != 1 {
34105 break
34106 }
34107 c := v_0_2.Args[0]
34108 if c.Op != ssaop.OpStaticLECall || len(c.Args) != 3 {
34109 break
34110 }
34111 g := ssa.AuxToCall(c.Aux)
34112 if x != c.Args[0] || y != c.Args[1] || !(ssa.IsSameCall(f, "runtime.cmpstring") && ssa.IsSameCall(g, "runtime.cmpstring")) {
34113 break
34114 }
34115 b = c.Block
34116 v0 := b.NewValue0(v.Pos, ssaop.OpSelectN, typ.Int)
34117 v.CopyOf(v0)
34118 v0.AuxInt = ssa.Int64ToAuxInt(0)
34119 v0.AddArg(c)
34120 return true
34121 }
34122
34123
34124
34125 for {
34126 if ssa.AuxIntToInt64(v.AuxInt) != 1 {
34127 break
34128 }
34129 c := v_0
34130 if c.Op != ssaop.OpStaticLECall || len(c.Args) != 3 {
34131 break
34132 }
34133 f := ssa.AuxToCall(c.Aux)
34134 mem := c.Args[2]
34135 if !(c.Uses == 1 && ssa.IsSameCall(f, "runtime.cmpstring") && ssa.Clobber(c)) {
34136 break
34137 }
34138 v.CopyOf(mem)
34139 return true
34140 }
34141 return false
34142 }
34143 func rewriteValue_OpSignExt16to32(v *ssa.Value) bool {
34144 v_0 := v.Args[0]
34145
34146
34147 for {
34148 if v_0.Op != ssaop.OpConst16 {
34149 break
34150 }
34151 c := ssa.AuxIntToInt16(v_0.AuxInt)
34152 v.Reset(ssaop.OpConst32)
34153 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
34154 return true
34155 }
34156
34157
34158
34159 for {
34160 if v_0.Op != ssaop.OpTrunc32to16 {
34161 break
34162 }
34163 x := v_0.Args[0]
34164 if x.Op != ssaop.OpRsh32x64 {
34165 break
34166 }
34167 _ = x.Args[1]
34168 x_1 := x.Args[1]
34169 if x_1.Op != ssaop.OpConst64 {
34170 break
34171 }
34172 s := ssa.AuxIntToInt64(x_1.AuxInt)
34173 if !(s >= 16) {
34174 break
34175 }
34176 v.CopyOf(x)
34177 return true
34178 }
34179 return false
34180 }
34181 func rewriteValue_OpSignExt16to64(v *ssa.Value) bool {
34182 v_0 := v.Args[0]
34183
34184
34185 for {
34186 if v_0.Op != ssaop.OpConst16 {
34187 break
34188 }
34189 c := ssa.AuxIntToInt16(v_0.AuxInt)
34190 v.Reset(ssaop.OpConst64)
34191 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34192 return true
34193 }
34194
34195
34196
34197 for {
34198 if v_0.Op != ssaop.OpTrunc64to16 {
34199 break
34200 }
34201 x := v_0.Args[0]
34202 if x.Op != ssaop.OpRsh64x64 {
34203 break
34204 }
34205 _ = x.Args[1]
34206 x_1 := x.Args[1]
34207 if x_1.Op != ssaop.OpConst64 {
34208 break
34209 }
34210 s := ssa.AuxIntToInt64(x_1.AuxInt)
34211 if !(s >= 48) {
34212 break
34213 }
34214 v.CopyOf(x)
34215 return true
34216 }
34217 return false
34218 }
34219 func rewriteValue_OpSignExt32to64(v *ssa.Value) bool {
34220 v_0 := v.Args[0]
34221
34222
34223 for {
34224 if v_0.Op != ssaop.OpConst32 {
34225 break
34226 }
34227 c := ssa.AuxIntToInt32(v_0.AuxInt)
34228 v.Reset(ssaop.OpConst64)
34229 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34230 return true
34231 }
34232
34233
34234
34235 for {
34236 if v_0.Op != ssaop.OpTrunc64to32 {
34237 break
34238 }
34239 x := v_0.Args[0]
34240 if x.Op != ssaop.OpRsh64x64 {
34241 break
34242 }
34243 _ = x.Args[1]
34244 x_1 := x.Args[1]
34245 if x_1.Op != ssaop.OpConst64 {
34246 break
34247 }
34248 s := ssa.AuxIntToInt64(x_1.AuxInt)
34249 if !(s >= 32) {
34250 break
34251 }
34252 v.CopyOf(x)
34253 return true
34254 }
34255 return false
34256 }
34257 func rewriteValue_OpSignExt8to16(v *ssa.Value) bool {
34258 v_0 := v.Args[0]
34259
34260
34261 for {
34262 if v_0.Op != ssaop.OpConst8 {
34263 break
34264 }
34265 c := ssa.AuxIntToInt8(v_0.AuxInt)
34266 v.Reset(ssaop.OpConst16)
34267 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
34268 return true
34269 }
34270
34271
34272
34273 for {
34274 if v_0.Op != ssaop.OpTrunc16to8 {
34275 break
34276 }
34277 x := v_0.Args[0]
34278 if x.Op != ssaop.OpRsh16x64 {
34279 break
34280 }
34281 _ = x.Args[1]
34282 x_1 := x.Args[1]
34283 if x_1.Op != ssaop.OpConst64 {
34284 break
34285 }
34286 s := ssa.AuxIntToInt64(x_1.AuxInt)
34287 if !(s >= 8) {
34288 break
34289 }
34290 v.CopyOf(x)
34291 return true
34292 }
34293
34294
34295 for {
34296 cvt := v_0
34297 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34298 break
34299 }
34300 v.Reset(ssaop.OpZeroExt8to16)
34301 v.AddArg(cvt)
34302 return true
34303 }
34304 return false
34305 }
34306 func rewriteValue_OpSignExt8to32(v *ssa.Value) bool {
34307 v_0 := v.Args[0]
34308
34309
34310 for {
34311 if v_0.Op != ssaop.OpConst8 {
34312 break
34313 }
34314 c := ssa.AuxIntToInt8(v_0.AuxInt)
34315 v.Reset(ssaop.OpConst32)
34316 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
34317 return true
34318 }
34319
34320
34321
34322 for {
34323 if v_0.Op != ssaop.OpTrunc32to8 {
34324 break
34325 }
34326 x := v_0.Args[0]
34327 if x.Op != ssaop.OpRsh32x64 {
34328 break
34329 }
34330 _ = x.Args[1]
34331 x_1 := x.Args[1]
34332 if x_1.Op != ssaop.OpConst64 {
34333 break
34334 }
34335 s := ssa.AuxIntToInt64(x_1.AuxInt)
34336 if !(s >= 24) {
34337 break
34338 }
34339 v.CopyOf(x)
34340 return true
34341 }
34342
34343
34344 for {
34345 cvt := v_0
34346 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34347 break
34348 }
34349 v.Reset(ssaop.OpZeroExt8to32)
34350 v.AddArg(cvt)
34351 return true
34352 }
34353 return false
34354 }
34355 func rewriteValue_OpSignExt8to64(v *ssa.Value) bool {
34356 v_0 := v.Args[0]
34357
34358
34359 for {
34360 if v_0.Op != ssaop.OpConst8 {
34361 break
34362 }
34363 c := ssa.AuxIntToInt8(v_0.AuxInt)
34364 v.Reset(ssaop.OpConst64)
34365 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34366 return true
34367 }
34368
34369
34370
34371 for {
34372 if v_0.Op != ssaop.OpTrunc64to8 {
34373 break
34374 }
34375 x := v_0.Args[0]
34376 if x.Op != ssaop.OpRsh64x64 {
34377 break
34378 }
34379 _ = x.Args[1]
34380 x_1 := x.Args[1]
34381 if x_1.Op != ssaop.OpConst64 {
34382 break
34383 }
34384 s := ssa.AuxIntToInt64(x_1.AuxInt)
34385 if !(s >= 56) {
34386 break
34387 }
34388 v.CopyOf(x)
34389 return true
34390 }
34391
34392
34393 for {
34394 cvt := v_0
34395 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34396 break
34397 }
34398 v.Reset(ssaop.OpZeroExt8to64)
34399 v.AddArg(cvt)
34400 return true
34401 }
34402 return false
34403 }
34404 func rewriteValue_OpSliceCap(v *ssa.Value) bool {
34405 v_0 := v.Args[0]
34406
34407
34408 for {
34409 if v_0.Op != ssaop.OpSliceMake {
34410 break
34411 }
34412 _ = v_0.Args[2]
34413 v_0_2 := v_0.Args[2]
34414 if v_0_2.Op != ssaop.OpConst64 {
34415 break
34416 }
34417 t := v_0_2.Type
34418 c := ssa.AuxIntToInt64(v_0_2.AuxInt)
34419 v.Reset(ssaop.OpConst64)
34420 v.Type = t
34421 v.AuxInt = ssa.Int64ToAuxInt(c)
34422 return true
34423 }
34424
34425
34426 for {
34427 if v_0.Op != ssaop.OpSliceMake {
34428 break
34429 }
34430 _ = v_0.Args[2]
34431 v_0_2 := v_0.Args[2]
34432 if v_0_2.Op != ssaop.OpConst32 {
34433 break
34434 }
34435 t := v_0_2.Type
34436 c := ssa.AuxIntToInt32(v_0_2.AuxInt)
34437 v.Reset(ssaop.OpConst32)
34438 v.Type = t
34439 v.AuxInt = ssa.Int32ToAuxInt(c)
34440 return true
34441 }
34442
34443
34444 for {
34445 if v_0.Op != ssaop.OpSliceMake {
34446 break
34447 }
34448 _ = v_0.Args[2]
34449 v_0_2 := v_0.Args[2]
34450 if v_0_2.Op != ssaop.OpSliceCap {
34451 break
34452 }
34453 x := v_0_2.Args[0]
34454 v.Reset(ssaop.OpSliceCap)
34455 v.AddArg(x)
34456 return true
34457 }
34458
34459
34460 for {
34461 if v_0.Op != ssaop.OpSliceMake {
34462 break
34463 }
34464 _ = v_0.Args[2]
34465 v_0_2 := v_0.Args[2]
34466 if v_0_2.Op != ssaop.OpSliceLen {
34467 break
34468 }
34469 x := v_0_2.Args[0]
34470 v.Reset(ssaop.OpSliceLen)
34471 v.AddArg(x)
34472 return true
34473 }
34474
34475
34476 for {
34477 if v_0.Op != ssaop.OpPhi || len(v_0.Args) != 2 {
34478 break
34479 }
34480 _ = v_0.Args[1]
34481 v_0_0 := v_0.Args[0]
34482 if v_0_0.Op != ssaop.OpSliceMake {
34483 break
34484 }
34485 x := v_0_0.Args[2]
34486 v_0_1 := v_0.Args[1]
34487 if v_0_1.Op != ssaop.OpSliceMake {
34488 break
34489 }
34490 _ = v_0_1.Args[2]
34491 if x != v_0_1.Args[2] {
34492 break
34493 }
34494 v.CopyOf(x)
34495 return true
34496 }
34497 return false
34498 }
34499 func rewriteValue_OpSliceLen(v *ssa.Value) bool {
34500 v_0 := v.Args[0]
34501
34502
34503 for {
34504 if v_0.Op != ssaop.OpSliceMake {
34505 break
34506 }
34507 _ = v_0.Args[1]
34508 v_0_1 := v_0.Args[1]
34509 if v_0_1.Op != ssaop.OpConst64 {
34510 break
34511 }
34512 t := v_0_1.Type
34513 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
34514 v.Reset(ssaop.OpConst64)
34515 v.Type = t
34516 v.AuxInt = ssa.Int64ToAuxInt(c)
34517 return true
34518 }
34519
34520
34521 for {
34522 if v_0.Op != ssaop.OpSliceMake {
34523 break
34524 }
34525 _ = v_0.Args[1]
34526 v_0_1 := v_0.Args[1]
34527 if v_0_1.Op != ssaop.OpConst32 {
34528 break
34529 }
34530 t := v_0_1.Type
34531 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
34532 v.Reset(ssaop.OpConst32)
34533 v.Type = t
34534 v.AuxInt = ssa.Int32ToAuxInt(c)
34535 return true
34536 }
34537
34538
34539 for {
34540 if v_0.Op != ssaop.OpSliceMake {
34541 break
34542 }
34543 _ = v_0.Args[1]
34544 v_0_1 := v_0.Args[1]
34545 if v_0_1.Op != ssaop.OpSliceLen {
34546 break
34547 }
34548 x := v_0_1.Args[0]
34549 v.Reset(ssaop.OpSliceLen)
34550 v.AddArg(x)
34551 return true
34552 }
34553
34554
34555 for {
34556 if v_0.Op != ssaop.OpPhi || len(v_0.Args) != 2 {
34557 break
34558 }
34559 _ = v_0.Args[1]
34560 v_0_0 := v_0.Args[0]
34561 if v_0_0.Op != ssaop.OpSliceMake {
34562 break
34563 }
34564 x := v_0_0.Args[1]
34565 v_0_1 := v_0.Args[1]
34566 if v_0_1.Op != ssaop.OpSliceMake {
34567 break
34568 }
34569 _ = v_0_1.Args[1]
34570 if x != v_0_1.Args[1] {
34571 break
34572 }
34573 v.CopyOf(x)
34574 return true
34575 }
34576
34577
34578
34579 for {
34580 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34581 break
34582 }
34583 v_0_0 := v_0.Args[0]
34584 if v_0_0.Op != ssaop.OpStaticLECall || len(v_0_0.Args) != 6 {
34585 break
34586 }
34587 sym := ssa.AuxToCall(v_0_0.Aux)
34588 _ = v_0_0.Args[1]
34589 newLen := v_0_0.Args[1]
34590 if newLen.Op != ssaop.OpConst64 || !(ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias")) {
34591 break
34592 }
34593 v.CopyOf(newLen)
34594 return true
34595 }
34596
34597
34598
34599 for {
34600 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34601 break
34602 }
34603 v_0_0 := v_0.Args[0]
34604 if v_0_0.Op != ssaop.OpStaticLECall || len(v_0_0.Args) != 6 {
34605 break
34606 }
34607 sym := ssa.AuxToCall(v_0_0.Aux)
34608 _ = v_0_0.Args[1]
34609 newLen := v_0_0.Args[1]
34610 if newLen.Op != ssaop.OpConst32 || !(ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias")) {
34611 break
34612 }
34613 v.CopyOf(newLen)
34614 return true
34615 }
34616 return false
34617 }
34618 func rewriteValue_OpSliceMake(v *ssa.Value) bool {
34619 v_2 := v.Args[2]
34620 v_1 := v.Args[1]
34621 v_0 := v.Args[0]
34622 b := v.Block
34623
34624
34625
34626 for {
34627 if v_0.Op != ssaop.OpAddPtr {
34628 break
34629 }
34630 t := v_0.Type
34631 _ = v_0.Args[1]
34632 x := v_0.Args[0]
34633 v_0_1 := v_0.Args[1]
34634 if v_0_1.Op != ssaop.OpAnd64 {
34635 break
34636 }
34637 _ = v_0_1.Args[1]
34638 v_0_1_0 := v_0_1.Args[0]
34639 v_0_1_1 := v_0_1.Args[1]
34640 for _i0 := 0; _i0 <= 1; _i0, v_0_1_0, v_0_1_1 = _i0+1, v_0_1_1, v_0_1_0 {
34641 y := v_0_1_0
34642 if v_0_1_1.Op != ssaop.OpSlicemask {
34643 continue
34644 }
34645 w := v_1
34646 if w.Op != ssaop.OpConst64 {
34647 continue
34648 }
34649 c := ssa.AuxIntToInt64(w.AuxInt)
34650 z := v_2
34651 if !(c > 0) {
34652 continue
34653 }
34654 v.Reset(ssaop.OpSliceMake)
34655 v0 := b.NewValue0(v.Pos, ssaop.OpAddPtr, t)
34656 v0.AddArg2(x, y)
34657 v.AddArg3(v0, w, z)
34658 return true
34659 }
34660 break
34661 }
34662
34663
34664
34665 for {
34666 if v_0.Op != ssaop.OpAddPtr {
34667 break
34668 }
34669 t := v_0.Type
34670 _ = v_0.Args[1]
34671 x := v_0.Args[0]
34672 v_0_1 := v_0.Args[1]
34673 if v_0_1.Op != ssaop.OpAnd32 {
34674 break
34675 }
34676 _ = v_0_1.Args[1]
34677 v_0_1_0 := v_0_1.Args[0]
34678 v_0_1_1 := v_0_1.Args[1]
34679 for _i0 := 0; _i0 <= 1; _i0, v_0_1_0, v_0_1_1 = _i0+1, v_0_1_1, v_0_1_0 {
34680 y := v_0_1_0
34681 if v_0_1_1.Op != ssaop.OpSlicemask {
34682 continue
34683 }
34684 w := v_1
34685 if w.Op != ssaop.OpConst32 {
34686 continue
34687 }
34688 c := ssa.AuxIntToInt32(w.AuxInt)
34689 z := v_2
34690 if !(c > 0) {
34691 continue
34692 }
34693 v.Reset(ssaop.OpSliceMake)
34694 v0 := b.NewValue0(v.Pos, ssaop.OpAddPtr, t)
34695 v0.AddArg2(x, y)
34696 v.AddArg3(v0, w, z)
34697 return true
34698 }
34699 break
34700 }
34701 return false
34702 }
34703 func rewriteValue_OpSlicePtr(v *ssa.Value) bool {
34704 v_0 := v.Args[0]
34705
34706
34707 for {
34708 if v_0.Op != ssaop.OpSliceMake {
34709 break
34710 }
34711 v_0_0 := v_0.Args[0]
34712 if v_0_0.Op != ssaop.OpSlicePtr {
34713 break
34714 }
34715 x := v_0_0.Args[0]
34716 v.Reset(ssaop.OpSlicePtr)
34717 v.AddArg(x)
34718 return true
34719 }
34720 return false
34721 }
34722 func rewriteValue_OpSlicemask(v *ssa.Value) bool {
34723 v_0 := v.Args[0]
34724
34725
34726
34727 for {
34728 if v_0.Op != ssaop.OpConst32 {
34729 break
34730 }
34731 x := ssa.AuxIntToInt32(v_0.AuxInt)
34732 if !(x > 0) {
34733 break
34734 }
34735 v.Reset(ssaop.OpConst32)
34736 v.AuxInt = ssa.Int32ToAuxInt(-1)
34737 return true
34738 }
34739
34740
34741 for {
34742 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
34743 break
34744 }
34745 v.Reset(ssaop.OpConst32)
34746 v.AuxInt = ssa.Int32ToAuxInt(0)
34747 return true
34748 }
34749
34750
34751
34752 for {
34753 if v_0.Op != ssaop.OpConst64 {
34754 break
34755 }
34756 x := ssa.AuxIntToInt64(v_0.AuxInt)
34757 if !(x > 0) {
34758 break
34759 }
34760 v.Reset(ssaop.OpConst64)
34761 v.AuxInt = ssa.Int64ToAuxInt(-1)
34762 return true
34763 }
34764
34765
34766 for {
34767 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34768 break
34769 }
34770 v.Reset(ssaop.OpConst64)
34771 v.AuxInt = ssa.Int64ToAuxInt(0)
34772 return true
34773 }
34774 return false
34775 }
34776 func rewriteValue_OpSqrt(v *ssa.Value) bool {
34777 v_0 := v.Args[0]
34778
34779
34780
34781 for {
34782 if v_0.Op != ssaop.OpConst64F {
34783 break
34784 }
34785 c := ssa.AuxIntToFloat64(v_0.AuxInt)
34786 if !(!math.IsNaN(math.Sqrt(c))) {
34787 break
34788 }
34789 v.Reset(ssaop.OpConst64F)
34790 v.AuxInt = ssa.Float64ToAuxInt(math.Sqrt(c))
34791 return true
34792 }
34793 return false
34794 }
34795 func rewriteValue_OpStaticCall(v *ssa.Value) bool {
34796 b := v.Block
34797 typ := &b.Func.Config.Types
34798
34799
34800
34801 for {
34802 if len(v.Args) != 4 {
34803 break
34804 }
34805 callAux := ssa.AuxToCall(v.Aux)
34806 mem := v.Args[3]
34807 p := v.Args[0]
34808 q := v.Args[1]
34809 if !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.IsSamePtr(p, q)) {
34810 break
34811 }
34812 v.Reset(ssaop.OpMakeResult)
34813 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
34814 v0.AuxInt = ssa.BoolToAuxInt(true)
34815 v.AddArg2(v0, mem)
34816 return true
34817 }
34818 return false
34819 }
34820 func rewriteValue_OpStaticLECall(v *ssa.Value) bool {
34821 b := v.Block
34822 config := b.Func.Config
34823 typ := &b.Func.Config.Types
34824
34825
34826
34827 for {
34828 if len(v.Args) != 4 {
34829 break
34830 }
34831 callAux := ssa.AuxToCall(v.Aux)
34832 mem := v.Args[3]
34833 sptr := v.Args[0]
34834 v_1 := v.Args[1]
34835 if v_1.Op != ssaop.OpAddr {
34836 break
34837 }
34838 scon := ssa.AuxToSym(v_1.Aux)
34839 v_1_0 := v_1.Args[0]
34840 if v_1_0.Op != ssaop.OpSB {
34841 break
34842 }
34843 v_2 := v.Args[2]
34844 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34845 break
34846 }
34847 v.Reset(ssaop.OpMakeResult)
34848 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34849 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34850 v1.AddArg2(sptr, mem)
34851 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34852 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34853 v0.AddArg2(v1, v2)
34854 v.AddArg2(v0, mem)
34855 return true
34856 }
34857
34858
34859
34860 for {
34861 if len(v.Args) != 4 {
34862 break
34863 }
34864 callAux := ssa.AuxToCall(v.Aux)
34865 mem := v.Args[3]
34866 sptr := v.Args[0]
34867 v_1 := v.Args[1]
34868 if v_1.Op != ssaop.OpAddr {
34869 break
34870 }
34871 scon := ssa.AuxToSym(v_1.Aux)
34872 v_1_0 := v_1.Args[0]
34873 if v_1_0.Op != ssaop.OpSB {
34874 break
34875 }
34876 v_2 := v.Args[2]
34877 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34878 break
34879 }
34880 v.Reset(ssaop.OpMakeResult)
34881 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34882 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34883 v1.AddArg2(sptr, mem)
34884 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34885 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34886 v0.AddArg2(v1, v2)
34887 v.AddArg2(v0, mem)
34888 return true
34889 }
34890
34891
34892
34893 for {
34894 if len(v.Args) != 4 {
34895 break
34896 }
34897 callAux := ssa.AuxToCall(v.Aux)
34898 mem := v.Args[3]
34899 v_0 := v.Args[0]
34900 if v_0.Op != ssaop.OpAddr {
34901 break
34902 }
34903 scon := ssa.AuxToSym(v_0.Aux)
34904 v_0_0 := v_0.Args[0]
34905 if v_0_0.Op != ssaop.OpSB {
34906 break
34907 }
34908 sptr := v.Args[1]
34909 v_2 := v.Args[2]
34910 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34911 break
34912 }
34913 v.Reset(ssaop.OpMakeResult)
34914 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34915 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34916 v1.AddArg2(sptr, mem)
34917 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34918 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34919 v0.AddArg2(v1, v2)
34920 v.AddArg2(v0, mem)
34921 return true
34922 }
34923
34924
34925
34926 for {
34927 if len(v.Args) != 4 {
34928 break
34929 }
34930 callAux := ssa.AuxToCall(v.Aux)
34931 mem := v.Args[3]
34932 v_0 := v.Args[0]
34933 if v_0.Op != ssaop.OpAddr {
34934 break
34935 }
34936 scon := ssa.AuxToSym(v_0.Aux)
34937 v_0_0 := v_0.Args[0]
34938 if v_0_0.Op != ssaop.OpSB {
34939 break
34940 }
34941 sptr := v.Args[1]
34942 v_2 := v.Args[2]
34943 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34944 break
34945 }
34946 v.Reset(ssaop.OpMakeResult)
34947 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34948 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34949 v1.AddArg2(sptr, mem)
34950 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34951 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34952 v0.AddArg2(v1, v2)
34953 v.AddArg2(v0, mem)
34954 return true
34955 }
34956
34957
34958
34959 for {
34960 if len(v.Args) != 4 {
34961 break
34962 }
34963 callAux := ssa.AuxToCall(v.Aux)
34964 mem := v.Args[3]
34965 sptr := v.Args[0]
34966 v_1 := v.Args[1]
34967 if v_1.Op != ssaop.OpAddr {
34968 break
34969 }
34970 scon := ssa.AuxToSym(v_1.Aux)
34971 v_1_0 := v_1.Args[0]
34972 if v_1_0.Op != ssaop.OpSB {
34973 break
34974 }
34975 v_2 := v.Args[2]
34976 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
34977 break
34978 }
34979 v.Reset(ssaop.OpMakeResult)
34980 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
34981 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
34982 v1.AddArg2(sptr, mem)
34983 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
34984 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
34985 v0.AddArg2(v1, v2)
34986 v.AddArg2(v0, mem)
34987 return true
34988 }
34989
34990
34991
34992 for {
34993 if len(v.Args) != 4 {
34994 break
34995 }
34996 callAux := ssa.AuxToCall(v.Aux)
34997 mem := v.Args[3]
34998 sptr := v.Args[0]
34999 v_1 := v.Args[1]
35000 if v_1.Op != ssaop.OpAddr {
35001 break
35002 }
35003 scon := ssa.AuxToSym(v_1.Aux)
35004 v_1_0 := v_1.Args[0]
35005 if v_1_0.Op != ssaop.OpSB {
35006 break
35007 }
35008 v_2 := v.Args[2]
35009 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35010 break
35011 }
35012 v.Reset(ssaop.OpMakeResult)
35013 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
35014 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35015 v1.AddArg2(sptr, mem)
35016 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
35017 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
35018 v0.AddArg2(v1, v2)
35019 v.AddArg2(v0, mem)
35020 return true
35021 }
35022
35023
35024
35025 for {
35026 if len(v.Args) != 4 {
35027 break
35028 }
35029 callAux := ssa.AuxToCall(v.Aux)
35030 mem := v.Args[3]
35031 v_0 := v.Args[0]
35032 if v_0.Op != ssaop.OpAddr {
35033 break
35034 }
35035 scon := ssa.AuxToSym(v_0.Aux)
35036 v_0_0 := v_0.Args[0]
35037 if v_0_0.Op != ssaop.OpSB {
35038 break
35039 }
35040 sptr := v.Args[1]
35041 v_2 := v.Args[2]
35042 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35043 break
35044 }
35045 v.Reset(ssaop.OpMakeResult)
35046 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
35047 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35048 v1.AddArg2(sptr, mem)
35049 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
35050 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
35051 v0.AddArg2(v1, v2)
35052 v.AddArg2(v0, mem)
35053 return true
35054 }
35055
35056
35057
35058 for {
35059 if len(v.Args) != 4 {
35060 break
35061 }
35062 callAux := ssa.AuxToCall(v.Aux)
35063 mem := v.Args[3]
35064 v_0 := v.Args[0]
35065 if v_0.Op != ssaop.OpAddr {
35066 break
35067 }
35068 scon := ssa.AuxToSym(v_0.Aux)
35069 v_0_0 := v_0.Args[0]
35070 if v_0_0.Op != ssaop.OpSB {
35071 break
35072 }
35073 sptr := v.Args[1]
35074 v_2 := v.Args[2]
35075 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35076 break
35077 }
35078 v.Reset(ssaop.OpMakeResult)
35079 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
35080 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35081 v1.AddArg2(sptr, mem)
35082 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
35083 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
35084 v0.AddArg2(v1, v2)
35085 v.AddArg2(v0, mem)
35086 return true
35087 }
35088
35089
35090
35091 for {
35092 if len(v.Args) != 4 {
35093 break
35094 }
35095 callAux := ssa.AuxToCall(v.Aux)
35096 mem := v.Args[3]
35097 sptr := v.Args[0]
35098 v_1 := v.Args[1]
35099 if v_1.Op != ssaop.OpAddr {
35100 break
35101 }
35102 scon := ssa.AuxToSym(v_1.Aux)
35103 v_1_0 := v_1.Args[0]
35104 if v_1_0.Op != ssaop.OpSB {
35105 break
35106 }
35107 v_2 := v.Args[2]
35108 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35109 break
35110 }
35111 v.Reset(ssaop.OpMakeResult)
35112 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35113 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35114 v1.AddArg2(sptr, mem)
35115 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35116 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
35117 v0.AddArg2(v1, v2)
35118 v.AddArg2(v0, mem)
35119 return true
35120 }
35121
35122
35123
35124 for {
35125 if len(v.Args) != 4 {
35126 break
35127 }
35128 callAux := ssa.AuxToCall(v.Aux)
35129 mem := v.Args[3]
35130 sptr := v.Args[0]
35131 v_1 := v.Args[1]
35132 if v_1.Op != ssaop.OpAddr {
35133 break
35134 }
35135 scon := ssa.AuxToSym(v_1.Aux)
35136 v_1_0 := v_1.Args[0]
35137 if v_1_0.Op != ssaop.OpSB {
35138 break
35139 }
35140 v_2 := v.Args[2]
35141 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35142 break
35143 }
35144 v.Reset(ssaop.OpMakeResult)
35145 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35146 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35147 v1.AddArg2(sptr, mem)
35148 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35149 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
35150 v0.AddArg2(v1, v2)
35151 v.AddArg2(v0, mem)
35152 return true
35153 }
35154
35155
35156
35157 for {
35158 if len(v.Args) != 4 {
35159 break
35160 }
35161 callAux := ssa.AuxToCall(v.Aux)
35162 mem := v.Args[3]
35163 v_0 := v.Args[0]
35164 if v_0.Op != ssaop.OpAddr {
35165 break
35166 }
35167 scon := ssa.AuxToSym(v_0.Aux)
35168 v_0_0 := v_0.Args[0]
35169 if v_0_0.Op != ssaop.OpSB {
35170 break
35171 }
35172 sptr := v.Args[1]
35173 v_2 := v.Args[2]
35174 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35175 break
35176 }
35177 v.Reset(ssaop.OpMakeResult)
35178 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35179 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35180 v1.AddArg2(sptr, mem)
35181 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35182 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
35183 v0.AddArg2(v1, v2)
35184 v.AddArg2(v0, mem)
35185 return true
35186 }
35187
35188
35189
35190 for {
35191 if len(v.Args) != 4 {
35192 break
35193 }
35194 callAux := ssa.AuxToCall(v.Aux)
35195 mem := v.Args[3]
35196 v_0 := v.Args[0]
35197 if v_0.Op != ssaop.OpAddr {
35198 break
35199 }
35200 scon := ssa.AuxToSym(v_0.Aux)
35201 v_0_0 := v_0.Args[0]
35202 if v_0_0.Op != ssaop.OpSB {
35203 break
35204 }
35205 sptr := v.Args[1]
35206 v_2 := v.Args[2]
35207 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35208 break
35209 }
35210 v.Reset(ssaop.OpMakeResult)
35211 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35212 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35213 v1.AddArg2(sptr, mem)
35214 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35215 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
35216 v0.AddArg2(v1, v2)
35217 v.AddArg2(v0, mem)
35218 return true
35219 }
35220
35221
35222
35223 for {
35224 if len(v.Args) != 4 {
35225 break
35226 }
35227 callAux := ssa.AuxToCall(v.Aux)
35228 mem := v.Args[3]
35229 sptr := v.Args[0]
35230 v_1 := v.Args[1]
35231 if v_1.Op != ssaop.OpAddr {
35232 break
35233 }
35234 scon := ssa.AuxToSym(v_1.Aux)
35235 v_1_0 := v_1.Args[0]
35236 if v_1_0.Op != ssaop.OpSB {
35237 break
35238 }
35239 v_2 := v.Args[2]
35240 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 8 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35241 break
35242 }
35243 v.Reset(ssaop.OpMakeResult)
35244 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35245 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35246 v1.AddArg2(sptr, mem)
35247 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35248 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35249 v0.AddArg2(v1, v2)
35250 v.AddArg2(v0, mem)
35251 return true
35252 }
35253
35254
35255
35256 for {
35257 if len(v.Args) != 4 {
35258 break
35259 }
35260 callAux := ssa.AuxToCall(v.Aux)
35261 mem := v.Args[3]
35262 sptr := v.Args[0]
35263 v_1 := v.Args[1]
35264 if v_1.Op != ssaop.OpAddr {
35265 break
35266 }
35267 scon := ssa.AuxToSym(v_1.Aux)
35268 v_1_0 := v_1.Args[0]
35269 if v_1_0.Op != ssaop.OpSB {
35270 break
35271 }
35272 v_2 := v.Args[2]
35273 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) {
35274 break
35275 }
35276 v.Reset(ssaop.OpMakeResult)
35277 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35278 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35279 v1.AddArg2(sptr, mem)
35280 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35281 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35282 v0.AddArg2(v1, v2)
35283 v.AddArg2(v0, mem)
35284 return true
35285 }
35286
35287
35288
35289 for {
35290 if len(v.Args) != 4 {
35291 break
35292 }
35293 callAux := ssa.AuxToCall(v.Aux)
35294 mem := v.Args[3]
35295 v_0 := v.Args[0]
35296 if v_0.Op != ssaop.OpAddr {
35297 break
35298 }
35299 scon := ssa.AuxToSym(v_0.Aux)
35300 v_0_0 := v_0.Args[0]
35301 if v_0_0.Op != ssaop.OpSB {
35302 break
35303 }
35304 sptr := v.Args[1]
35305 v_2 := v.Args[2]
35306 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 8 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35307 break
35308 }
35309 v.Reset(ssaop.OpMakeResult)
35310 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35311 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35312 v1.AddArg2(sptr, mem)
35313 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35314 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35315 v0.AddArg2(v1, v2)
35316 v.AddArg2(v0, mem)
35317 return true
35318 }
35319
35320
35321
35322 for {
35323 if len(v.Args) != 4 {
35324 break
35325 }
35326 callAux := ssa.AuxToCall(v.Aux)
35327 mem := v.Args[3]
35328 v_0 := v.Args[0]
35329 if v_0.Op != ssaop.OpAddr {
35330 break
35331 }
35332 scon := ssa.AuxToSym(v_0.Aux)
35333 v_0_0 := v_0.Args[0]
35334 if v_0_0.Op != ssaop.OpSB {
35335 break
35336 }
35337 sptr := v.Args[1]
35338 v_2 := v.Args[2]
35339 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) {
35340 break
35341 }
35342 v.Reset(ssaop.OpMakeResult)
35343 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35344 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35345 v1.AddArg2(sptr, mem)
35346 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35347 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35348 v0.AddArg2(v1, v2)
35349 v.AddArg2(v0, mem)
35350 return true
35351 }
35352
35353
35354
35355 for {
35356 if len(v.Args) != 4 {
35357 break
35358 }
35359 callAux := ssa.AuxToCall(v.Aux)
35360 mem := v.Args[3]
35361 sptr := v.Args[0]
35362 v_1 := v.Args[1]
35363 if v_1.Op != ssaop.OpAddr {
35364 break
35365 }
35366 scon := ssa.AuxToSym(v_1.Aux)
35367 v_1_0 := v_1.Args[0]
35368 if v_1_0.Op != ssaop.OpSB {
35369 break
35370 }
35371 v_2 := v.Args[2]
35372 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35373 break
35374 }
35375 v.Reset(ssaop.OpMakeResult)
35376 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35377 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35378 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35379 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35380 v3.AddArg2(sptr, mem)
35381 v2.AddArg(v3)
35382 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35383 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35384 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35385 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35386 v7.AuxInt = ssa.Int64ToAuxInt(2)
35387 v7.AddArg(sptr)
35388 v6.AddArg2(v7, mem)
35389 v5.AddArg(v6)
35390 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35391 v8.AuxInt = ssa.Int32ToAuxInt(16)
35392 v4.AddArg2(v5, v8)
35393 v1.AddArg2(v2, v4)
35394 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35395 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35396 v0.AddArg2(v1, v9)
35397 v.AddArg2(v0, mem)
35398 return true
35399 }
35400
35401
35402
35403 for {
35404 if len(v.Args) != 4 {
35405 break
35406 }
35407 callAux := ssa.AuxToCall(v.Aux)
35408 mem := v.Args[3]
35409 sptr := v.Args[0]
35410 v_1 := v.Args[1]
35411 if v_1.Op != ssaop.OpAddr {
35412 break
35413 }
35414 scon := ssa.AuxToSym(v_1.Aux)
35415 v_1_0 := v_1.Args[0]
35416 if v_1_0.Op != ssaop.OpSB {
35417 break
35418 }
35419 v_2 := v.Args[2]
35420 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35421 break
35422 }
35423 v.Reset(ssaop.OpMakeResult)
35424 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35425 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35426 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35427 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35428 v3.AddArg2(sptr, mem)
35429 v2.AddArg(v3)
35430 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35431 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35432 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35433 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35434 v7.AuxInt = ssa.Int64ToAuxInt(2)
35435 v7.AddArg(sptr)
35436 v6.AddArg2(v7, mem)
35437 v5.AddArg(v6)
35438 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35439 v8.AuxInt = ssa.Int32ToAuxInt(16)
35440 v4.AddArg2(v5, v8)
35441 v1.AddArg2(v2, v4)
35442 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35443 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35444 v0.AddArg2(v1, v9)
35445 v.AddArg2(v0, mem)
35446 return true
35447 }
35448
35449
35450
35451 for {
35452 if len(v.Args) != 4 {
35453 break
35454 }
35455 callAux := ssa.AuxToCall(v.Aux)
35456 mem := v.Args[3]
35457 v_0 := v.Args[0]
35458 if v_0.Op != ssaop.OpAddr {
35459 break
35460 }
35461 scon := ssa.AuxToSym(v_0.Aux)
35462 v_0_0 := v_0.Args[0]
35463 if v_0_0.Op != ssaop.OpSB {
35464 break
35465 }
35466 sptr := v.Args[1]
35467 v_2 := v.Args[2]
35468 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35469 break
35470 }
35471 v.Reset(ssaop.OpMakeResult)
35472 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35473 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35474 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35475 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35476 v3.AddArg2(sptr, mem)
35477 v2.AddArg(v3)
35478 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35479 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35480 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35481 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35482 v7.AuxInt = ssa.Int64ToAuxInt(2)
35483 v7.AddArg(sptr)
35484 v6.AddArg2(v7, mem)
35485 v5.AddArg(v6)
35486 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35487 v8.AuxInt = ssa.Int32ToAuxInt(16)
35488 v4.AddArg2(v5, v8)
35489 v1.AddArg2(v2, v4)
35490 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35491 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35492 v0.AddArg2(v1, v9)
35493 v.AddArg2(v0, mem)
35494 return true
35495 }
35496
35497
35498
35499 for {
35500 if len(v.Args) != 4 {
35501 break
35502 }
35503 callAux := ssa.AuxToCall(v.Aux)
35504 mem := v.Args[3]
35505 v_0 := v.Args[0]
35506 if v_0.Op != ssaop.OpAddr {
35507 break
35508 }
35509 scon := ssa.AuxToSym(v_0.Aux)
35510 v_0_0 := v_0.Args[0]
35511 if v_0_0.Op != ssaop.OpSB {
35512 break
35513 }
35514 sptr := v.Args[1]
35515 v_2 := v.Args[2]
35516 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35517 break
35518 }
35519 v.Reset(ssaop.OpMakeResult)
35520 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35521 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35522 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35523 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35524 v3.AddArg2(sptr, mem)
35525 v2.AddArg(v3)
35526 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35527 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35528 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35529 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35530 v7.AuxInt = ssa.Int64ToAuxInt(2)
35531 v7.AddArg(sptr)
35532 v6.AddArg2(v7, mem)
35533 v5.AddArg(v6)
35534 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35535 v8.AuxInt = ssa.Int32ToAuxInt(16)
35536 v4.AddArg2(v5, v8)
35537 v1.AddArg2(v2, v4)
35538 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35539 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35540 v0.AddArg2(v1, v9)
35541 v.AddArg2(v0, mem)
35542 return true
35543 }
35544
35545
35546
35547 for {
35548 if len(v.Args) != 4 {
35549 break
35550 }
35551 callAux := ssa.AuxToCall(v.Aux)
35552 mem := v.Args[3]
35553 sptr := v.Args[0]
35554 v_1 := v.Args[1]
35555 if v_1.Op != ssaop.OpAddr {
35556 break
35557 }
35558 scon := ssa.AuxToSym(v_1.Aux)
35559 v_1_0 := v_1.Args[0]
35560 if v_1_0.Op != ssaop.OpSB {
35561 break
35562 }
35563 v_2 := v.Args[2]
35564 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 5 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35565 break
35566 }
35567 v.Reset(ssaop.OpMakeResult)
35568 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35569 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35570 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35571 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35572 v3.AddArg2(sptr, mem)
35573 v2.AddArg(v3)
35574 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35575 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35576 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35577 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35578 v7.AuxInt = ssa.Int64ToAuxInt(4)
35579 v7.AddArg(sptr)
35580 v6.AddArg2(v7, mem)
35581 v5.AddArg(v6)
35582 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35583 v8.AuxInt = ssa.Int64ToAuxInt(32)
35584 v4.AddArg2(v5, v8)
35585 v1.AddArg2(v2, v4)
35586 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35587 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35588 v0.AddArg2(v1, v9)
35589 v.AddArg2(v0, mem)
35590 return true
35591 }
35592
35593
35594
35595 for {
35596 if len(v.Args) != 4 {
35597 break
35598 }
35599 callAux := ssa.AuxToCall(v.Aux)
35600 mem := v.Args[3]
35601 sptr := v.Args[0]
35602 v_1 := v.Args[1]
35603 if v_1.Op != ssaop.OpAddr {
35604 break
35605 }
35606 scon := ssa.AuxToSym(v_1.Aux)
35607 v_1_0 := v_1.Args[0]
35608 if v_1_0.Op != ssaop.OpSB {
35609 break
35610 }
35611 v_2 := v.Args[2]
35612 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) {
35613 break
35614 }
35615 v.Reset(ssaop.OpMakeResult)
35616 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35617 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35618 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35619 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35620 v3.AddArg2(sptr, mem)
35621 v2.AddArg(v3)
35622 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35623 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35624 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35625 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35626 v7.AuxInt = ssa.Int64ToAuxInt(4)
35627 v7.AddArg(sptr)
35628 v6.AddArg2(v7, mem)
35629 v5.AddArg(v6)
35630 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35631 v8.AuxInt = ssa.Int64ToAuxInt(32)
35632 v4.AddArg2(v5, v8)
35633 v1.AddArg2(v2, v4)
35634 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35635 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35636 v0.AddArg2(v1, v9)
35637 v.AddArg2(v0, mem)
35638 return true
35639 }
35640
35641
35642
35643 for {
35644 if len(v.Args) != 4 {
35645 break
35646 }
35647 callAux := ssa.AuxToCall(v.Aux)
35648 mem := v.Args[3]
35649 v_0 := v.Args[0]
35650 if v_0.Op != ssaop.OpAddr {
35651 break
35652 }
35653 scon := ssa.AuxToSym(v_0.Aux)
35654 v_0_0 := v_0.Args[0]
35655 if v_0_0.Op != ssaop.OpSB {
35656 break
35657 }
35658 sptr := v.Args[1]
35659 v_2 := v.Args[2]
35660 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 5 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35661 break
35662 }
35663 v.Reset(ssaop.OpMakeResult)
35664 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35665 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35666 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35667 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35668 v3.AddArg2(sptr, mem)
35669 v2.AddArg(v3)
35670 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35671 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35672 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35673 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35674 v7.AuxInt = ssa.Int64ToAuxInt(4)
35675 v7.AddArg(sptr)
35676 v6.AddArg2(v7, mem)
35677 v5.AddArg(v6)
35678 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35679 v8.AuxInt = ssa.Int64ToAuxInt(32)
35680 v4.AddArg2(v5, v8)
35681 v1.AddArg2(v2, v4)
35682 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35683 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35684 v0.AddArg2(v1, v9)
35685 v.AddArg2(v0, mem)
35686 return true
35687 }
35688
35689
35690
35691 for {
35692 if len(v.Args) != 4 {
35693 break
35694 }
35695 callAux := ssa.AuxToCall(v.Aux)
35696 mem := v.Args[3]
35697 v_0 := v.Args[0]
35698 if v_0.Op != ssaop.OpAddr {
35699 break
35700 }
35701 scon := ssa.AuxToSym(v_0.Aux)
35702 v_0_0 := v_0.Args[0]
35703 if v_0_0.Op != ssaop.OpSB {
35704 break
35705 }
35706 sptr := v.Args[1]
35707 v_2 := v.Args[2]
35708 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) {
35709 break
35710 }
35711 v.Reset(ssaop.OpMakeResult)
35712 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35713 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35714 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35715 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35716 v3.AddArg2(sptr, mem)
35717 v2.AddArg(v3)
35718 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35719 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35720 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35721 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35722 v7.AuxInt = ssa.Int64ToAuxInt(4)
35723 v7.AddArg(sptr)
35724 v6.AddArg2(v7, mem)
35725 v5.AddArg(v6)
35726 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35727 v8.AuxInt = ssa.Int64ToAuxInt(32)
35728 v4.AddArg2(v5, v8)
35729 v1.AddArg2(v2, v4)
35730 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35731 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35732 v0.AddArg2(v1, v9)
35733 v.AddArg2(v0, mem)
35734 return true
35735 }
35736
35737
35738
35739 for {
35740 if len(v.Args) != 4 {
35741 break
35742 }
35743 callAux := ssa.AuxToCall(v.Aux)
35744 mem := v.Args[3]
35745 sptr := v.Args[0]
35746 v_1 := v.Args[1]
35747 if v_1.Op != ssaop.OpAddr {
35748 break
35749 }
35750 scon := ssa.AuxToSym(v_1.Aux)
35751 v_1_0 := v_1.Args[0]
35752 if v_1_0.Op != ssaop.OpSB {
35753 break
35754 }
35755 v_2 := v.Args[2]
35756 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 6 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35757 break
35758 }
35759 v.Reset(ssaop.OpMakeResult)
35760 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35761 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35762 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35763 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35764 v3.AddArg2(sptr, mem)
35765 v2.AddArg(v3)
35766 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35767 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35768 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35769 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35770 v7.AuxInt = ssa.Int64ToAuxInt(4)
35771 v7.AddArg(sptr)
35772 v6.AddArg2(v7, mem)
35773 v5.AddArg(v6)
35774 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35775 v8.AuxInt = ssa.Int64ToAuxInt(32)
35776 v4.AddArg2(v5, v8)
35777 v1.AddArg2(v2, v4)
35778 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35779 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35780 v0.AddArg2(v1, v9)
35781 v.AddArg2(v0, mem)
35782 return true
35783 }
35784
35785
35786
35787 for {
35788 if len(v.Args) != 4 {
35789 break
35790 }
35791 callAux := ssa.AuxToCall(v.Aux)
35792 mem := v.Args[3]
35793 sptr := v.Args[0]
35794 v_1 := v.Args[1]
35795 if v_1.Op != ssaop.OpAddr {
35796 break
35797 }
35798 scon := ssa.AuxToSym(v_1.Aux)
35799 v_1_0 := v_1.Args[0]
35800 if v_1_0.Op != ssaop.OpSB {
35801 break
35802 }
35803 v_2 := v.Args[2]
35804 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) {
35805 break
35806 }
35807 v.Reset(ssaop.OpMakeResult)
35808 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35809 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35810 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35811 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35812 v3.AddArg2(sptr, mem)
35813 v2.AddArg(v3)
35814 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35815 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35816 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35817 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35818 v7.AuxInt = ssa.Int64ToAuxInt(4)
35819 v7.AddArg(sptr)
35820 v6.AddArg2(v7, mem)
35821 v5.AddArg(v6)
35822 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35823 v8.AuxInt = ssa.Int64ToAuxInt(32)
35824 v4.AddArg2(v5, v8)
35825 v1.AddArg2(v2, v4)
35826 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35827 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35828 v0.AddArg2(v1, v9)
35829 v.AddArg2(v0, mem)
35830 return true
35831 }
35832
35833
35834
35835 for {
35836 if len(v.Args) != 4 {
35837 break
35838 }
35839 callAux := ssa.AuxToCall(v.Aux)
35840 mem := v.Args[3]
35841 v_0 := v.Args[0]
35842 if v_0.Op != ssaop.OpAddr {
35843 break
35844 }
35845 scon := ssa.AuxToSym(v_0.Aux)
35846 v_0_0 := v_0.Args[0]
35847 if v_0_0.Op != ssaop.OpSB {
35848 break
35849 }
35850 sptr := v.Args[1]
35851 v_2 := v.Args[2]
35852 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 6 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35853 break
35854 }
35855 v.Reset(ssaop.OpMakeResult)
35856 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35857 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35858 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35859 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35860 v3.AddArg2(sptr, mem)
35861 v2.AddArg(v3)
35862 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35863 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35864 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35865 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35866 v7.AuxInt = ssa.Int64ToAuxInt(4)
35867 v7.AddArg(sptr)
35868 v6.AddArg2(v7, mem)
35869 v5.AddArg(v6)
35870 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35871 v8.AuxInt = ssa.Int64ToAuxInt(32)
35872 v4.AddArg2(v5, v8)
35873 v1.AddArg2(v2, v4)
35874 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35875 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35876 v0.AddArg2(v1, v9)
35877 v.AddArg2(v0, mem)
35878 return true
35879 }
35880
35881
35882
35883 for {
35884 if len(v.Args) != 4 {
35885 break
35886 }
35887 callAux := ssa.AuxToCall(v.Aux)
35888 mem := v.Args[3]
35889 v_0 := v.Args[0]
35890 if v_0.Op != ssaop.OpAddr {
35891 break
35892 }
35893 scon := ssa.AuxToSym(v_0.Aux)
35894 v_0_0 := v_0.Args[0]
35895 if v_0_0.Op != ssaop.OpSB {
35896 break
35897 }
35898 sptr := v.Args[1]
35899 v_2 := v.Args[2]
35900 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) {
35901 break
35902 }
35903 v.Reset(ssaop.OpMakeResult)
35904 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35905 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35906 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35907 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35908 v3.AddArg2(sptr, mem)
35909 v2.AddArg(v3)
35910 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35911 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35912 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35913 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35914 v7.AuxInt = ssa.Int64ToAuxInt(4)
35915 v7.AddArg(sptr)
35916 v6.AddArg2(v7, mem)
35917 v5.AddArg(v6)
35918 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35919 v8.AuxInt = ssa.Int64ToAuxInt(32)
35920 v4.AddArg2(v5, v8)
35921 v1.AddArg2(v2, v4)
35922 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35923 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35924 v0.AddArg2(v1, v9)
35925 v.AddArg2(v0, mem)
35926 return true
35927 }
35928
35929
35930
35931 for {
35932 if len(v.Args) != 4 {
35933 break
35934 }
35935 callAux := ssa.AuxToCall(v.Aux)
35936 mem := v.Args[3]
35937 sptr := v.Args[0]
35938 v_1 := v.Args[1]
35939 if v_1.Op != ssaop.OpAddr {
35940 break
35941 }
35942 scon := ssa.AuxToSym(v_1.Aux)
35943 v_1_0 := v_1.Args[0]
35944 if v_1_0.Op != ssaop.OpSB {
35945 break
35946 }
35947 v_2 := v.Args[2]
35948 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 7 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35949 break
35950 }
35951 v.Reset(ssaop.OpMakeResult)
35952 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35953 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35954 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35955 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35956 v3.AddArg2(sptr, mem)
35957 v2.AddArg(v3)
35958 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35959 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35960 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35961 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35962 v7.AuxInt = ssa.Int64ToAuxInt(3)
35963 v7.AddArg(sptr)
35964 v6.AddArg2(v7, mem)
35965 v5.AddArg(v6)
35966 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35967 v8.AuxInt = ssa.Int64ToAuxInt(32)
35968 v4.AddArg2(v5, v8)
35969 v1.AddArg2(v2, v4)
35970 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35971 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
35972 v0.AddArg2(v1, v9)
35973 v.AddArg2(v0, mem)
35974 return true
35975 }
35976
35977
35978
35979 for {
35980 if len(v.Args) != 4 {
35981 break
35982 }
35983 callAux := ssa.AuxToCall(v.Aux)
35984 mem := v.Args[3]
35985 sptr := v.Args[0]
35986 v_1 := v.Args[1]
35987 if v_1.Op != ssaop.OpAddr {
35988 break
35989 }
35990 scon := ssa.AuxToSym(v_1.Aux)
35991 v_1_0 := v_1.Args[0]
35992 if v_1_0.Op != ssaop.OpSB {
35993 break
35994 }
35995 v_2 := v.Args[2]
35996 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) {
35997 break
35998 }
35999 v.Reset(ssaop.OpMakeResult)
36000 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
36001 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
36002 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36003 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36004 v3.AddArg2(sptr, mem)
36005 v2.AddArg(v3)
36006 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
36007 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36008 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36009 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
36010 v7.AuxInt = ssa.Int64ToAuxInt(3)
36011 v7.AddArg(sptr)
36012 v6.AddArg2(v7, mem)
36013 v5.AddArg(v6)
36014 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36015 v8.AuxInt = ssa.Int64ToAuxInt(32)
36016 v4.AddArg2(v5, v8)
36017 v1.AddArg2(v2, v4)
36018 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36019 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
36020 v0.AddArg2(v1, v9)
36021 v.AddArg2(v0, mem)
36022 return true
36023 }
36024
36025
36026
36027 for {
36028 if len(v.Args) != 4 {
36029 break
36030 }
36031 callAux := ssa.AuxToCall(v.Aux)
36032 mem := v.Args[3]
36033 v_0 := v.Args[0]
36034 if v_0.Op != ssaop.OpAddr {
36035 break
36036 }
36037 scon := ssa.AuxToSym(v_0.Aux)
36038 v_0_0 := v_0.Args[0]
36039 if v_0_0.Op != ssaop.OpSB {
36040 break
36041 }
36042 sptr := v.Args[1]
36043 v_2 := v.Args[2]
36044 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 7 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
36045 break
36046 }
36047 v.Reset(ssaop.OpMakeResult)
36048 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
36049 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
36050 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36051 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36052 v3.AddArg2(sptr, mem)
36053 v2.AddArg(v3)
36054 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
36055 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36056 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36057 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
36058 v7.AuxInt = ssa.Int64ToAuxInt(3)
36059 v7.AddArg(sptr)
36060 v6.AddArg2(v7, mem)
36061 v5.AddArg(v6)
36062 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36063 v8.AuxInt = ssa.Int64ToAuxInt(32)
36064 v4.AddArg2(v5, v8)
36065 v1.AddArg2(v2, v4)
36066 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36067 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
36068 v0.AddArg2(v1, v9)
36069 v.AddArg2(v0, mem)
36070 return true
36071 }
36072
36073
36074
36075 for {
36076 if len(v.Args) != 4 {
36077 break
36078 }
36079 callAux := ssa.AuxToCall(v.Aux)
36080 mem := v.Args[3]
36081 v_0 := v.Args[0]
36082 if v_0.Op != ssaop.OpAddr {
36083 break
36084 }
36085 scon := ssa.AuxToSym(v_0.Aux)
36086 v_0_0 := v_0.Args[0]
36087 if v_0_0.Op != ssaop.OpSB {
36088 break
36089 }
36090 sptr := v.Args[1]
36091 v_2 := v.Args[2]
36092 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) {
36093 break
36094 }
36095 v.Reset(ssaop.OpMakeResult)
36096 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
36097 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
36098 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36099 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36100 v3.AddArg2(sptr, mem)
36101 v2.AddArg(v3)
36102 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
36103 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
36104 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
36105 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
36106 v7.AuxInt = ssa.Int64ToAuxInt(3)
36107 v7.AddArg(sptr)
36108 v6.AddArg2(v7, mem)
36109 v5.AddArg(v6)
36110 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36111 v8.AuxInt = ssa.Int64ToAuxInt(32)
36112 v4.AddArg2(v5, v8)
36113 v1.AddArg2(v2, v4)
36114 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
36115 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
36116 v0.AddArg2(v1, v9)
36117 v.AddArg2(v0, mem)
36118 return true
36119 }
36120
36121
36122
36123 for {
36124 if len(v.Args) != 4 {
36125 break
36126 }
36127 callAux := ssa.AuxToCall(v.Aux)
36128 mem := v.Args[3]
36129 v_2 := v.Args[2]
36130 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.memequal")) {
36131 break
36132 }
36133 v.Reset(ssaop.OpMakeResult)
36134 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
36135 v0.AuxInt = ssa.BoolToAuxInt(true)
36136 v.AddArg2(v0, mem)
36137 return true
36138 }
36139
36140
36141
36142 for {
36143 if len(v.Args) != 4 {
36144 break
36145 }
36146 callAux := ssa.AuxToCall(v.Aux)
36147 mem := v.Args[3]
36148 v_2 := v.Args[2]
36149 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.memequal")) {
36150 break
36151 }
36152 v.Reset(ssaop.OpMakeResult)
36153 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
36154 v0.AuxInt = ssa.BoolToAuxInt(true)
36155 v.AddArg2(v0, mem)
36156 return true
36157 }
36158
36159
36160
36161 for {
36162 if len(v.Args) != 4 {
36163 break
36164 }
36165 callAux := ssa.AuxToCall(v.Aux)
36166 mem := v.Args[3]
36167 p := v.Args[0]
36168 q := v.Args[1]
36169 if !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.IsSamePtr(p, q)) {
36170 break
36171 }
36172 v.Reset(ssaop.OpMakeResult)
36173 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
36174 v0.AuxInt = ssa.BoolToAuxInt(true)
36175 v.AddArg2(v0, mem)
36176 return true
36177 }
36178
36179
36180
36181 for {
36182 if len(v.Args) != 4 {
36183 break
36184 }
36185 callAux := ssa.AuxToCall(v.Aux)
36186 mem := v.Args[3]
36187 v_1 := v.Args[1]
36188 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
36189 break
36190 }
36191 v_2 := v.Args[2]
36192 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.makeslice")) {
36193 break
36194 }
36195 v.Reset(ssaop.OpMakeResult)
36196 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, v.Type.FieldType(0))
36197 v0.Aux = ssa.SymToAux(ir.Syms.Zerobase)
36198 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
36199 v0.AddArg(v1)
36200 v.AddArg2(v0, mem)
36201 return true
36202 }
36203
36204
36205
36206 for {
36207 if len(v.Args) != 4 {
36208 break
36209 }
36210 callAux := ssa.AuxToCall(v.Aux)
36211 mem := v.Args[3]
36212 v_1 := v.Args[1]
36213 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
36214 break
36215 }
36216 v_2 := v.Args[2]
36217 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.makeslice")) {
36218 break
36219 }
36220 v.Reset(ssaop.OpMakeResult)
36221 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, v.Type.FieldType(0))
36222 v0.Aux = ssa.SymToAux(ir.Syms.Zerobase)
36223 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
36224 v0.AddArg(v1)
36225 v.AddArg2(v0, mem)
36226 return true
36227 }
36228
36229
36230
36231 for {
36232 if len(v.Args) != 4 {
36233 break
36234 }
36235 f := ssa.AuxToCall(v.Aux)
36236 mem := v.Args[3]
36237 typ_ := v.Args[0]
36238 x := v.Args[1]
36239 y := v.Args[2]
36240 if !(ssa.IsSameCall(f, "runtime.efaceeq") && isDirectAndComparableType(typ_) && ssa.Clobber(v)) {
36241 break
36242 }
36243 v.Reset(ssaop.OpMakeResult)
36244 v0 := b.NewValue0(v.Pos, ssaop.OpEqPtr, typ.Bool)
36245 v0.AddArg2(x, y)
36246 v.AddArg2(v0, mem)
36247 return true
36248 }
36249
36250
36251
36252 for {
36253 if len(v.Args) != 4 {
36254 break
36255 }
36256 f := ssa.AuxToCall(v.Aux)
36257 mem := v.Args[3]
36258 itab := v.Args[0]
36259 x := v.Args[1]
36260 y := v.Args[2]
36261 if !(ssa.IsSameCall(f, "runtime.ifaceeq") && isDirectAndComparableIface(itab) && ssa.Clobber(v)) {
36262 break
36263 }
36264 v.Reset(ssaop.OpMakeResult)
36265 v0 := b.NewValue0(v.Pos, ssaop.OpEqPtr, typ.Bool)
36266 v0.AddArg2(x, y)
36267 v.AddArg2(v0, mem)
36268 return true
36269 }
36270
36271
36272
36273 for {
36274 if len(v.Args) != 4 {
36275 break
36276 }
36277 argsize := ssa.AuxIntToInt32(v.AuxInt)
36278 f := ssa.AuxToCall(v.Aux)
36279 _ = v.Args[3]
36280 typ_ := v.Args[0]
36281 map_ := v.Args[1]
36282 key := v.Args[2]
36283 if key.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(key.AuxInt) != 0 {
36284 break
36285 }
36286 sbts := key.Args[0]
36287 if sbts.Op != ssaop.OpStaticLECall || len(sbts.Args) != 4 {
36288 break
36289 }
36290 g := ssa.AuxToCall(sbts.Aux)
36291 mem := sbts.Args[3]
36292 ptr := sbts.Args[1]
36293 len := sbts.Args[2]
36294 m := v.Args[3]
36295 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)) {
36296 break
36297 }
36298 v.Reset(ssaop.OpStaticLECall)
36299 v.AuxInt = ssa.Int32ToAuxInt(argsize)
36300 v.Aux = ssa.CallToAux(f)
36301 v0 := b.NewValue0(v.Pos, ssaop.OpStringMake, typ.String)
36302 v0.AddArg2(ptr, len)
36303 v.AddArg4(typ_, map_, v0, mem)
36304 return true
36305 }
36306
36307
36308
36309 for {
36310 if len(v.Args) != 3 {
36311 break
36312 }
36313 argsize := ssa.AuxIntToInt32(v.AuxInt)
36314 f := ssa.AuxToCall(v.Aux)
36315 _ = v.Args[2]
36316 dict_ := v.Args[0]
36317 key := v.Args[1]
36318 if key.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(key.AuxInt) != 0 {
36319 break
36320 }
36321 sbts := key.Args[0]
36322 if sbts.Op != ssaop.OpStaticLECall || len(sbts.Args) != 4 {
36323 break
36324 }
36325 g := ssa.AuxToCall(sbts.Aux)
36326 mem := sbts.Args[3]
36327 ptr := sbts.Args[1]
36328 len := sbts.Args[2]
36329 m := v.Args[2]
36330 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)) {
36331 break
36332 }
36333 v.Reset(ssaop.OpStaticLECall)
36334 v.AuxInt = ssa.Int32ToAuxInt(argsize)
36335 v.Aux = ssa.CallToAux(f)
36336 v0 := b.NewValue0(v.Pos, ssaop.OpStringMake, typ.String)
36337 v0.AddArg2(ptr, len)
36338 v.AddArg3(dict_, v0, mem)
36339 return true
36340 }
36341 return false
36342 }
36343 func rewriteValue_OpStore(v *ssa.Value) bool {
36344 v_2 := v.Args[2]
36345 v_1 := v.Args[1]
36346 v_0 := v.Args[0]
36347 b := v.Block
36348
36349
36350
36351 for {
36352 t1 := ssa.AuxToType(v.Aux)
36353 p1 := v_0
36354 if v_1.Op != ssaop.OpLoad {
36355 break
36356 }
36357 t2 := v_1.Type
36358 mem := v_1.Args[1]
36359 p2 := v_1.Args[0]
36360 if mem != v_2 || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size()) {
36361 break
36362 }
36363 v.CopyOf(mem)
36364 return true
36365 }
36366
36367
36368
36369 for {
36370 t1 := ssa.AuxToType(v.Aux)
36371 p1 := v_0
36372 if v_1.Op != ssaop.OpLoad {
36373 break
36374 }
36375 t2 := v_1.Type
36376 oldmem := v_1.Args[1]
36377 p2 := v_1.Args[0]
36378 mem := v_2
36379 if mem.Op != ssaop.OpStore {
36380 break
36381 }
36382 t3 := ssa.AuxToType(mem.Aux)
36383 _ = mem.Args[2]
36384 p3 := mem.Args[0]
36385 if oldmem != mem.Args[2] || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size() && ssa.Disjoint(p1, t1, p3, t3)) {
36386 break
36387 }
36388 v.CopyOf(mem)
36389 return true
36390 }
36391
36392
36393
36394 for {
36395 t1 := ssa.AuxToType(v.Aux)
36396 p1 := v_0
36397 if v_1.Op != ssaop.OpLoad {
36398 break
36399 }
36400 t2 := v_1.Type
36401 oldmem := v_1.Args[1]
36402 p2 := v_1.Args[0]
36403 mem := v_2
36404 if mem.Op != ssaop.OpStore {
36405 break
36406 }
36407 t3 := ssa.AuxToType(mem.Aux)
36408 _ = mem.Args[2]
36409 p3 := mem.Args[0]
36410 mem_2 := mem.Args[2]
36411 if mem_2.Op != ssaop.OpStore {
36412 break
36413 }
36414 t4 := ssa.AuxToType(mem_2.Aux)
36415 _ = mem_2.Args[2]
36416 p4 := mem_2.Args[0]
36417 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)) {
36418 break
36419 }
36420 v.CopyOf(mem)
36421 return true
36422 }
36423
36424
36425
36426 for {
36427 t1 := ssa.AuxToType(v.Aux)
36428 p1 := v_0
36429 if v_1.Op != ssaop.OpLoad {
36430 break
36431 }
36432 t2 := v_1.Type
36433 oldmem := v_1.Args[1]
36434 p2 := v_1.Args[0]
36435 mem := v_2
36436 if mem.Op != ssaop.OpStore {
36437 break
36438 }
36439 t3 := ssa.AuxToType(mem.Aux)
36440 _ = mem.Args[2]
36441 p3 := mem.Args[0]
36442 mem_2 := mem.Args[2]
36443 if mem_2.Op != ssaop.OpStore {
36444 break
36445 }
36446 t4 := ssa.AuxToType(mem_2.Aux)
36447 _ = mem_2.Args[2]
36448 p4 := mem_2.Args[0]
36449 mem_2_2 := mem_2.Args[2]
36450 if mem_2_2.Op != ssaop.OpStore {
36451 break
36452 }
36453 t5 := ssa.AuxToType(mem_2_2.Aux)
36454 _ = mem_2_2.Args[2]
36455 p5 := mem_2_2.Args[0]
36456 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)) {
36457 break
36458 }
36459 v.CopyOf(mem)
36460 return true
36461 }
36462
36463
36464
36465 for {
36466 t := ssa.AuxToType(v.Aux)
36467 if v_0.Op != ssaop.OpOffPtr {
36468 break
36469 }
36470 o := ssa.AuxIntToInt64(v_0.AuxInt)
36471 p1 := v_0.Args[0]
36472 x := v_1
36473 mem := v_2
36474 if mem.Op != ssaop.OpZero {
36475 break
36476 }
36477 n := ssa.AuxIntToInt64(mem.AuxInt)
36478 p2 := mem.Args[0]
36479 if !(ssa.IsConstZero(x) && o >= 0 && t.Size()+o <= n && ssa.IsSamePtr(p1, p2)) {
36480 break
36481 }
36482 v.CopyOf(mem)
36483 return true
36484 }
36485
36486
36487
36488 for {
36489 t1 := ssa.AuxToType(v.Aux)
36490 op1 := v_0
36491 if op1.Op != ssaop.OpOffPtr {
36492 break
36493 }
36494 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36495 p1 := op1.Args[0]
36496 x := v_1
36497 mem := v_2
36498 if mem.Op != ssaop.OpStore {
36499 break
36500 }
36501 t2 := ssa.AuxToType(mem.Aux)
36502 _ = mem.Args[2]
36503 p2 := mem.Args[0]
36504 mem_2 := mem.Args[2]
36505 if mem_2.Op != ssaop.OpZero {
36506 break
36507 }
36508 n := ssa.AuxIntToInt64(mem_2.AuxInt)
36509 p3 := mem_2.Args[0]
36510 if !(ssa.IsConstZero(x) && o1 >= 0 && t1.Size()+o1 <= n && ssa.IsSamePtr(p1, p3) && ssa.Disjoint(op1, t1, p2, t2)) {
36511 break
36512 }
36513 v.CopyOf(mem)
36514 return true
36515 }
36516
36517
36518
36519 for {
36520 t1 := ssa.AuxToType(v.Aux)
36521 op1 := v_0
36522 if op1.Op != ssaop.OpOffPtr {
36523 break
36524 }
36525 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36526 p1 := op1.Args[0]
36527 x := v_1
36528 mem := v_2
36529 if mem.Op != ssaop.OpStore {
36530 break
36531 }
36532 t2 := ssa.AuxToType(mem.Aux)
36533 _ = mem.Args[2]
36534 p2 := mem.Args[0]
36535 mem_2 := mem.Args[2]
36536 if mem_2.Op != ssaop.OpStore {
36537 break
36538 }
36539 t3 := ssa.AuxToType(mem_2.Aux)
36540 _ = mem_2.Args[2]
36541 p3 := mem_2.Args[0]
36542 mem_2_2 := mem_2.Args[2]
36543 if mem_2_2.Op != ssaop.OpZero {
36544 break
36545 }
36546 n := ssa.AuxIntToInt64(mem_2_2.AuxInt)
36547 p4 := mem_2_2.Args[0]
36548 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)) {
36549 break
36550 }
36551 v.CopyOf(mem)
36552 return true
36553 }
36554
36555
36556
36557 for {
36558 t1 := ssa.AuxToType(v.Aux)
36559 op1 := v_0
36560 if op1.Op != ssaop.OpOffPtr {
36561 break
36562 }
36563 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36564 p1 := op1.Args[0]
36565 x := v_1
36566 mem := v_2
36567 if mem.Op != ssaop.OpStore {
36568 break
36569 }
36570 t2 := ssa.AuxToType(mem.Aux)
36571 _ = mem.Args[2]
36572 p2 := mem.Args[0]
36573 mem_2 := mem.Args[2]
36574 if mem_2.Op != ssaop.OpStore {
36575 break
36576 }
36577 t3 := ssa.AuxToType(mem_2.Aux)
36578 _ = mem_2.Args[2]
36579 p3 := mem_2.Args[0]
36580 mem_2_2 := mem_2.Args[2]
36581 if mem_2_2.Op != ssaop.OpStore {
36582 break
36583 }
36584 t4 := ssa.AuxToType(mem_2_2.Aux)
36585 _ = mem_2_2.Args[2]
36586 p4 := mem_2_2.Args[0]
36587 mem_2_2_2 := mem_2_2.Args[2]
36588 if mem_2_2_2.Op != ssaop.OpZero {
36589 break
36590 }
36591 n := ssa.AuxIntToInt64(mem_2_2_2.AuxInt)
36592 p5 := mem_2_2_2.Args[0]
36593 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)) {
36594 break
36595 }
36596 v.CopyOf(mem)
36597 return true
36598 }
36599
36600
36601 for {
36602 if v_1.Op != ssaop.OpStructMake {
36603 break
36604 }
36605 v.CopyOf(ssa.RewriteStructStore(v))
36606 return true
36607 }
36608
36609
36610
36611 for {
36612 t := ssa.AuxToType(v.Aux)
36613 dst := v_0
36614 if v_1.Op != ssaop.OpLoad {
36615 break
36616 }
36617 mem := v_1.Args[1]
36618 src := v_1.Args[0]
36619 if mem != v_2 || !(!ssa.CanSSA(t)) {
36620 break
36621 }
36622 v.Reset(ssaop.OpMove)
36623 v.AuxInt = ssa.Int64ToAuxInt(t.Size())
36624 v.Aux = ssa.TypeToAux(t)
36625 v.AddArg3(dst, src, mem)
36626 return true
36627 }
36628
36629
36630
36631 for {
36632 t := ssa.AuxToType(v.Aux)
36633 dst := v_0
36634 if v_1.Op != ssaop.OpLoad {
36635 break
36636 }
36637 mem := v_1.Args[1]
36638 src := v_1.Args[0]
36639 if v_2.Op != ssaop.OpVarDef {
36640 break
36641 }
36642 x := ssa.AuxToSym(v_2.Aux)
36643 if mem != v_2.Args[0] || !(!ssa.CanSSA(t)) {
36644 break
36645 }
36646 v.Reset(ssaop.OpMove)
36647 v.AuxInt = ssa.Int64ToAuxInt(t.Size())
36648 v.Aux = ssa.TypeToAux(t)
36649 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
36650 v0.Aux = ssa.SymToAux(x)
36651 v0.AddArg(mem)
36652 v.AddArg3(dst, src, v0)
36653 return true
36654 }
36655
36656
36657 for {
36658 dst := v_0
36659 if v_1.Op != ssaop.OpArrayMake1 {
36660 break
36661 }
36662 e := v_1.Args[0]
36663 mem := v_2
36664 v.Reset(ssaop.OpStore)
36665 v.Aux = ssa.TypeToAux(e.Type)
36666 v.AddArg3(dst, e, mem)
36667 return true
36668 }
36669
36670
36671 for {
36672 if v_1.Op != ssaop.OpEmpty {
36673 break
36674 }
36675 mem := v_2
36676 v.CopyOf(mem)
36677 return true
36678 }
36679
36680
36681
36682 for {
36683 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
36684 break
36685 }
36686 call := v_0.Args[0]
36687 if call.Op != ssaop.OpStaticLECall {
36688 break
36689 }
36690 x := v_1
36691 mem := v_2
36692 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(ssa.IsConstZero(x) && isMalloc(call.Aux)) {
36693 break
36694 }
36695 v.CopyOf(mem)
36696 return true
36697 }
36698
36699
36700
36701 for {
36702 if v_0.Op != ssaop.OpOffPtr {
36703 break
36704 }
36705 v_0_0 := v_0.Args[0]
36706 if v_0_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0_0.AuxInt) != 0 {
36707 break
36708 }
36709 call := v_0_0.Args[0]
36710 if call.Op != ssaop.OpStaticLECall {
36711 break
36712 }
36713 x := v_1
36714 mem := v_2
36715 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(ssa.IsConstZero(x) && isMalloc(call.Aux)) {
36716 break
36717 }
36718 v.CopyOf(mem)
36719 return true
36720 }
36721
36722
36723
36724 for {
36725 t1 := ssa.AuxToType(v.Aux)
36726 op1 := v_0
36727 if op1.Op != ssaop.OpOffPtr {
36728 break
36729 }
36730 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36731 p1 := op1.Args[0]
36732 d1 := v_1
36733 m2 := v_2
36734 if m2.Op != ssaop.OpStore {
36735 break
36736 }
36737 t2 := ssa.AuxToType(m2.Aux)
36738 _ = m2.Args[2]
36739 op2 := m2.Args[0]
36740 if op2.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op2.AuxInt) != 0 {
36741 break
36742 }
36743 p2 := op2.Args[0]
36744 d2 := m2.Args[1]
36745 m3 := m2.Args[2]
36746 if m3.Op != ssaop.OpMove {
36747 break
36748 }
36749 n := ssa.AuxIntToInt64(m3.AuxInt)
36750 mem := m3.Args[2]
36751 p3 := m3.Args[0]
36752 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)) {
36753 break
36754 }
36755 v.Reset(ssaop.OpStore)
36756 v.Aux = ssa.TypeToAux(t1)
36757 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36758 v0.Aux = ssa.TypeToAux(t2)
36759 v0.AddArg3(op2, d2, mem)
36760 v.AddArg3(op1, d1, v0)
36761 return true
36762 }
36763
36764
36765
36766 for {
36767 t1 := ssa.AuxToType(v.Aux)
36768 op1 := v_0
36769 if op1.Op != ssaop.OpOffPtr {
36770 break
36771 }
36772 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36773 p1 := op1.Args[0]
36774 d1 := v_1
36775 m2 := v_2
36776 if m2.Op != ssaop.OpStore {
36777 break
36778 }
36779 t2 := ssa.AuxToType(m2.Aux)
36780 _ = m2.Args[2]
36781 op2 := m2.Args[0]
36782 if op2.Op != ssaop.OpOffPtr {
36783 break
36784 }
36785 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36786 p2 := op2.Args[0]
36787 d2 := m2.Args[1]
36788 m3 := m2.Args[2]
36789 if m3.Op != ssaop.OpStore {
36790 break
36791 }
36792 t3 := ssa.AuxToType(m3.Aux)
36793 _ = m3.Args[2]
36794 op3 := m3.Args[0]
36795 if op3.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op3.AuxInt) != 0 {
36796 break
36797 }
36798 p3 := op3.Args[0]
36799 d3 := m3.Args[1]
36800 m4 := m3.Args[2]
36801 if m4.Op != ssaop.OpMove {
36802 break
36803 }
36804 n := ssa.AuxIntToInt64(m4.AuxInt)
36805 mem := m4.Args[2]
36806 p4 := m4.Args[0]
36807 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)) {
36808 break
36809 }
36810 v.Reset(ssaop.OpStore)
36811 v.Aux = ssa.TypeToAux(t1)
36812 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36813 v0.Aux = ssa.TypeToAux(t2)
36814 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36815 v1.Aux = ssa.TypeToAux(t3)
36816 v1.AddArg3(op3, d3, mem)
36817 v0.AddArg3(op2, d2, v1)
36818 v.AddArg3(op1, d1, v0)
36819 return true
36820 }
36821
36822
36823
36824 for {
36825 t1 := ssa.AuxToType(v.Aux)
36826 op1 := v_0
36827 if op1.Op != ssaop.OpOffPtr {
36828 break
36829 }
36830 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36831 p1 := op1.Args[0]
36832 d1 := v_1
36833 m2 := v_2
36834 if m2.Op != ssaop.OpStore {
36835 break
36836 }
36837 t2 := ssa.AuxToType(m2.Aux)
36838 _ = m2.Args[2]
36839 op2 := m2.Args[0]
36840 if op2.Op != ssaop.OpOffPtr {
36841 break
36842 }
36843 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36844 p2 := op2.Args[0]
36845 d2 := m2.Args[1]
36846 m3 := m2.Args[2]
36847 if m3.Op != ssaop.OpStore {
36848 break
36849 }
36850 t3 := ssa.AuxToType(m3.Aux)
36851 _ = m3.Args[2]
36852 op3 := m3.Args[0]
36853 if op3.Op != ssaop.OpOffPtr {
36854 break
36855 }
36856 o3 := ssa.AuxIntToInt64(op3.AuxInt)
36857 p3 := op3.Args[0]
36858 d3 := m3.Args[1]
36859 m4 := m3.Args[2]
36860 if m4.Op != ssaop.OpStore {
36861 break
36862 }
36863 t4 := ssa.AuxToType(m4.Aux)
36864 _ = m4.Args[2]
36865 op4 := m4.Args[0]
36866 if op4.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op4.AuxInt) != 0 {
36867 break
36868 }
36869 p4 := op4.Args[0]
36870 d4 := m4.Args[1]
36871 m5 := m4.Args[2]
36872 if m5.Op != ssaop.OpMove {
36873 break
36874 }
36875 n := ssa.AuxIntToInt64(m5.AuxInt)
36876 mem := m5.Args[2]
36877 p5 := m5.Args[0]
36878 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)) {
36879 break
36880 }
36881 v.Reset(ssaop.OpStore)
36882 v.Aux = ssa.TypeToAux(t1)
36883 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36884 v0.Aux = ssa.TypeToAux(t2)
36885 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36886 v1.Aux = ssa.TypeToAux(t3)
36887 v2 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36888 v2.Aux = ssa.TypeToAux(t4)
36889 v2.AddArg3(op4, d4, mem)
36890 v1.AddArg3(op3, d3, v2)
36891 v0.AddArg3(op2, d2, v1)
36892 v.AddArg3(op1, d1, v0)
36893 return true
36894 }
36895
36896
36897
36898 for {
36899 t1 := ssa.AuxToType(v.Aux)
36900 op1 := v_0
36901 if op1.Op != ssaop.OpOffPtr {
36902 break
36903 }
36904 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36905 p1 := op1.Args[0]
36906 d1 := v_1
36907 m2 := v_2
36908 if m2.Op != ssaop.OpStore {
36909 break
36910 }
36911 t2 := ssa.AuxToType(m2.Aux)
36912 _ = m2.Args[2]
36913 op2 := m2.Args[0]
36914 if op2.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op2.AuxInt) != 0 {
36915 break
36916 }
36917 p2 := op2.Args[0]
36918 d2 := m2.Args[1]
36919 m3 := m2.Args[2]
36920 if m3.Op != ssaop.OpZero {
36921 break
36922 }
36923 n := ssa.AuxIntToInt64(m3.AuxInt)
36924 mem := m3.Args[1]
36925 p3 := m3.Args[0]
36926 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)) {
36927 break
36928 }
36929 v.Reset(ssaop.OpStore)
36930 v.Aux = ssa.TypeToAux(t1)
36931 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36932 v0.Aux = ssa.TypeToAux(t2)
36933 v0.AddArg3(op2, d2, mem)
36934 v.AddArg3(op1, d1, v0)
36935 return true
36936 }
36937
36938
36939
36940 for {
36941 t1 := ssa.AuxToType(v.Aux)
36942 op1 := v_0
36943 if op1.Op != ssaop.OpOffPtr {
36944 break
36945 }
36946 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36947 p1 := op1.Args[0]
36948 d1 := v_1
36949 m2 := v_2
36950 if m2.Op != ssaop.OpStore {
36951 break
36952 }
36953 t2 := ssa.AuxToType(m2.Aux)
36954 _ = m2.Args[2]
36955 op2 := m2.Args[0]
36956 if op2.Op != ssaop.OpOffPtr {
36957 break
36958 }
36959 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36960 p2 := op2.Args[0]
36961 d2 := m2.Args[1]
36962 m3 := m2.Args[2]
36963 if m3.Op != ssaop.OpStore {
36964 break
36965 }
36966 t3 := ssa.AuxToType(m3.Aux)
36967 _ = m3.Args[2]
36968 op3 := m3.Args[0]
36969 if op3.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op3.AuxInt) != 0 {
36970 break
36971 }
36972 p3 := op3.Args[0]
36973 d3 := m3.Args[1]
36974 m4 := m3.Args[2]
36975 if m4.Op != ssaop.OpZero {
36976 break
36977 }
36978 n := ssa.AuxIntToInt64(m4.AuxInt)
36979 mem := m4.Args[1]
36980 p4 := m4.Args[0]
36981 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)) {
36982 break
36983 }
36984 v.Reset(ssaop.OpStore)
36985 v.Aux = ssa.TypeToAux(t1)
36986 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36987 v0.Aux = ssa.TypeToAux(t2)
36988 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36989 v1.Aux = ssa.TypeToAux(t3)
36990 v1.AddArg3(op3, d3, mem)
36991 v0.AddArg3(op2, d2, v1)
36992 v.AddArg3(op1, d1, v0)
36993 return true
36994 }
36995
36996
36997
36998 for {
36999 t1 := ssa.AuxToType(v.Aux)
37000 op1 := v_0
37001 if op1.Op != ssaop.OpOffPtr {
37002 break
37003 }
37004 o1 := ssa.AuxIntToInt64(op1.AuxInt)
37005 p1 := op1.Args[0]
37006 d1 := v_1
37007 m2 := v_2
37008 if m2.Op != ssaop.OpStore {
37009 break
37010 }
37011 t2 := ssa.AuxToType(m2.Aux)
37012 _ = m2.Args[2]
37013 op2 := m2.Args[0]
37014 if op2.Op != ssaop.OpOffPtr {
37015 break
37016 }
37017 o2 := ssa.AuxIntToInt64(op2.AuxInt)
37018 p2 := op2.Args[0]
37019 d2 := m2.Args[1]
37020 m3 := m2.Args[2]
37021 if m3.Op != ssaop.OpStore {
37022 break
37023 }
37024 t3 := ssa.AuxToType(m3.Aux)
37025 _ = m3.Args[2]
37026 op3 := m3.Args[0]
37027 if op3.Op != ssaop.OpOffPtr {
37028 break
37029 }
37030 o3 := ssa.AuxIntToInt64(op3.AuxInt)
37031 p3 := op3.Args[0]
37032 d3 := m3.Args[1]
37033 m4 := m3.Args[2]
37034 if m4.Op != ssaop.OpStore {
37035 break
37036 }
37037 t4 := ssa.AuxToType(m4.Aux)
37038 _ = m4.Args[2]
37039 op4 := m4.Args[0]
37040 if op4.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op4.AuxInt) != 0 {
37041 break
37042 }
37043 p4 := op4.Args[0]
37044 d4 := m4.Args[1]
37045 m5 := m4.Args[2]
37046 if m5.Op != ssaop.OpZero {
37047 break
37048 }
37049 n := ssa.AuxIntToInt64(m5.AuxInt)
37050 mem := m5.Args[1]
37051 p5 := m5.Args[0]
37052 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)) {
37053 break
37054 }
37055 v.Reset(ssaop.OpStore)
37056 v.Aux = ssa.TypeToAux(t1)
37057 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
37058 v0.Aux = ssa.TypeToAux(t2)
37059 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
37060 v1.Aux = ssa.TypeToAux(t3)
37061 v2 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
37062 v2.Aux = ssa.TypeToAux(t4)
37063 v2.AddArg3(op4, d4, mem)
37064 v1.AddArg3(op3, d3, v2)
37065 v0.AddArg3(op2, d2, v1)
37066 v.AddArg3(op1, d1, v0)
37067 return true
37068 }
37069 return false
37070 }
37071 func rewriteValue_OpStringLen(v *ssa.Value) bool {
37072 v_0 := v.Args[0]
37073
37074
37075 for {
37076 if v_0.Op != ssaop.OpStringMake {
37077 break
37078 }
37079 _ = v_0.Args[1]
37080 v_0_1 := v_0.Args[1]
37081 if v_0_1.Op != ssaop.OpConst64 {
37082 break
37083 }
37084 t := v_0_1.Type
37085 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
37086 v.Reset(ssaop.OpConst64)
37087 v.Type = t
37088 v.AuxInt = ssa.Int64ToAuxInt(c)
37089 return true
37090 }
37091 return false
37092 }
37093 func rewriteValue_OpStringPtr(v *ssa.Value) bool {
37094 v_0 := v.Args[0]
37095
37096
37097 for {
37098 if v_0.Op != ssaop.OpStringMake {
37099 break
37100 }
37101 v_0_0 := v_0.Args[0]
37102 if v_0_0.Op != ssaop.OpAddr {
37103 break
37104 }
37105 t := v_0_0.Type
37106 s := ssa.AuxToSym(v_0_0.Aux)
37107 base := v_0_0.Args[0]
37108 v.Reset(ssaop.OpAddr)
37109 v.Type = t
37110 v.Aux = ssa.SymToAux(s)
37111 v.AddArg(base)
37112 return true
37113 }
37114 return false
37115 }
37116 func rewriteValue_OpStructSelect(v *ssa.Value) bool {
37117 v_0 := v.Args[0]
37118 b := v.Block
37119
37120
37121 for {
37122 i := ssa.AuxIntToInt64(v.AuxInt)
37123 x := v_0
37124 if x.Op != ssaop.OpStructMake {
37125 break
37126 }
37127 v.CopyOf(x.Args[i])
37128 return true
37129 }
37130
37131
37132
37133 for {
37134 i := ssa.AuxIntToInt64(v.AuxInt)
37135 x := v_0
37136 if x.Op != ssaop.OpLoad {
37137 break
37138 }
37139 t := x.Type
37140 mem := x.Args[1]
37141 ptr := x.Args[0]
37142 if !(!ssa.CanSSA(t)) {
37143 break
37144 }
37145 b = x.Block
37146 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, v.Type)
37147 v.CopyOf(v0)
37148 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, v.Type.PtrTo())
37149 v1.AuxInt = ssa.Int64ToAuxInt(t.FieldOff(int(i)))
37150 v1.AddArg(ptr)
37151 v0.AddArg2(v1, mem)
37152 return true
37153 }
37154
37155
37156
37157 for {
37158 if v_0.Op != ssaop.OpIData {
37159 break
37160 }
37161 x := v_0.Args[0]
37162 if !(v.Type.Size() > 0) {
37163 break
37164 }
37165 v.Reset(ssaop.OpIData)
37166 v.AddArg(x)
37167 return true
37168 }
37169
37170
37171
37172 for {
37173 if v_0.Op != ssaop.OpIData {
37174 break
37175 }
37176 if !(v.Type.Size() == 0) {
37177 break
37178 }
37179 v.Reset(ssaop.OpEmpty)
37180 return true
37181 }
37182 return false
37183 }
37184 func rewriteValue_OpSub16(v *ssa.Value) bool {
37185 v_1 := v.Args[1]
37186 v_0 := v.Args[0]
37187 b := v.Block
37188
37189
37190 for {
37191 if v_0.Op != ssaop.OpConst16 {
37192 break
37193 }
37194 c := ssa.AuxIntToInt16(v_0.AuxInt)
37195 if v_1.Op != ssaop.OpConst16 {
37196 break
37197 }
37198 d := ssa.AuxIntToInt16(v_1.AuxInt)
37199 v.Reset(ssaop.OpConst16)
37200 v.AuxInt = ssa.Int16ToAuxInt(c - d)
37201 return true
37202 }
37203
37204
37205
37206 for {
37207 x := v_0
37208 if v_1.Op != ssaop.OpConst16 {
37209 break
37210 }
37211 t := v_1.Type
37212 c := ssa.AuxIntToInt16(v_1.AuxInt)
37213 if !(x.Op != ssaop.OpConst16) {
37214 break
37215 }
37216 v.Reset(ssaop.OpAdd16)
37217 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
37218 v0.AuxInt = ssa.Int16ToAuxInt(-c)
37219 v.AddArg2(v0, x)
37220 return true
37221 }
37222
37223
37224 for {
37225 t := v.Type
37226 if v_0.Op != ssaop.OpMul16 {
37227 break
37228 }
37229 _ = v_0.Args[1]
37230 v_0_0 := v_0.Args[0]
37231 v_0_1 := v_0.Args[1]
37232 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37233 x := v_0_0
37234 y := v_0_1
37235 if v_1.Op != ssaop.OpMul16 {
37236 continue
37237 }
37238 _ = v_1.Args[1]
37239 v_1_0 := v_1.Args[0]
37240 v_1_1 := v_1.Args[1]
37241 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37242 if x != v_1_0 {
37243 continue
37244 }
37245 z := v_1_1
37246 v.Reset(ssaop.OpMul16)
37247 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
37248 v0.AddArg2(y, z)
37249 v.AddArg2(x, v0)
37250 return true
37251 }
37252 }
37253 break
37254 }
37255
37256
37257 for {
37258 x := v_0
37259 if x != v_1 {
37260 break
37261 }
37262 v.Reset(ssaop.OpConst16)
37263 v.AuxInt = ssa.Int16ToAuxInt(0)
37264 return true
37265 }
37266
37267
37268 for {
37269 if v_0.Op != ssaop.OpNeg16 {
37270 break
37271 }
37272 x := v_0.Args[0]
37273 if v_1.Op != ssaop.OpCom16 || x != v_1.Args[0] {
37274 break
37275 }
37276 v.Reset(ssaop.OpConst16)
37277 v.AuxInt = ssa.Int16ToAuxInt(1)
37278 return true
37279 }
37280
37281
37282 for {
37283 if v_0.Op != ssaop.OpCom16 {
37284 break
37285 }
37286 x := v_0.Args[0]
37287 if v_1.Op != ssaop.OpNeg16 || x != v_1.Args[0] {
37288 break
37289 }
37290 v.Reset(ssaop.OpConst16)
37291 v.AuxInt = ssa.Int16ToAuxInt(-1)
37292 return true
37293 }
37294
37295
37296 for {
37297 if v_0.Op != ssaop.OpAdd16 {
37298 break
37299 }
37300 _ = v_0.Args[1]
37301 v_0_0 := v_0.Args[0]
37302 v_0_1 := v_0.Args[1]
37303 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37304 t := v_0_0
37305 x := v_0_1
37306 if v_1.Op != ssaop.OpAdd16 {
37307 continue
37308 }
37309 _ = v_1.Args[1]
37310 v_1_0 := v_1.Args[0]
37311 v_1_1 := v_1.Args[1]
37312 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37313 if t != v_1_0 {
37314 continue
37315 }
37316 y := v_1_1
37317 v.Reset(ssaop.OpSub16)
37318 v.AddArg2(x, y)
37319 return true
37320 }
37321 }
37322 break
37323 }
37324
37325
37326 for {
37327 x := v_0
37328 if v_1.Op != ssaop.OpAnd16 {
37329 break
37330 }
37331 t := v_1.Type
37332 _ = v_1.Args[1]
37333 v_1_0 := v_1.Args[0]
37334 v_1_1 := v_1.Args[1]
37335 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37336 if x != v_1_0 {
37337 continue
37338 }
37339 y := v_1_1
37340 v.Reset(ssaop.OpAnd16)
37341 v0 := b.NewValue0(v.Pos, ssaop.OpCom16, t)
37342 v0.AddArg(y)
37343 v.AddArg2(x, v0)
37344 return true
37345 }
37346 break
37347 }
37348
37349
37350 for {
37351 if v_0.Op != ssaop.OpAdd16 {
37352 break
37353 }
37354 _ = v_0.Args[1]
37355 v_0_0 := v_0.Args[0]
37356 v_0_1 := v_0.Args[1]
37357 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37358 x := v_0_0
37359 y := v_0_1
37360 if x != v_1 {
37361 continue
37362 }
37363 v.CopyOf(y)
37364 return true
37365 }
37366 break
37367 }
37368
37369
37370 for {
37371 if v_0.Op != ssaop.OpAdd16 {
37372 break
37373 }
37374 _ = v_0.Args[1]
37375 v_0_0 := v_0.Args[0]
37376 v_0_1 := v_0.Args[1]
37377 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37378 x := v_0_0
37379 y := v_0_1
37380 if y != v_1 {
37381 continue
37382 }
37383 v.CopyOf(x)
37384 return true
37385 }
37386 break
37387 }
37388
37389
37390 for {
37391 if v_0.Op != ssaop.OpSub16 {
37392 break
37393 }
37394 y := v_0.Args[1]
37395 x := v_0.Args[0]
37396 if x != v_1 {
37397 break
37398 }
37399 v.Reset(ssaop.OpNeg16)
37400 v.AddArg(y)
37401 return true
37402 }
37403
37404
37405 for {
37406 x := v_0
37407 if v_1.Op != ssaop.OpAdd16 {
37408 break
37409 }
37410 _ = v_1.Args[1]
37411 v_1_0 := v_1.Args[0]
37412 v_1_1 := v_1.Args[1]
37413 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37414 if x != v_1_0 {
37415 continue
37416 }
37417 y := v_1_1
37418 v.Reset(ssaop.OpNeg16)
37419 v.AddArg(y)
37420 return true
37421 }
37422 break
37423 }
37424
37425
37426
37427 for {
37428 x := v_0
37429 if v_1.Op != ssaop.OpSub16 {
37430 break
37431 }
37432 z := v_1.Args[1]
37433 i := v_1.Args[0]
37434 if i.Op != ssaop.OpConst16 {
37435 break
37436 }
37437 t := i.Type
37438 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
37439 break
37440 }
37441 v.Reset(ssaop.OpSub16)
37442 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
37443 v0.AddArg2(x, z)
37444 v.AddArg2(v0, i)
37445 return true
37446 }
37447
37448
37449
37450 for {
37451 x := v_0
37452 if v_1.Op != ssaop.OpAdd16 {
37453 break
37454 }
37455 _ = v_1.Args[1]
37456 v_1_0 := v_1.Args[0]
37457 v_1_1 := v_1.Args[1]
37458 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37459 z := v_1_0
37460 i := v_1_1
37461 if i.Op != ssaop.OpConst16 {
37462 continue
37463 }
37464 t := i.Type
37465 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
37466 continue
37467 }
37468 v.Reset(ssaop.OpSub16)
37469 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
37470 v0.AddArg2(x, z)
37471 v.AddArg2(v0, i)
37472 return true
37473 }
37474 break
37475 }
37476
37477
37478
37479 for {
37480 if v_0.Op != ssaop.OpSub16 {
37481 break
37482 }
37483 z := v_0.Args[1]
37484 i := v_0.Args[0]
37485 if i.Op != ssaop.OpConst16 {
37486 break
37487 }
37488 t := i.Type
37489 x := v_1
37490 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
37491 break
37492 }
37493 v.Reset(ssaop.OpSub16)
37494 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
37495 v0.AddArg2(z, x)
37496 v.AddArg2(i, v0)
37497 return true
37498 }
37499
37500
37501
37502 for {
37503 if v_0.Op != ssaop.OpAdd16 {
37504 break
37505 }
37506 _ = v_0.Args[1]
37507 v_0_0 := v_0.Args[0]
37508 v_0_1 := v_0.Args[1]
37509 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37510 z := v_0_0
37511 i := v_0_1
37512 if i.Op != ssaop.OpConst16 {
37513 continue
37514 }
37515 t := i.Type
37516 x := v_1
37517 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
37518 continue
37519 }
37520 v.Reset(ssaop.OpAdd16)
37521 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
37522 v0.AddArg2(z, x)
37523 v.AddArg2(i, v0)
37524 return true
37525 }
37526 break
37527 }
37528
37529
37530 for {
37531 if v_0.Op != ssaop.OpConst16 {
37532 break
37533 }
37534 t := v_0.Type
37535 c := ssa.AuxIntToInt16(v_0.AuxInt)
37536 if v_1.Op != ssaop.OpSub16 {
37537 break
37538 }
37539 x := v_1.Args[1]
37540 v_1_0 := v_1.Args[0]
37541 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
37542 break
37543 }
37544 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
37545 v.Reset(ssaop.OpAdd16)
37546 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
37547 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
37548 v.AddArg2(v0, x)
37549 return true
37550 }
37551
37552
37553 for {
37554 if v_0.Op != ssaop.OpConst16 {
37555 break
37556 }
37557 t := v_0.Type
37558 c := ssa.AuxIntToInt16(v_0.AuxInt)
37559 if v_1.Op != ssaop.OpAdd16 {
37560 break
37561 }
37562 _ = v_1.Args[1]
37563 v_1_0 := v_1.Args[0]
37564 v_1_1 := v_1.Args[1]
37565 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37566 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
37567 continue
37568 }
37569 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
37570 x := v_1_1
37571 v.Reset(ssaop.OpSub16)
37572 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
37573 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
37574 v.AddArg2(v0, x)
37575 return true
37576 }
37577 break
37578 }
37579 return false
37580 }
37581 func rewriteValue_OpSub32(v *ssa.Value) bool {
37582 v_1 := v.Args[1]
37583 v_0 := v.Args[0]
37584 b := v.Block
37585
37586
37587 for {
37588 if v_0.Op != ssaop.OpConst32 {
37589 break
37590 }
37591 c := ssa.AuxIntToInt32(v_0.AuxInt)
37592 if v_1.Op != ssaop.OpConst32 {
37593 break
37594 }
37595 d := ssa.AuxIntToInt32(v_1.AuxInt)
37596 v.Reset(ssaop.OpConst32)
37597 v.AuxInt = ssa.Int32ToAuxInt(c - d)
37598 return true
37599 }
37600
37601
37602
37603 for {
37604 x := v_0
37605 if v_1.Op != ssaop.OpConst32 {
37606 break
37607 }
37608 t := v_1.Type
37609 c := ssa.AuxIntToInt32(v_1.AuxInt)
37610 if !(x.Op != ssaop.OpConst32) {
37611 break
37612 }
37613 v.Reset(ssaop.OpAdd32)
37614 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
37615 v0.AuxInt = ssa.Int32ToAuxInt(-c)
37616 v.AddArg2(v0, x)
37617 return true
37618 }
37619
37620
37621 for {
37622 t := v.Type
37623 if v_0.Op != ssaop.OpMul32 {
37624 break
37625 }
37626 _ = v_0.Args[1]
37627 v_0_0 := v_0.Args[0]
37628 v_0_1 := v_0.Args[1]
37629 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37630 x := v_0_0
37631 y := v_0_1
37632 if v_1.Op != ssaop.OpMul32 {
37633 continue
37634 }
37635 _ = v_1.Args[1]
37636 v_1_0 := v_1.Args[0]
37637 v_1_1 := v_1.Args[1]
37638 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37639 if x != v_1_0 {
37640 continue
37641 }
37642 z := v_1_1
37643 v.Reset(ssaop.OpMul32)
37644 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
37645 v0.AddArg2(y, z)
37646 v.AddArg2(x, v0)
37647 return true
37648 }
37649 }
37650 break
37651 }
37652
37653
37654 for {
37655 x := v_0
37656 if x != v_1 {
37657 break
37658 }
37659 v.Reset(ssaop.OpConst32)
37660 v.AuxInt = ssa.Int32ToAuxInt(0)
37661 return true
37662 }
37663
37664
37665 for {
37666 if v_0.Op != ssaop.OpNeg32 {
37667 break
37668 }
37669 x := v_0.Args[0]
37670 if v_1.Op != ssaop.OpCom32 || x != v_1.Args[0] {
37671 break
37672 }
37673 v.Reset(ssaop.OpConst32)
37674 v.AuxInt = ssa.Int32ToAuxInt(1)
37675 return true
37676 }
37677
37678
37679 for {
37680 if v_0.Op != ssaop.OpCom32 {
37681 break
37682 }
37683 x := v_0.Args[0]
37684 if v_1.Op != ssaop.OpNeg32 || x != v_1.Args[0] {
37685 break
37686 }
37687 v.Reset(ssaop.OpConst32)
37688 v.AuxInt = ssa.Int32ToAuxInt(-1)
37689 return true
37690 }
37691
37692
37693 for {
37694 if v_0.Op != ssaop.OpAdd32 {
37695 break
37696 }
37697 _ = v_0.Args[1]
37698 v_0_0 := v_0.Args[0]
37699 v_0_1 := v_0.Args[1]
37700 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37701 t := v_0_0
37702 x := v_0_1
37703 if v_1.Op != ssaop.OpAdd32 {
37704 continue
37705 }
37706 _ = v_1.Args[1]
37707 v_1_0 := v_1.Args[0]
37708 v_1_1 := v_1.Args[1]
37709 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37710 if t != v_1_0 {
37711 continue
37712 }
37713 y := v_1_1
37714 v.Reset(ssaop.OpSub32)
37715 v.AddArg2(x, y)
37716 return true
37717 }
37718 }
37719 break
37720 }
37721
37722
37723 for {
37724 x := v_0
37725 if v_1.Op != ssaop.OpAnd32 {
37726 break
37727 }
37728 t := v_1.Type
37729 _ = v_1.Args[1]
37730 v_1_0 := v_1.Args[0]
37731 v_1_1 := v_1.Args[1]
37732 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37733 if x != v_1_0 {
37734 continue
37735 }
37736 y := v_1_1
37737 v.Reset(ssaop.OpAnd32)
37738 v0 := b.NewValue0(v.Pos, ssaop.OpCom32, t)
37739 v0.AddArg(y)
37740 v.AddArg2(x, v0)
37741 return true
37742 }
37743 break
37744 }
37745
37746
37747 for {
37748 if v_0.Op != ssaop.OpAdd32 {
37749 break
37750 }
37751 _ = v_0.Args[1]
37752 v_0_0 := v_0.Args[0]
37753 v_0_1 := v_0.Args[1]
37754 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37755 x := v_0_0
37756 y := v_0_1
37757 if x != v_1 {
37758 continue
37759 }
37760 v.CopyOf(y)
37761 return true
37762 }
37763 break
37764 }
37765
37766
37767 for {
37768 if v_0.Op != ssaop.OpAdd32 {
37769 break
37770 }
37771 _ = v_0.Args[1]
37772 v_0_0 := v_0.Args[0]
37773 v_0_1 := v_0.Args[1]
37774 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37775 x := v_0_0
37776 y := v_0_1
37777 if y != v_1 {
37778 continue
37779 }
37780 v.CopyOf(x)
37781 return true
37782 }
37783 break
37784 }
37785
37786
37787 for {
37788 if v_0.Op != ssaop.OpSub32 {
37789 break
37790 }
37791 y := v_0.Args[1]
37792 x := v_0.Args[0]
37793 if x != v_1 {
37794 break
37795 }
37796 v.Reset(ssaop.OpNeg32)
37797 v.AddArg(y)
37798 return true
37799 }
37800
37801
37802 for {
37803 x := v_0
37804 if v_1.Op != ssaop.OpAdd32 {
37805 break
37806 }
37807 _ = v_1.Args[1]
37808 v_1_0 := v_1.Args[0]
37809 v_1_1 := v_1.Args[1]
37810 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37811 if x != v_1_0 {
37812 continue
37813 }
37814 y := v_1_1
37815 v.Reset(ssaop.OpNeg32)
37816 v.AddArg(y)
37817 return true
37818 }
37819 break
37820 }
37821
37822
37823
37824 for {
37825 x := v_0
37826 if v_1.Op != ssaop.OpSub32 {
37827 break
37828 }
37829 z := v_1.Args[1]
37830 i := v_1.Args[0]
37831 if i.Op != ssaop.OpConst32 {
37832 break
37833 }
37834 t := i.Type
37835 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37836 break
37837 }
37838 v.Reset(ssaop.OpSub32)
37839 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
37840 v0.AddArg2(x, z)
37841 v.AddArg2(v0, i)
37842 return true
37843 }
37844
37845
37846
37847 for {
37848 x := v_0
37849 if v_1.Op != ssaop.OpAdd32 {
37850 break
37851 }
37852 _ = v_1.Args[1]
37853 v_1_0 := v_1.Args[0]
37854 v_1_1 := v_1.Args[1]
37855 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37856 z := v_1_0
37857 i := v_1_1
37858 if i.Op != ssaop.OpConst32 {
37859 continue
37860 }
37861 t := i.Type
37862 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37863 continue
37864 }
37865 v.Reset(ssaop.OpSub32)
37866 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
37867 v0.AddArg2(x, z)
37868 v.AddArg2(v0, i)
37869 return true
37870 }
37871 break
37872 }
37873
37874
37875
37876 for {
37877 if v_0.Op != ssaop.OpSub32 {
37878 break
37879 }
37880 z := v_0.Args[1]
37881 i := v_0.Args[0]
37882 if i.Op != ssaop.OpConst32 {
37883 break
37884 }
37885 t := i.Type
37886 x := v_1
37887 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37888 break
37889 }
37890 v.Reset(ssaop.OpSub32)
37891 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
37892 v0.AddArg2(z, x)
37893 v.AddArg2(i, v0)
37894 return true
37895 }
37896
37897
37898
37899 for {
37900 if v_0.Op != ssaop.OpAdd32 {
37901 break
37902 }
37903 _ = v_0.Args[1]
37904 v_0_0 := v_0.Args[0]
37905 v_0_1 := v_0.Args[1]
37906 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37907 z := v_0_0
37908 i := v_0_1
37909 if i.Op != ssaop.OpConst32 {
37910 continue
37911 }
37912 t := i.Type
37913 x := v_1
37914 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37915 continue
37916 }
37917 v.Reset(ssaop.OpAdd32)
37918 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
37919 v0.AddArg2(z, x)
37920 v.AddArg2(i, v0)
37921 return true
37922 }
37923 break
37924 }
37925
37926
37927 for {
37928 if v_0.Op != ssaop.OpConst32 {
37929 break
37930 }
37931 t := v_0.Type
37932 c := ssa.AuxIntToInt32(v_0.AuxInt)
37933 if v_1.Op != ssaop.OpSub32 {
37934 break
37935 }
37936 x := v_1.Args[1]
37937 v_1_0 := v_1.Args[0]
37938 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
37939 break
37940 }
37941 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
37942 v.Reset(ssaop.OpAdd32)
37943 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
37944 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
37945 v.AddArg2(v0, x)
37946 return true
37947 }
37948
37949
37950 for {
37951 if v_0.Op != ssaop.OpConst32 {
37952 break
37953 }
37954 t := v_0.Type
37955 c := ssa.AuxIntToInt32(v_0.AuxInt)
37956 if v_1.Op != ssaop.OpAdd32 {
37957 break
37958 }
37959 _ = v_1.Args[1]
37960 v_1_0 := v_1.Args[0]
37961 v_1_1 := v_1.Args[1]
37962 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37963 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
37964 continue
37965 }
37966 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
37967 x := v_1_1
37968 v.Reset(ssaop.OpSub32)
37969 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
37970 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
37971 v.AddArg2(v0, x)
37972 return true
37973 }
37974 break
37975 }
37976 return false
37977 }
37978 func rewriteValue_OpSub32F(v *ssa.Value) bool {
37979 v_1 := v.Args[1]
37980 v_0 := v.Args[0]
37981
37982
37983
37984 for {
37985 if v_0.Op != ssaop.OpConst32F {
37986 break
37987 }
37988 c := ssa.AuxIntToFloat32(v_0.AuxInt)
37989 if v_1.Op != ssaop.OpConst32F {
37990 break
37991 }
37992 d := ssa.AuxIntToFloat32(v_1.AuxInt)
37993 if !(c-d == c-d) {
37994 break
37995 }
37996 v.Reset(ssaop.OpConst32F)
37997 v.AuxInt = ssa.Float32ToAuxInt(c - d)
37998 return true
37999 }
38000 return false
38001 }
38002 func rewriteValue_OpSub64(v *ssa.Value) bool {
38003 v_1 := v.Args[1]
38004 v_0 := v.Args[0]
38005 b := v.Block
38006
38007
38008 for {
38009 if v_0.Op != ssaop.OpConst64 {
38010 break
38011 }
38012 c := ssa.AuxIntToInt64(v_0.AuxInt)
38013 if v_1.Op != ssaop.OpConst64 {
38014 break
38015 }
38016 d := ssa.AuxIntToInt64(v_1.AuxInt)
38017 v.Reset(ssaop.OpConst64)
38018 v.AuxInt = ssa.Int64ToAuxInt(c - d)
38019 return true
38020 }
38021
38022
38023
38024 for {
38025 x := v_0
38026 if v_1.Op != ssaop.OpConst64 {
38027 break
38028 }
38029 t := v_1.Type
38030 c := ssa.AuxIntToInt64(v_1.AuxInt)
38031 if !(x.Op != ssaop.OpConst64) {
38032 break
38033 }
38034 v.Reset(ssaop.OpAdd64)
38035 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
38036 v0.AuxInt = ssa.Int64ToAuxInt(-c)
38037 v.AddArg2(v0, x)
38038 return true
38039 }
38040
38041
38042 for {
38043 t := v.Type
38044 if v_0.Op != ssaop.OpMul64 {
38045 break
38046 }
38047 _ = v_0.Args[1]
38048 v_0_0 := v_0.Args[0]
38049 v_0_1 := v_0.Args[1]
38050 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38051 x := v_0_0
38052 y := v_0_1
38053 if v_1.Op != ssaop.OpMul64 {
38054 continue
38055 }
38056 _ = v_1.Args[1]
38057 v_1_0 := v_1.Args[0]
38058 v_1_1 := v_1.Args[1]
38059 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38060 if x != v_1_0 {
38061 continue
38062 }
38063 z := v_1_1
38064 v.Reset(ssaop.OpMul64)
38065 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
38066 v0.AddArg2(y, z)
38067 v.AddArg2(x, v0)
38068 return true
38069 }
38070 }
38071 break
38072 }
38073
38074
38075 for {
38076 x := v_0
38077 if x != v_1 {
38078 break
38079 }
38080 v.Reset(ssaop.OpConst64)
38081 v.AuxInt = ssa.Int64ToAuxInt(0)
38082 return true
38083 }
38084
38085
38086 for {
38087 if v_0.Op != ssaop.OpNeg64 {
38088 break
38089 }
38090 x := v_0.Args[0]
38091 if v_1.Op != ssaop.OpCom64 || x != v_1.Args[0] {
38092 break
38093 }
38094 v.Reset(ssaop.OpConst64)
38095 v.AuxInt = ssa.Int64ToAuxInt(1)
38096 return true
38097 }
38098
38099
38100 for {
38101 if v_0.Op != ssaop.OpCom64 {
38102 break
38103 }
38104 x := v_0.Args[0]
38105 if v_1.Op != ssaop.OpNeg64 || x != v_1.Args[0] {
38106 break
38107 }
38108 v.Reset(ssaop.OpConst64)
38109 v.AuxInt = ssa.Int64ToAuxInt(-1)
38110 return true
38111 }
38112
38113
38114 for {
38115 if v_0.Op != ssaop.OpAdd64 {
38116 break
38117 }
38118 _ = v_0.Args[1]
38119 v_0_0 := v_0.Args[0]
38120 v_0_1 := v_0.Args[1]
38121 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38122 t := v_0_0
38123 x := v_0_1
38124 if v_1.Op != ssaop.OpAdd64 {
38125 continue
38126 }
38127 _ = v_1.Args[1]
38128 v_1_0 := v_1.Args[0]
38129 v_1_1 := v_1.Args[1]
38130 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38131 if t != v_1_0 {
38132 continue
38133 }
38134 y := v_1_1
38135 v.Reset(ssaop.OpSub64)
38136 v.AddArg2(x, y)
38137 return true
38138 }
38139 }
38140 break
38141 }
38142
38143
38144 for {
38145 x := v_0
38146 if v_1.Op != ssaop.OpAnd64 {
38147 break
38148 }
38149 t := v_1.Type
38150 _ = v_1.Args[1]
38151 v_1_0 := v_1.Args[0]
38152 v_1_1 := v_1.Args[1]
38153 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38154 if x != v_1_0 {
38155 continue
38156 }
38157 y := v_1_1
38158 v.Reset(ssaop.OpAnd64)
38159 v0 := b.NewValue0(v.Pos, ssaop.OpCom64, t)
38160 v0.AddArg(y)
38161 v.AddArg2(x, v0)
38162 return true
38163 }
38164 break
38165 }
38166
38167
38168 for {
38169 if v_0.Op != ssaop.OpAdd64 {
38170 break
38171 }
38172 _ = v_0.Args[1]
38173 v_0_0 := v_0.Args[0]
38174 v_0_1 := v_0.Args[1]
38175 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38176 x := v_0_0
38177 y := v_0_1
38178 if x != v_1 {
38179 continue
38180 }
38181 v.CopyOf(y)
38182 return true
38183 }
38184 break
38185 }
38186
38187
38188 for {
38189 if v_0.Op != ssaop.OpAdd64 {
38190 break
38191 }
38192 _ = v_0.Args[1]
38193 v_0_0 := v_0.Args[0]
38194 v_0_1 := v_0.Args[1]
38195 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38196 x := v_0_0
38197 y := v_0_1
38198 if y != v_1 {
38199 continue
38200 }
38201 v.CopyOf(x)
38202 return true
38203 }
38204 break
38205 }
38206
38207
38208 for {
38209 if v_0.Op != ssaop.OpSub64 {
38210 break
38211 }
38212 y := v_0.Args[1]
38213 x := v_0.Args[0]
38214 if x != v_1 {
38215 break
38216 }
38217 v.Reset(ssaop.OpNeg64)
38218 v.AddArg(y)
38219 return true
38220 }
38221
38222
38223 for {
38224 x := v_0
38225 if v_1.Op != ssaop.OpAdd64 {
38226 break
38227 }
38228 _ = v_1.Args[1]
38229 v_1_0 := v_1.Args[0]
38230 v_1_1 := v_1.Args[1]
38231 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38232 if x != v_1_0 {
38233 continue
38234 }
38235 y := v_1_1
38236 v.Reset(ssaop.OpNeg64)
38237 v.AddArg(y)
38238 return true
38239 }
38240 break
38241 }
38242
38243
38244
38245 for {
38246 x := v_0
38247 if v_1.Op != ssaop.OpSub64 {
38248 break
38249 }
38250 z := v_1.Args[1]
38251 i := v_1.Args[0]
38252 if i.Op != ssaop.OpConst64 {
38253 break
38254 }
38255 t := i.Type
38256 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
38257 break
38258 }
38259 v.Reset(ssaop.OpSub64)
38260 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
38261 v0.AddArg2(x, z)
38262 v.AddArg2(v0, i)
38263 return true
38264 }
38265
38266
38267
38268 for {
38269 x := v_0
38270 if v_1.Op != ssaop.OpAdd64 {
38271 break
38272 }
38273 _ = v_1.Args[1]
38274 v_1_0 := v_1.Args[0]
38275 v_1_1 := v_1.Args[1]
38276 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38277 z := v_1_0
38278 i := v_1_1
38279 if i.Op != ssaop.OpConst64 {
38280 continue
38281 }
38282 t := i.Type
38283 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
38284 continue
38285 }
38286 v.Reset(ssaop.OpSub64)
38287 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
38288 v0.AddArg2(x, z)
38289 v.AddArg2(v0, i)
38290 return true
38291 }
38292 break
38293 }
38294
38295
38296
38297 for {
38298 if v_0.Op != ssaop.OpSub64 {
38299 break
38300 }
38301 z := v_0.Args[1]
38302 i := v_0.Args[0]
38303 if i.Op != ssaop.OpConst64 {
38304 break
38305 }
38306 t := i.Type
38307 x := v_1
38308 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
38309 break
38310 }
38311 v.Reset(ssaop.OpSub64)
38312 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
38313 v0.AddArg2(z, x)
38314 v.AddArg2(i, v0)
38315 return true
38316 }
38317
38318
38319
38320 for {
38321 if v_0.Op != ssaop.OpAdd64 {
38322 break
38323 }
38324 _ = v_0.Args[1]
38325 v_0_0 := v_0.Args[0]
38326 v_0_1 := v_0.Args[1]
38327 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38328 z := v_0_0
38329 i := v_0_1
38330 if i.Op != ssaop.OpConst64 {
38331 continue
38332 }
38333 t := i.Type
38334 x := v_1
38335 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
38336 continue
38337 }
38338 v.Reset(ssaop.OpAdd64)
38339 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
38340 v0.AddArg2(z, x)
38341 v.AddArg2(i, v0)
38342 return true
38343 }
38344 break
38345 }
38346
38347
38348 for {
38349 if v_0.Op != ssaop.OpConst64 {
38350 break
38351 }
38352 t := v_0.Type
38353 c := ssa.AuxIntToInt64(v_0.AuxInt)
38354 if v_1.Op != ssaop.OpSub64 {
38355 break
38356 }
38357 x := v_1.Args[1]
38358 v_1_0 := v_1.Args[0]
38359 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
38360 break
38361 }
38362 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
38363 v.Reset(ssaop.OpAdd64)
38364 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
38365 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
38366 v.AddArg2(v0, x)
38367 return true
38368 }
38369
38370
38371 for {
38372 if v_0.Op != ssaop.OpConst64 {
38373 break
38374 }
38375 t := v_0.Type
38376 c := ssa.AuxIntToInt64(v_0.AuxInt)
38377 if v_1.Op != ssaop.OpAdd64 {
38378 break
38379 }
38380 _ = v_1.Args[1]
38381 v_1_0 := v_1.Args[0]
38382 v_1_1 := v_1.Args[1]
38383 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38384 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
38385 continue
38386 }
38387 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
38388 x := v_1_1
38389 v.Reset(ssaop.OpSub64)
38390 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
38391 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
38392 v.AddArg2(v0, x)
38393 return true
38394 }
38395 break
38396 }
38397 return false
38398 }
38399 func rewriteValue_OpSub64F(v *ssa.Value) bool {
38400 v_1 := v.Args[1]
38401 v_0 := v.Args[0]
38402
38403
38404
38405 for {
38406 if v_0.Op != ssaop.OpConst64F {
38407 break
38408 }
38409 c := ssa.AuxIntToFloat64(v_0.AuxInt)
38410 if v_1.Op != ssaop.OpConst64F {
38411 break
38412 }
38413 d := ssa.AuxIntToFloat64(v_1.AuxInt)
38414 if !(c-d == c-d) {
38415 break
38416 }
38417 v.Reset(ssaop.OpConst64F)
38418 v.AuxInt = ssa.Float64ToAuxInt(c - d)
38419 return true
38420 }
38421 return false
38422 }
38423 func rewriteValue_OpSub64borrow(v *ssa.Value) bool {
38424 v_2 := v.Args[2]
38425 v_1 := v.Args[1]
38426 v_0 := v.Args[0]
38427 b := v.Block
38428
38429
38430
38431 for {
38432 if v_0.Op != ssaop.OpConst64 {
38433 break
38434 }
38435 t := v_0.Type
38436 x := ssa.AuxIntToInt64(v_0.AuxInt)
38437 if v_1.Op != ssaop.OpConst64 {
38438 break
38439 }
38440 y := ssa.AuxIntToInt64(v_1.AuxInt)
38441 if v_2.Op != ssaop.OpConst64 {
38442 break
38443 }
38444 borrowVal := ssa.AuxIntToInt64(v_2.AuxInt)
38445 if !(borrowVal >= 0 && borrowVal <= 1) {
38446 break
38447 }
38448 v.Reset(ssaop.OpMakeTuple)
38449 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
38450 v0.AuxInt = ssa.Int64ToAuxInt(bitsSub64(x, y, borrowVal).diff)
38451 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
38452 v1.AuxInt = ssa.Int64ToAuxInt(bitsSub64(x, y, borrowVal).borrow)
38453 v.AddArg2(v0, v1)
38454 return true
38455 }
38456 return false
38457 }
38458 func rewriteValue_OpSub8(v *ssa.Value) bool {
38459 v_1 := v.Args[1]
38460 v_0 := v.Args[0]
38461 b := v.Block
38462
38463
38464 for {
38465 if v_0.Op != ssaop.OpConst8 {
38466 break
38467 }
38468 c := ssa.AuxIntToInt8(v_0.AuxInt)
38469 if v_1.Op != ssaop.OpConst8 {
38470 break
38471 }
38472 d := ssa.AuxIntToInt8(v_1.AuxInt)
38473 v.Reset(ssaop.OpConst8)
38474 v.AuxInt = ssa.Int8ToAuxInt(c - d)
38475 return true
38476 }
38477
38478
38479
38480 for {
38481 x := v_0
38482 if v_1.Op != ssaop.OpConst8 {
38483 break
38484 }
38485 t := v_1.Type
38486 c := ssa.AuxIntToInt8(v_1.AuxInt)
38487 if !(x.Op != ssaop.OpConst8) {
38488 break
38489 }
38490 v.Reset(ssaop.OpAdd8)
38491 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
38492 v0.AuxInt = ssa.Int8ToAuxInt(-c)
38493 v.AddArg2(v0, x)
38494 return true
38495 }
38496
38497
38498 for {
38499 t := v.Type
38500 if v_0.Op != ssaop.OpMul8 {
38501 break
38502 }
38503 _ = v_0.Args[1]
38504 v_0_0 := v_0.Args[0]
38505 v_0_1 := v_0.Args[1]
38506 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38507 x := v_0_0
38508 y := v_0_1
38509 if v_1.Op != ssaop.OpMul8 {
38510 continue
38511 }
38512 _ = v_1.Args[1]
38513 v_1_0 := v_1.Args[0]
38514 v_1_1 := v_1.Args[1]
38515 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38516 if x != v_1_0 {
38517 continue
38518 }
38519 z := v_1_1
38520 v.Reset(ssaop.OpMul8)
38521 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
38522 v0.AddArg2(y, z)
38523 v.AddArg2(x, v0)
38524 return true
38525 }
38526 }
38527 break
38528 }
38529
38530
38531 for {
38532 x := v_0
38533 if x != v_1 {
38534 break
38535 }
38536 v.Reset(ssaop.OpConst8)
38537 v.AuxInt = ssa.Int8ToAuxInt(0)
38538 return true
38539 }
38540
38541
38542 for {
38543 if v_0.Op != ssaop.OpNeg8 {
38544 break
38545 }
38546 x := v_0.Args[0]
38547 if v_1.Op != ssaop.OpCom8 || x != v_1.Args[0] {
38548 break
38549 }
38550 v.Reset(ssaop.OpConst8)
38551 v.AuxInt = ssa.Int8ToAuxInt(1)
38552 return true
38553 }
38554
38555
38556 for {
38557 if v_0.Op != ssaop.OpCom8 {
38558 break
38559 }
38560 x := v_0.Args[0]
38561 if v_1.Op != ssaop.OpNeg8 || x != v_1.Args[0] {
38562 break
38563 }
38564 v.Reset(ssaop.OpConst8)
38565 v.AuxInt = ssa.Int8ToAuxInt(-1)
38566 return true
38567 }
38568
38569
38570 for {
38571 if v_0.Op != ssaop.OpAdd8 {
38572 break
38573 }
38574 _ = v_0.Args[1]
38575 v_0_0 := v_0.Args[0]
38576 v_0_1 := v_0.Args[1]
38577 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38578 t := v_0_0
38579 x := v_0_1
38580 if v_1.Op != ssaop.OpAdd8 {
38581 continue
38582 }
38583 _ = v_1.Args[1]
38584 v_1_0 := v_1.Args[0]
38585 v_1_1 := v_1.Args[1]
38586 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38587 if t != v_1_0 {
38588 continue
38589 }
38590 y := v_1_1
38591 v.Reset(ssaop.OpSub8)
38592 v.AddArg2(x, y)
38593 return true
38594 }
38595 }
38596 break
38597 }
38598
38599
38600 for {
38601 x := v_0
38602 if v_1.Op != ssaop.OpAnd8 {
38603 break
38604 }
38605 t := v_1.Type
38606 _ = v_1.Args[1]
38607 v_1_0 := v_1.Args[0]
38608 v_1_1 := v_1.Args[1]
38609 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38610 if x != v_1_0 {
38611 continue
38612 }
38613 y := v_1_1
38614 v.Reset(ssaop.OpAnd8)
38615 v0 := b.NewValue0(v.Pos, ssaop.OpCom8, t)
38616 v0.AddArg(y)
38617 v.AddArg2(x, v0)
38618 return true
38619 }
38620 break
38621 }
38622
38623
38624 for {
38625 if v_0.Op != ssaop.OpAdd8 {
38626 break
38627 }
38628 _ = v_0.Args[1]
38629 v_0_0 := v_0.Args[0]
38630 v_0_1 := v_0.Args[1]
38631 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38632 x := v_0_0
38633 y := v_0_1
38634 if x != v_1 {
38635 continue
38636 }
38637 v.CopyOf(y)
38638 return true
38639 }
38640 break
38641 }
38642
38643
38644 for {
38645 if v_0.Op != ssaop.OpAdd8 {
38646 break
38647 }
38648 _ = v_0.Args[1]
38649 v_0_0 := v_0.Args[0]
38650 v_0_1 := v_0.Args[1]
38651 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38652 x := v_0_0
38653 y := v_0_1
38654 if y != v_1 {
38655 continue
38656 }
38657 v.CopyOf(x)
38658 return true
38659 }
38660 break
38661 }
38662
38663
38664 for {
38665 if v_0.Op != ssaop.OpSub8 {
38666 break
38667 }
38668 y := v_0.Args[1]
38669 x := v_0.Args[0]
38670 if x != v_1 {
38671 break
38672 }
38673 v.Reset(ssaop.OpNeg8)
38674 v.AddArg(y)
38675 return true
38676 }
38677
38678
38679 for {
38680 x := v_0
38681 if v_1.Op != ssaop.OpAdd8 {
38682 break
38683 }
38684 _ = v_1.Args[1]
38685 v_1_0 := v_1.Args[0]
38686 v_1_1 := v_1.Args[1]
38687 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38688 if x != v_1_0 {
38689 continue
38690 }
38691 y := v_1_1
38692 v.Reset(ssaop.OpNeg8)
38693 v.AddArg(y)
38694 return true
38695 }
38696 break
38697 }
38698
38699
38700
38701 for {
38702 x := v_0
38703 if v_1.Op != ssaop.OpSub8 {
38704 break
38705 }
38706 z := v_1.Args[1]
38707 i := v_1.Args[0]
38708 if i.Op != ssaop.OpConst8 {
38709 break
38710 }
38711 t := i.Type
38712 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38713 break
38714 }
38715 v.Reset(ssaop.OpSub8)
38716 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
38717 v0.AddArg2(x, z)
38718 v.AddArg2(v0, i)
38719 return true
38720 }
38721
38722
38723
38724 for {
38725 x := v_0
38726 if v_1.Op != ssaop.OpAdd8 {
38727 break
38728 }
38729 _ = v_1.Args[1]
38730 v_1_0 := v_1.Args[0]
38731 v_1_1 := v_1.Args[1]
38732 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38733 z := v_1_0
38734 i := v_1_1
38735 if i.Op != ssaop.OpConst8 {
38736 continue
38737 }
38738 t := i.Type
38739 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38740 continue
38741 }
38742 v.Reset(ssaop.OpSub8)
38743 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
38744 v0.AddArg2(x, z)
38745 v.AddArg2(v0, i)
38746 return true
38747 }
38748 break
38749 }
38750
38751
38752
38753 for {
38754 if v_0.Op != ssaop.OpSub8 {
38755 break
38756 }
38757 z := v_0.Args[1]
38758 i := v_0.Args[0]
38759 if i.Op != ssaop.OpConst8 {
38760 break
38761 }
38762 t := i.Type
38763 x := v_1
38764 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38765 break
38766 }
38767 v.Reset(ssaop.OpSub8)
38768 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
38769 v0.AddArg2(z, x)
38770 v.AddArg2(i, v0)
38771 return true
38772 }
38773
38774
38775
38776 for {
38777 if v_0.Op != ssaop.OpAdd8 {
38778 break
38779 }
38780 _ = v_0.Args[1]
38781 v_0_0 := v_0.Args[0]
38782 v_0_1 := v_0.Args[1]
38783 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38784 z := v_0_0
38785 i := v_0_1
38786 if i.Op != ssaop.OpConst8 {
38787 continue
38788 }
38789 t := i.Type
38790 x := v_1
38791 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38792 continue
38793 }
38794 v.Reset(ssaop.OpAdd8)
38795 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
38796 v0.AddArg2(z, x)
38797 v.AddArg2(i, v0)
38798 return true
38799 }
38800 break
38801 }
38802
38803
38804 for {
38805 if v_0.Op != ssaop.OpConst8 {
38806 break
38807 }
38808 t := v_0.Type
38809 c := ssa.AuxIntToInt8(v_0.AuxInt)
38810 if v_1.Op != ssaop.OpSub8 {
38811 break
38812 }
38813 x := v_1.Args[1]
38814 v_1_0 := v_1.Args[0]
38815 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
38816 break
38817 }
38818 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
38819 v.Reset(ssaop.OpAdd8)
38820 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
38821 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
38822 v.AddArg2(v0, x)
38823 return true
38824 }
38825
38826
38827 for {
38828 if v_0.Op != ssaop.OpConst8 {
38829 break
38830 }
38831 t := v_0.Type
38832 c := ssa.AuxIntToInt8(v_0.AuxInt)
38833 if v_1.Op != ssaop.OpAdd8 {
38834 break
38835 }
38836 _ = v_1.Args[1]
38837 v_1_0 := v_1.Args[0]
38838 v_1_1 := v_1.Args[1]
38839 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38840 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
38841 continue
38842 }
38843 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
38844 x := v_1_1
38845 v.Reset(ssaop.OpSub8)
38846 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
38847 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
38848 v.AddArg2(v0, x)
38849 return true
38850 }
38851 break
38852 }
38853 return false
38854 }
38855 func rewriteValue_OpTrunc(v *ssa.Value) bool {
38856 v_0 := v.Args[0]
38857
38858
38859 for {
38860 if v_0.Op != ssaop.OpConst64F {
38861 break
38862 }
38863 c := ssa.AuxIntToFloat64(v_0.AuxInt)
38864 v.Reset(ssaop.OpConst64F)
38865 v.AuxInt = ssa.Float64ToAuxInt(math.Trunc(c))
38866 return true
38867 }
38868 return false
38869 }
38870 func rewriteValue_OpTrunc16to8(v *ssa.Value) bool {
38871 v_0 := v.Args[0]
38872
38873
38874 for {
38875 if v_0.Op != ssaop.OpConst16 {
38876 break
38877 }
38878 c := ssa.AuxIntToInt16(v_0.AuxInt)
38879 v.Reset(ssaop.OpConst8)
38880 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
38881 return true
38882 }
38883
38884
38885 for {
38886 if v_0.Op != ssaop.OpZeroExt8to16 {
38887 break
38888 }
38889 x := v_0.Args[0]
38890 v.CopyOf(x)
38891 return true
38892 }
38893
38894
38895 for {
38896 if v_0.Op != ssaop.OpSignExt8to16 {
38897 break
38898 }
38899 x := v_0.Args[0]
38900 v.CopyOf(x)
38901 return true
38902 }
38903
38904
38905
38906 for {
38907 if v_0.Op != ssaop.OpAnd16 {
38908 break
38909 }
38910 _ = v_0.Args[1]
38911 v_0_0 := v_0.Args[0]
38912 v_0_1 := v_0.Args[1]
38913 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38914 if v_0_0.Op != ssaop.OpConst16 {
38915 continue
38916 }
38917 y := ssa.AuxIntToInt16(v_0_0.AuxInt)
38918 x := v_0_1
38919 if !(y&0xFF == 0xFF) {
38920 continue
38921 }
38922 v.Reset(ssaop.OpTrunc16to8)
38923 v.AddArg(x)
38924 return true
38925 }
38926 break
38927 }
38928 return false
38929 }
38930 func rewriteValue_OpTrunc32to16(v *ssa.Value) bool {
38931 v_0 := v.Args[0]
38932
38933
38934 for {
38935 if v_0.Op != ssaop.OpConst32 {
38936 break
38937 }
38938 c := ssa.AuxIntToInt32(v_0.AuxInt)
38939 v.Reset(ssaop.OpConst16)
38940 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
38941 return true
38942 }
38943
38944
38945 for {
38946 if v_0.Op != ssaop.OpZeroExt8to32 {
38947 break
38948 }
38949 x := v_0.Args[0]
38950 v.Reset(ssaop.OpZeroExt8to16)
38951 v.AddArg(x)
38952 return true
38953 }
38954
38955
38956 for {
38957 if v_0.Op != ssaop.OpZeroExt16to32 {
38958 break
38959 }
38960 x := v_0.Args[0]
38961 v.CopyOf(x)
38962 return true
38963 }
38964
38965
38966 for {
38967 if v_0.Op != ssaop.OpSignExt8to32 {
38968 break
38969 }
38970 x := v_0.Args[0]
38971 v.Reset(ssaop.OpSignExt8to16)
38972 v.AddArg(x)
38973 return true
38974 }
38975
38976
38977 for {
38978 if v_0.Op != ssaop.OpSignExt16to32 {
38979 break
38980 }
38981 x := v_0.Args[0]
38982 v.CopyOf(x)
38983 return true
38984 }
38985
38986
38987
38988 for {
38989 if v_0.Op != ssaop.OpAnd32 {
38990 break
38991 }
38992 _ = v_0.Args[1]
38993 v_0_0 := v_0.Args[0]
38994 v_0_1 := v_0.Args[1]
38995 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38996 if v_0_0.Op != ssaop.OpConst32 {
38997 continue
38998 }
38999 y := ssa.AuxIntToInt32(v_0_0.AuxInt)
39000 x := v_0_1
39001 if !(y&0xFFFF == 0xFFFF) {
39002 continue
39003 }
39004 v.Reset(ssaop.OpTrunc32to16)
39005 v.AddArg(x)
39006 return true
39007 }
39008 break
39009 }
39010 return false
39011 }
39012 func rewriteValue_OpTrunc32to8(v *ssa.Value) bool {
39013 v_0 := v.Args[0]
39014
39015
39016 for {
39017 if v_0.Op != ssaop.OpConst32 {
39018 break
39019 }
39020 c := ssa.AuxIntToInt32(v_0.AuxInt)
39021 v.Reset(ssaop.OpConst8)
39022 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
39023 return true
39024 }
39025
39026
39027 for {
39028 if v_0.Op != ssaop.OpZeroExt8to32 {
39029 break
39030 }
39031 x := v_0.Args[0]
39032 v.CopyOf(x)
39033 return true
39034 }
39035
39036
39037 for {
39038 if v_0.Op != ssaop.OpSignExt8to32 {
39039 break
39040 }
39041 x := v_0.Args[0]
39042 v.CopyOf(x)
39043 return true
39044 }
39045
39046
39047
39048 for {
39049 if v_0.Op != ssaop.OpAnd32 {
39050 break
39051 }
39052 _ = v_0.Args[1]
39053 v_0_0 := v_0.Args[0]
39054 v_0_1 := v_0.Args[1]
39055 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
39056 if v_0_0.Op != ssaop.OpConst32 {
39057 continue
39058 }
39059 y := ssa.AuxIntToInt32(v_0_0.AuxInt)
39060 x := v_0_1
39061 if !(y&0xFF == 0xFF) {
39062 continue
39063 }
39064 v.Reset(ssaop.OpTrunc32to8)
39065 v.AddArg(x)
39066 return true
39067 }
39068 break
39069 }
39070 return false
39071 }
39072 func rewriteValue_OpTrunc64to16(v *ssa.Value) bool {
39073 v_0 := v.Args[0]
39074
39075
39076 for {
39077 if v_0.Op != ssaop.OpConst64 {
39078 break
39079 }
39080 c := ssa.AuxIntToInt64(v_0.AuxInt)
39081 v.Reset(ssaop.OpConst16)
39082 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
39083 return true
39084 }
39085
39086
39087 for {
39088 if v_0.Op != ssaop.OpZeroExt8to64 {
39089 break
39090 }
39091 x := v_0.Args[0]
39092 v.Reset(ssaop.OpZeroExt8to16)
39093 v.AddArg(x)
39094 return true
39095 }
39096
39097
39098 for {
39099 if v_0.Op != ssaop.OpZeroExt16to64 {
39100 break
39101 }
39102 x := v_0.Args[0]
39103 v.CopyOf(x)
39104 return true
39105 }
39106
39107
39108 for {
39109 if v_0.Op != ssaop.OpSignExt8to64 {
39110 break
39111 }
39112 x := v_0.Args[0]
39113 v.Reset(ssaop.OpSignExt8to16)
39114 v.AddArg(x)
39115 return true
39116 }
39117
39118
39119 for {
39120 if v_0.Op != ssaop.OpSignExt16to64 {
39121 break
39122 }
39123 x := v_0.Args[0]
39124 v.CopyOf(x)
39125 return true
39126 }
39127
39128
39129
39130 for {
39131 if v_0.Op != ssaop.OpAnd64 {
39132 break
39133 }
39134 _ = v_0.Args[1]
39135 v_0_0 := v_0.Args[0]
39136 v_0_1 := v_0.Args[1]
39137 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
39138 if v_0_0.Op != ssaop.OpConst64 {
39139 continue
39140 }
39141 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
39142 x := v_0_1
39143 if !(y&0xFFFF == 0xFFFF) {
39144 continue
39145 }
39146 v.Reset(ssaop.OpTrunc64to16)
39147 v.AddArg(x)
39148 return true
39149 }
39150 break
39151 }
39152 return false
39153 }
39154 func rewriteValue_OpTrunc64to32(v *ssa.Value) bool {
39155 v_0 := v.Args[0]
39156
39157
39158 for {
39159 if v_0.Op != ssaop.OpConst64 {
39160 break
39161 }
39162 c := ssa.AuxIntToInt64(v_0.AuxInt)
39163 v.Reset(ssaop.OpConst32)
39164 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
39165 return true
39166 }
39167
39168
39169 for {
39170 if v_0.Op != ssaop.OpZeroExt8to64 {
39171 break
39172 }
39173 x := v_0.Args[0]
39174 v.Reset(ssaop.OpZeroExt8to32)
39175 v.AddArg(x)
39176 return true
39177 }
39178
39179
39180 for {
39181 if v_0.Op != ssaop.OpZeroExt16to64 {
39182 break
39183 }
39184 x := v_0.Args[0]
39185 v.Reset(ssaop.OpZeroExt16to32)
39186 v.AddArg(x)
39187 return true
39188 }
39189
39190
39191 for {
39192 if v_0.Op != ssaop.OpZeroExt32to64 {
39193 break
39194 }
39195 x := v_0.Args[0]
39196 v.CopyOf(x)
39197 return true
39198 }
39199
39200
39201 for {
39202 if v_0.Op != ssaop.OpSignExt8to64 {
39203 break
39204 }
39205 x := v_0.Args[0]
39206 v.Reset(ssaop.OpSignExt8to32)
39207 v.AddArg(x)
39208 return true
39209 }
39210
39211
39212 for {
39213 if v_0.Op != ssaop.OpSignExt16to64 {
39214 break
39215 }
39216 x := v_0.Args[0]
39217 v.Reset(ssaop.OpSignExt16to32)
39218 v.AddArg(x)
39219 return true
39220 }
39221
39222
39223 for {
39224 if v_0.Op != ssaop.OpSignExt32to64 {
39225 break
39226 }
39227 x := v_0.Args[0]
39228 v.CopyOf(x)
39229 return true
39230 }
39231
39232
39233
39234 for {
39235 if v_0.Op != ssaop.OpAnd64 {
39236 break
39237 }
39238 _ = v_0.Args[1]
39239 v_0_0 := v_0.Args[0]
39240 v_0_1 := v_0.Args[1]
39241 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
39242 if v_0_0.Op != ssaop.OpConst64 {
39243 continue
39244 }
39245 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
39246 x := v_0_1
39247 if !(y&0xFFFFFFFF == 0xFFFFFFFF) {
39248 continue
39249 }
39250 v.Reset(ssaop.OpTrunc64to32)
39251 v.AddArg(x)
39252 return true
39253 }
39254 break
39255 }
39256 return false
39257 }
39258 func rewriteValue_OpTrunc64to8(v *ssa.Value) bool {
39259 v_0 := v.Args[0]
39260
39261
39262 for {
39263 if v_0.Op != ssaop.OpConst64 {
39264 break
39265 }
39266 c := ssa.AuxIntToInt64(v_0.AuxInt)
39267 v.Reset(ssaop.OpConst8)
39268 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
39269 return true
39270 }
39271
39272
39273 for {
39274 if v_0.Op != ssaop.OpZeroExt8to64 {
39275 break
39276 }
39277 x := v_0.Args[0]
39278 v.CopyOf(x)
39279 return true
39280 }
39281
39282
39283 for {
39284 if v_0.Op != ssaop.OpSignExt8to64 {
39285 break
39286 }
39287 x := v_0.Args[0]
39288 v.CopyOf(x)
39289 return true
39290 }
39291
39292
39293
39294 for {
39295 if v_0.Op != ssaop.OpAnd64 {
39296 break
39297 }
39298 _ = v_0.Args[1]
39299 v_0_0 := v_0.Args[0]
39300 v_0_1 := v_0.Args[1]
39301 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
39302 if v_0_0.Op != ssaop.OpConst64 {
39303 continue
39304 }
39305 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
39306 x := v_0_1
39307 if !(y&0xFF == 0xFF) {
39308 continue
39309 }
39310 v.Reset(ssaop.OpTrunc64to8)
39311 v.AddArg(x)
39312 return true
39313 }
39314 break
39315 }
39316 return false
39317 }
39318 func rewriteValue_OpXor16(v *ssa.Value) bool {
39319 v_1 := v.Args[1]
39320 v_0 := v.Args[0]
39321 b := v.Block
39322 config := b.Func.Config
39323 typ := &b.Func.Config.Types
39324
39325
39326 for {
39327 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39328 if v_0.Op != ssaop.OpConst16 {
39329 continue
39330 }
39331 c := ssa.AuxIntToInt16(v_0.AuxInt)
39332 if v_1.Op != ssaop.OpConst16 {
39333 continue
39334 }
39335 d := ssa.AuxIntToInt16(v_1.AuxInt)
39336 v.Reset(ssaop.OpConst16)
39337 v.AuxInt = ssa.Int16ToAuxInt(c ^ d)
39338 return true
39339 }
39340 break
39341 }
39342
39343
39344 for {
39345 x := v_0
39346 if x != v_1 {
39347 break
39348 }
39349 v.Reset(ssaop.OpConst16)
39350 v.AuxInt = ssa.Int16ToAuxInt(0)
39351 return true
39352 }
39353
39354
39355 for {
39356 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39357 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
39358 continue
39359 }
39360 x := v_1
39361 v.CopyOf(x)
39362 return true
39363 }
39364 break
39365 }
39366
39367
39368 for {
39369 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39370 if v_0.Op != ssaop.OpCom16 {
39371 continue
39372 }
39373 x := v_0.Args[0]
39374 if x != v_1 {
39375 continue
39376 }
39377 v.Reset(ssaop.OpConst16)
39378 v.AuxInt = ssa.Int16ToAuxInt(-1)
39379 return true
39380 }
39381 break
39382 }
39383
39384
39385 for {
39386 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39387 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
39388 continue
39389 }
39390 x := v_1
39391 v.Reset(ssaop.OpCom16)
39392 v.AddArg(x)
39393 return true
39394 }
39395 break
39396 }
39397
39398
39399 for {
39400 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39401 x := v_0
39402 if v_1.Op != ssaop.OpXor16 {
39403 continue
39404 }
39405 _ = v_1.Args[1]
39406 v_1_0 := v_1.Args[0]
39407 v_1_1 := v_1.Args[1]
39408 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39409 if x != v_1_0 {
39410 continue
39411 }
39412 y := v_1_1
39413 v.CopyOf(y)
39414 return true
39415 }
39416 }
39417 break
39418 }
39419
39420
39421
39422 for {
39423 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39424 if v_0.Op != ssaop.OpXor16 {
39425 continue
39426 }
39427 _ = v_0.Args[1]
39428 v_0_0 := v_0.Args[0]
39429 v_0_1 := v_0.Args[1]
39430 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
39431 i := v_0_0
39432 if i.Op != ssaop.OpConst16 {
39433 continue
39434 }
39435 t := i.Type
39436 z := v_0_1
39437 x := v_1
39438 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
39439 continue
39440 }
39441 v.Reset(ssaop.OpXor16)
39442 v0 := b.NewValue0(v.Pos, ssaop.OpXor16, t)
39443 v0.AddArg2(z, x)
39444 v.AddArg2(i, v0)
39445 return true
39446 }
39447 }
39448 break
39449 }
39450
39451
39452 for {
39453 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39454 if v_0.Op != ssaop.OpConst16 {
39455 continue
39456 }
39457 t := v_0.Type
39458 c := ssa.AuxIntToInt16(v_0.AuxInt)
39459 if v_1.Op != ssaop.OpXor16 {
39460 continue
39461 }
39462 _ = v_1.Args[1]
39463 v_1_0 := v_1.Args[0]
39464 v_1_1 := v_1.Args[1]
39465 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39466 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
39467 continue
39468 }
39469 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
39470 x := v_1_1
39471 v.Reset(ssaop.OpXor16)
39472 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
39473 v0.AuxInt = ssa.Int16ToAuxInt(c ^ d)
39474 v.AddArg2(v0, x)
39475 return true
39476 }
39477 }
39478 break
39479 }
39480
39481
39482
39483 for {
39484 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39485 if v_0.Op != ssaop.OpLsh16x64 {
39486 continue
39487 }
39488 _ = v_0.Args[1]
39489 x := v_0.Args[0]
39490 z := v_0.Args[1]
39491 if z.Op != ssaop.OpConst64 {
39492 continue
39493 }
39494 c := ssa.AuxIntToInt64(z.AuxInt)
39495 if v_1.Op != ssaop.OpRsh16Ux64 {
39496 continue
39497 }
39498 _ = v_1.Args[1]
39499 if x != v_1.Args[0] {
39500 continue
39501 }
39502 v_1_1 := v_1.Args[1]
39503 if v_1_1.Op != ssaop.OpConst64 {
39504 continue
39505 }
39506 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
39507 if !(c < 16 && d == 16-c && canRotate(config, 16)) {
39508 continue
39509 }
39510 v.Reset(ssaop.OpRotateLeft16)
39511 v.AddArg2(x, z)
39512 return true
39513 }
39514 break
39515 }
39516
39517
39518
39519 for {
39520 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39521 left := v_0
39522 if left.Op != ssaop.OpLsh16x64 {
39523 continue
39524 }
39525 y := left.Args[1]
39526 x := left.Args[0]
39527 right := v_1
39528 if right.Op != ssaop.OpRsh16Ux64 {
39529 continue
39530 }
39531 _ = right.Args[1]
39532 if x != right.Args[0] {
39533 continue
39534 }
39535 right_1 := right.Args[1]
39536 if right_1.Op != ssaop.OpSub64 {
39537 continue
39538 }
39539 _ = right_1.Args[1]
39540 right_1_0 := right_1.Args[0]
39541 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)) {
39542 continue
39543 }
39544 v.Reset(ssaop.OpRotateLeft16)
39545 v.AddArg2(x, y)
39546 return true
39547 }
39548 break
39549 }
39550
39551
39552
39553 for {
39554 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39555 left := v_0
39556 if left.Op != ssaop.OpLsh16x32 {
39557 continue
39558 }
39559 y := left.Args[1]
39560 x := left.Args[0]
39561 right := v_1
39562 if right.Op != ssaop.OpRsh16Ux32 {
39563 continue
39564 }
39565 _ = right.Args[1]
39566 if x != right.Args[0] {
39567 continue
39568 }
39569 right_1 := right.Args[1]
39570 if right_1.Op != ssaop.OpSub32 {
39571 continue
39572 }
39573 _ = right_1.Args[1]
39574 right_1_0 := right_1.Args[0]
39575 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)) {
39576 continue
39577 }
39578 v.Reset(ssaop.OpRotateLeft16)
39579 v.AddArg2(x, y)
39580 return true
39581 }
39582 break
39583 }
39584
39585
39586
39587 for {
39588 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39589 left := v_0
39590 if left.Op != ssaop.OpLsh16x16 {
39591 continue
39592 }
39593 y := left.Args[1]
39594 x := left.Args[0]
39595 right := v_1
39596 if right.Op != ssaop.OpRsh16Ux16 {
39597 continue
39598 }
39599 _ = right.Args[1]
39600 if x != right.Args[0] {
39601 continue
39602 }
39603 right_1 := right.Args[1]
39604 if right_1.Op != ssaop.OpSub16 {
39605 continue
39606 }
39607 _ = right_1.Args[1]
39608 right_1_0 := right_1.Args[0]
39609 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)) {
39610 continue
39611 }
39612 v.Reset(ssaop.OpRotateLeft16)
39613 v.AddArg2(x, y)
39614 return true
39615 }
39616 break
39617 }
39618
39619
39620
39621 for {
39622 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39623 left := v_0
39624 if left.Op != ssaop.OpLsh16x8 {
39625 continue
39626 }
39627 y := left.Args[1]
39628 x := left.Args[0]
39629 right := v_1
39630 if right.Op != ssaop.OpRsh16Ux8 {
39631 continue
39632 }
39633 _ = right.Args[1]
39634 if x != right.Args[0] {
39635 continue
39636 }
39637 right_1 := right.Args[1]
39638 if right_1.Op != ssaop.OpSub8 {
39639 continue
39640 }
39641 _ = right_1.Args[1]
39642 right_1_0 := right_1.Args[0]
39643 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)) {
39644 continue
39645 }
39646 v.Reset(ssaop.OpRotateLeft16)
39647 v.AddArg2(x, y)
39648 return true
39649 }
39650 break
39651 }
39652
39653
39654
39655 for {
39656 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39657 right := v_0
39658 if right.Op != ssaop.OpRsh16Ux64 {
39659 continue
39660 }
39661 y := right.Args[1]
39662 x := right.Args[0]
39663 left := v_1
39664 if left.Op != ssaop.OpLsh16x64 {
39665 continue
39666 }
39667 _ = left.Args[1]
39668 if x != left.Args[0] {
39669 continue
39670 }
39671 z := left.Args[1]
39672 if z.Op != ssaop.OpSub64 {
39673 continue
39674 }
39675 _ = z.Args[1]
39676 z_0 := z.Args[0]
39677 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)) {
39678 continue
39679 }
39680 v.Reset(ssaop.OpRotateLeft16)
39681 v.AddArg2(x, z)
39682 return true
39683 }
39684 break
39685 }
39686
39687
39688
39689 for {
39690 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39691 right := v_0
39692 if right.Op != ssaop.OpRsh16Ux32 {
39693 continue
39694 }
39695 y := right.Args[1]
39696 x := right.Args[0]
39697 left := v_1
39698 if left.Op != ssaop.OpLsh16x32 {
39699 continue
39700 }
39701 _ = left.Args[1]
39702 if x != left.Args[0] {
39703 continue
39704 }
39705 z := left.Args[1]
39706 if z.Op != ssaop.OpSub32 {
39707 continue
39708 }
39709 _ = z.Args[1]
39710 z_0 := z.Args[0]
39711 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)) {
39712 continue
39713 }
39714 v.Reset(ssaop.OpRotateLeft16)
39715 v.AddArg2(x, z)
39716 return true
39717 }
39718 break
39719 }
39720
39721
39722
39723 for {
39724 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39725 right := v_0
39726 if right.Op != ssaop.OpRsh16Ux16 {
39727 continue
39728 }
39729 y := right.Args[1]
39730 x := right.Args[0]
39731 left := v_1
39732 if left.Op != ssaop.OpLsh16x16 {
39733 continue
39734 }
39735 _ = left.Args[1]
39736 if x != left.Args[0] {
39737 continue
39738 }
39739 z := left.Args[1]
39740 if z.Op != ssaop.OpSub16 {
39741 continue
39742 }
39743 _ = z.Args[1]
39744 z_0 := z.Args[0]
39745 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)) {
39746 continue
39747 }
39748 v.Reset(ssaop.OpRotateLeft16)
39749 v.AddArg2(x, z)
39750 return true
39751 }
39752 break
39753 }
39754
39755
39756
39757 for {
39758 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39759 right := v_0
39760 if right.Op != ssaop.OpRsh16Ux8 {
39761 continue
39762 }
39763 y := right.Args[1]
39764 x := right.Args[0]
39765 left := v_1
39766 if left.Op != ssaop.OpLsh16x8 {
39767 continue
39768 }
39769 _ = left.Args[1]
39770 if x != left.Args[0] {
39771 continue
39772 }
39773 z := left.Args[1]
39774 if z.Op != ssaop.OpSub8 {
39775 continue
39776 }
39777 _ = z.Args[1]
39778 z_0 := z.Args[0]
39779 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)) {
39780 continue
39781 }
39782 v.Reset(ssaop.OpRotateLeft16)
39783 v.AddArg2(x, z)
39784 return true
39785 }
39786 break
39787 }
39788
39789
39790
39791 for {
39792 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39793 if v_0.Op != ssaop.OpZeroExt8to16 {
39794 continue
39795 }
39796 v_0_0 := v_0.Args[0]
39797 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39798 continue
39799 }
39800 cvtT := v_0_0.Type
39801 bool := v_0_0.Args[0]
39802 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
39803 continue
39804 }
39805 v.Reset(ssaop.OpZeroExt8to16)
39806 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39807 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
39808 v1.AddArg(bool)
39809 v0.AddArg(v1)
39810 v.AddArg(v0)
39811 return true
39812 }
39813 break
39814 }
39815
39816
39817
39818 for {
39819 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39820 if v_0.Op != ssaop.OpZeroExt8to16 {
39821 continue
39822 }
39823 v_0_0 := v_0.Args[0]
39824 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39825 continue
39826 }
39827 cvtT := v_0_0.Type
39828 v_0_0_0 := v_0_0.Args[0]
39829 if v_0_0_0.Op != ssaop.OpNot {
39830 continue
39831 }
39832 bool := v_0_0_0.Args[0]
39833 if v_1.Op != ssaop.OpConst16 {
39834 continue
39835 }
39836 constT := v_1.Type
39837 c := ssa.AuxIntToInt16(v_1.AuxInt)
39838 if !(c != 1) {
39839 continue
39840 }
39841 v.Reset(ssaop.OpXor16)
39842 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, typ.UInt16)
39843 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39844 v1.AddArg(bool)
39845 v0.AddArg(v1)
39846 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, constT)
39847 v2.AuxInt = ssa.Int16ToAuxInt(c ^ 1)
39848 v.AddArg2(v0, v2)
39849 return true
39850 }
39851 break
39852 }
39853 return false
39854 }
39855 func rewriteValue_OpXor32(v *ssa.Value) bool {
39856 v_1 := v.Args[1]
39857 v_0 := v.Args[0]
39858 b := v.Block
39859 config := b.Func.Config
39860 typ := &b.Func.Config.Types
39861
39862
39863 for {
39864 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39865 if v_0.Op != ssaop.OpConst32 {
39866 continue
39867 }
39868 c := ssa.AuxIntToInt32(v_0.AuxInt)
39869 if v_1.Op != ssaop.OpConst32 {
39870 continue
39871 }
39872 d := ssa.AuxIntToInt32(v_1.AuxInt)
39873 v.Reset(ssaop.OpConst32)
39874 v.AuxInt = ssa.Int32ToAuxInt(c ^ d)
39875 return true
39876 }
39877 break
39878 }
39879
39880
39881 for {
39882 x := v_0
39883 if x != v_1 {
39884 break
39885 }
39886 v.Reset(ssaop.OpConst32)
39887 v.AuxInt = ssa.Int32ToAuxInt(0)
39888 return true
39889 }
39890
39891
39892 for {
39893 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39894 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
39895 continue
39896 }
39897 x := v_1
39898 v.CopyOf(x)
39899 return true
39900 }
39901 break
39902 }
39903
39904
39905 for {
39906 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39907 if v_0.Op != ssaop.OpCom32 {
39908 continue
39909 }
39910 x := v_0.Args[0]
39911 if x != v_1 {
39912 continue
39913 }
39914 v.Reset(ssaop.OpConst32)
39915 v.AuxInt = ssa.Int32ToAuxInt(-1)
39916 return true
39917 }
39918 break
39919 }
39920
39921
39922 for {
39923 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39924 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
39925 continue
39926 }
39927 x := v_1
39928 v.Reset(ssaop.OpCom32)
39929 v.AddArg(x)
39930 return true
39931 }
39932 break
39933 }
39934
39935
39936 for {
39937 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39938 x := v_0
39939 if v_1.Op != ssaop.OpXor32 {
39940 continue
39941 }
39942 _ = v_1.Args[1]
39943 v_1_0 := v_1.Args[0]
39944 v_1_1 := v_1.Args[1]
39945 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39946 if x != v_1_0 {
39947 continue
39948 }
39949 y := v_1_1
39950 v.CopyOf(y)
39951 return true
39952 }
39953 }
39954 break
39955 }
39956
39957
39958
39959 for {
39960 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39961 if v_0.Op != ssaop.OpXor32 {
39962 continue
39963 }
39964 _ = v_0.Args[1]
39965 v_0_0 := v_0.Args[0]
39966 v_0_1 := v_0.Args[1]
39967 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
39968 i := v_0_0
39969 if i.Op != ssaop.OpConst32 {
39970 continue
39971 }
39972 t := i.Type
39973 z := v_0_1
39974 x := v_1
39975 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
39976 continue
39977 }
39978 v.Reset(ssaop.OpXor32)
39979 v0 := b.NewValue0(v.Pos, ssaop.OpXor32, t)
39980 v0.AddArg2(z, x)
39981 v.AddArg2(i, v0)
39982 return true
39983 }
39984 }
39985 break
39986 }
39987
39988
39989 for {
39990 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39991 if v_0.Op != ssaop.OpConst32 {
39992 continue
39993 }
39994 t := v_0.Type
39995 c := ssa.AuxIntToInt32(v_0.AuxInt)
39996 if v_1.Op != ssaop.OpXor32 {
39997 continue
39998 }
39999 _ = v_1.Args[1]
40000 v_1_0 := v_1.Args[0]
40001 v_1_1 := v_1.Args[1]
40002 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
40003 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
40004 continue
40005 }
40006 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
40007 x := v_1_1
40008 v.Reset(ssaop.OpXor32)
40009 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
40010 v0.AuxInt = ssa.Int32ToAuxInt(c ^ d)
40011 v.AddArg2(v0, x)
40012 return true
40013 }
40014 }
40015 break
40016 }
40017
40018
40019
40020 for {
40021 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40022 if v_0.Op != ssaop.OpLsh32x64 {
40023 continue
40024 }
40025 _ = v_0.Args[1]
40026 x := v_0.Args[0]
40027 z := v_0.Args[1]
40028 if z.Op != ssaop.OpConst64 {
40029 continue
40030 }
40031 c := ssa.AuxIntToInt64(z.AuxInt)
40032 if v_1.Op != ssaop.OpRsh32Ux64 {
40033 continue
40034 }
40035 _ = v_1.Args[1]
40036 if x != v_1.Args[0] {
40037 continue
40038 }
40039 v_1_1 := v_1.Args[1]
40040 if v_1_1.Op != ssaop.OpConst64 {
40041 continue
40042 }
40043 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
40044 if !(c < 32 && d == 32-c && canRotate(config, 32)) {
40045 continue
40046 }
40047 v.Reset(ssaop.OpRotateLeft32)
40048 v.AddArg2(x, z)
40049 return true
40050 }
40051 break
40052 }
40053
40054
40055
40056 for {
40057 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40058 left := v_0
40059 if left.Op != ssaop.OpLsh32x64 {
40060 continue
40061 }
40062 y := left.Args[1]
40063 x := left.Args[0]
40064 right := v_1
40065 if right.Op != ssaop.OpRsh32Ux64 {
40066 continue
40067 }
40068 _ = right.Args[1]
40069 if x != right.Args[0] {
40070 continue
40071 }
40072 right_1 := right.Args[1]
40073 if right_1.Op != ssaop.OpSub64 {
40074 continue
40075 }
40076 _ = right_1.Args[1]
40077 right_1_0 := right_1.Args[0]
40078 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)) {
40079 continue
40080 }
40081 v.Reset(ssaop.OpRotateLeft32)
40082 v.AddArg2(x, y)
40083 return true
40084 }
40085 break
40086 }
40087
40088
40089
40090 for {
40091 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40092 left := v_0
40093 if left.Op != ssaop.OpLsh32x32 {
40094 continue
40095 }
40096 y := left.Args[1]
40097 x := left.Args[0]
40098 right := v_1
40099 if right.Op != ssaop.OpRsh32Ux32 {
40100 continue
40101 }
40102 _ = right.Args[1]
40103 if x != right.Args[0] {
40104 continue
40105 }
40106 right_1 := right.Args[1]
40107 if right_1.Op != ssaop.OpSub32 {
40108 continue
40109 }
40110 _ = right_1.Args[1]
40111 right_1_0 := right_1.Args[0]
40112 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)) {
40113 continue
40114 }
40115 v.Reset(ssaop.OpRotateLeft32)
40116 v.AddArg2(x, y)
40117 return true
40118 }
40119 break
40120 }
40121
40122
40123
40124 for {
40125 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40126 left := v_0
40127 if left.Op != ssaop.OpLsh32x16 {
40128 continue
40129 }
40130 y := left.Args[1]
40131 x := left.Args[0]
40132 right := v_1
40133 if right.Op != ssaop.OpRsh32Ux16 {
40134 continue
40135 }
40136 _ = right.Args[1]
40137 if x != right.Args[0] {
40138 continue
40139 }
40140 right_1 := right.Args[1]
40141 if right_1.Op != ssaop.OpSub16 {
40142 continue
40143 }
40144 _ = right_1.Args[1]
40145 right_1_0 := right_1.Args[0]
40146 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)) {
40147 continue
40148 }
40149 v.Reset(ssaop.OpRotateLeft32)
40150 v.AddArg2(x, y)
40151 return true
40152 }
40153 break
40154 }
40155
40156
40157
40158 for {
40159 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40160 left := v_0
40161 if left.Op != ssaop.OpLsh32x8 {
40162 continue
40163 }
40164 y := left.Args[1]
40165 x := left.Args[0]
40166 right := v_1
40167 if right.Op != ssaop.OpRsh32Ux8 {
40168 continue
40169 }
40170 _ = right.Args[1]
40171 if x != right.Args[0] {
40172 continue
40173 }
40174 right_1 := right.Args[1]
40175 if right_1.Op != ssaop.OpSub8 {
40176 continue
40177 }
40178 _ = right_1.Args[1]
40179 right_1_0 := right_1.Args[0]
40180 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)) {
40181 continue
40182 }
40183 v.Reset(ssaop.OpRotateLeft32)
40184 v.AddArg2(x, y)
40185 return true
40186 }
40187 break
40188 }
40189
40190
40191
40192 for {
40193 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40194 right := v_0
40195 if right.Op != ssaop.OpRsh32Ux64 {
40196 continue
40197 }
40198 y := right.Args[1]
40199 x := right.Args[0]
40200 left := v_1
40201 if left.Op != ssaop.OpLsh32x64 {
40202 continue
40203 }
40204 _ = left.Args[1]
40205 if x != left.Args[0] {
40206 continue
40207 }
40208 z := left.Args[1]
40209 if z.Op != ssaop.OpSub64 {
40210 continue
40211 }
40212 _ = z.Args[1]
40213 z_0 := z.Args[0]
40214 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)) {
40215 continue
40216 }
40217 v.Reset(ssaop.OpRotateLeft32)
40218 v.AddArg2(x, z)
40219 return true
40220 }
40221 break
40222 }
40223
40224
40225
40226 for {
40227 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40228 right := v_0
40229 if right.Op != ssaop.OpRsh32Ux32 {
40230 continue
40231 }
40232 y := right.Args[1]
40233 x := right.Args[0]
40234 left := v_1
40235 if left.Op != ssaop.OpLsh32x32 {
40236 continue
40237 }
40238 _ = left.Args[1]
40239 if x != left.Args[0] {
40240 continue
40241 }
40242 z := left.Args[1]
40243 if z.Op != ssaop.OpSub32 {
40244 continue
40245 }
40246 _ = z.Args[1]
40247 z_0 := z.Args[0]
40248 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)) {
40249 continue
40250 }
40251 v.Reset(ssaop.OpRotateLeft32)
40252 v.AddArg2(x, z)
40253 return true
40254 }
40255 break
40256 }
40257
40258
40259
40260 for {
40261 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40262 right := v_0
40263 if right.Op != ssaop.OpRsh32Ux16 {
40264 continue
40265 }
40266 y := right.Args[1]
40267 x := right.Args[0]
40268 left := v_1
40269 if left.Op != ssaop.OpLsh32x16 {
40270 continue
40271 }
40272 _ = left.Args[1]
40273 if x != left.Args[0] {
40274 continue
40275 }
40276 z := left.Args[1]
40277 if z.Op != ssaop.OpSub16 {
40278 continue
40279 }
40280 _ = z.Args[1]
40281 z_0 := z.Args[0]
40282 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)) {
40283 continue
40284 }
40285 v.Reset(ssaop.OpRotateLeft32)
40286 v.AddArg2(x, z)
40287 return true
40288 }
40289 break
40290 }
40291
40292
40293
40294 for {
40295 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40296 right := v_0
40297 if right.Op != ssaop.OpRsh32Ux8 {
40298 continue
40299 }
40300 y := right.Args[1]
40301 x := right.Args[0]
40302 left := v_1
40303 if left.Op != ssaop.OpLsh32x8 {
40304 continue
40305 }
40306 _ = left.Args[1]
40307 if x != left.Args[0] {
40308 continue
40309 }
40310 z := left.Args[1]
40311 if z.Op != ssaop.OpSub8 {
40312 continue
40313 }
40314 _ = z.Args[1]
40315 z_0 := z.Args[0]
40316 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)) {
40317 continue
40318 }
40319 v.Reset(ssaop.OpRotateLeft32)
40320 v.AddArg2(x, z)
40321 return true
40322 }
40323 break
40324 }
40325
40326
40327
40328 for {
40329 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40330 if v_0.Op != ssaop.OpZeroExt8to32 {
40331 continue
40332 }
40333 v_0_0 := v_0.Args[0]
40334 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40335 continue
40336 }
40337 cvtT := v_0_0.Type
40338 bool := v_0_0.Args[0]
40339 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
40340 continue
40341 }
40342 v.Reset(ssaop.OpZeroExt8to32)
40343 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40344 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
40345 v1.AddArg(bool)
40346 v0.AddArg(v1)
40347 v.AddArg(v0)
40348 return true
40349 }
40350 break
40351 }
40352
40353
40354
40355 for {
40356 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40357 if v_0.Op != ssaop.OpZeroExt8to32 {
40358 continue
40359 }
40360 v_0_0 := v_0.Args[0]
40361 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40362 continue
40363 }
40364 cvtT := v_0_0.Type
40365 v_0_0_0 := v_0_0.Args[0]
40366 if v_0_0_0.Op != ssaop.OpNot {
40367 continue
40368 }
40369 bool := v_0_0_0.Args[0]
40370 if v_1.Op != ssaop.OpConst32 {
40371 continue
40372 }
40373 constT := v_1.Type
40374 c := ssa.AuxIntToInt32(v_1.AuxInt)
40375 if !(c != 1) {
40376 continue
40377 }
40378 v.Reset(ssaop.OpXor32)
40379 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
40380 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40381 v1.AddArg(bool)
40382 v0.AddArg(v1)
40383 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, constT)
40384 v2.AuxInt = ssa.Int32ToAuxInt(c ^ 1)
40385 v.AddArg2(v0, v2)
40386 return true
40387 }
40388 break
40389 }
40390 return false
40391 }
40392 func rewriteValue_OpXor64(v *ssa.Value) bool {
40393 v_1 := v.Args[1]
40394 v_0 := v.Args[0]
40395 b := v.Block
40396 config := b.Func.Config
40397 typ := &b.Func.Config.Types
40398
40399
40400 for {
40401 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40402 if v_0.Op != ssaop.OpConst64 {
40403 continue
40404 }
40405 c := ssa.AuxIntToInt64(v_0.AuxInt)
40406 if v_1.Op != ssaop.OpConst64 {
40407 continue
40408 }
40409 d := ssa.AuxIntToInt64(v_1.AuxInt)
40410 v.Reset(ssaop.OpConst64)
40411 v.AuxInt = ssa.Int64ToAuxInt(c ^ d)
40412 return true
40413 }
40414 break
40415 }
40416
40417
40418 for {
40419 x := v_0
40420 if x != v_1 {
40421 break
40422 }
40423 v.Reset(ssaop.OpConst64)
40424 v.AuxInt = ssa.Int64ToAuxInt(0)
40425 return true
40426 }
40427
40428
40429 for {
40430 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40431 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
40432 continue
40433 }
40434 x := v_1
40435 v.CopyOf(x)
40436 return true
40437 }
40438 break
40439 }
40440
40441
40442 for {
40443 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40444 if v_0.Op != ssaop.OpCom64 {
40445 continue
40446 }
40447 x := v_0.Args[0]
40448 if x != v_1 {
40449 continue
40450 }
40451 v.Reset(ssaop.OpConst64)
40452 v.AuxInt = ssa.Int64ToAuxInt(-1)
40453 return true
40454 }
40455 break
40456 }
40457
40458
40459 for {
40460 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40461 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
40462 continue
40463 }
40464 x := v_1
40465 v.Reset(ssaop.OpCom64)
40466 v.AddArg(x)
40467 return true
40468 }
40469 break
40470 }
40471
40472
40473 for {
40474 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40475 x := v_0
40476 if v_1.Op != ssaop.OpXor64 {
40477 continue
40478 }
40479 _ = v_1.Args[1]
40480 v_1_0 := v_1.Args[0]
40481 v_1_1 := v_1.Args[1]
40482 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
40483 if x != v_1_0 {
40484 continue
40485 }
40486 y := v_1_1
40487 v.CopyOf(y)
40488 return true
40489 }
40490 }
40491 break
40492 }
40493
40494
40495
40496 for {
40497 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40498 if v_0.Op != ssaop.OpXor64 {
40499 continue
40500 }
40501 _ = v_0.Args[1]
40502 v_0_0 := v_0.Args[0]
40503 v_0_1 := v_0.Args[1]
40504 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
40505 i := v_0_0
40506 if i.Op != ssaop.OpConst64 {
40507 continue
40508 }
40509 t := i.Type
40510 z := v_0_1
40511 x := v_1
40512 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
40513 continue
40514 }
40515 v.Reset(ssaop.OpXor64)
40516 v0 := b.NewValue0(v.Pos, ssaop.OpXor64, t)
40517 v0.AddArg2(z, x)
40518 v.AddArg2(i, v0)
40519 return true
40520 }
40521 }
40522 break
40523 }
40524
40525
40526 for {
40527 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40528 if v_0.Op != ssaop.OpConst64 {
40529 continue
40530 }
40531 t := v_0.Type
40532 c := ssa.AuxIntToInt64(v_0.AuxInt)
40533 if v_1.Op != ssaop.OpXor64 {
40534 continue
40535 }
40536 _ = v_1.Args[1]
40537 v_1_0 := v_1.Args[0]
40538 v_1_1 := v_1.Args[1]
40539 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
40540 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
40541 continue
40542 }
40543 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
40544 x := v_1_1
40545 v.Reset(ssaop.OpXor64)
40546 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
40547 v0.AuxInt = ssa.Int64ToAuxInt(c ^ d)
40548 v.AddArg2(v0, x)
40549 return true
40550 }
40551 }
40552 break
40553 }
40554
40555
40556
40557 for {
40558 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40559 if v_0.Op != ssaop.OpLsh64x64 {
40560 continue
40561 }
40562 _ = v_0.Args[1]
40563 x := v_0.Args[0]
40564 z := v_0.Args[1]
40565 if z.Op != ssaop.OpConst64 {
40566 continue
40567 }
40568 c := ssa.AuxIntToInt64(z.AuxInt)
40569 if v_1.Op != ssaop.OpRsh64Ux64 {
40570 continue
40571 }
40572 _ = v_1.Args[1]
40573 if x != v_1.Args[0] {
40574 continue
40575 }
40576 v_1_1 := v_1.Args[1]
40577 if v_1_1.Op != ssaop.OpConst64 {
40578 continue
40579 }
40580 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
40581 if !(c < 64 && d == 64-c && canRotate(config, 64)) {
40582 continue
40583 }
40584 v.Reset(ssaop.OpRotateLeft64)
40585 v.AddArg2(x, z)
40586 return true
40587 }
40588 break
40589 }
40590
40591
40592
40593 for {
40594 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40595 left := v_0
40596 if left.Op != ssaop.OpLsh64x64 {
40597 continue
40598 }
40599 y := left.Args[1]
40600 x := left.Args[0]
40601 right := v_1
40602 if right.Op != ssaop.OpRsh64Ux64 {
40603 continue
40604 }
40605 _ = right.Args[1]
40606 if x != right.Args[0] {
40607 continue
40608 }
40609 right_1 := right.Args[1]
40610 if right_1.Op != ssaop.OpSub64 {
40611 continue
40612 }
40613 _ = right_1.Args[1]
40614 right_1_0 := right_1.Args[0]
40615 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)) {
40616 continue
40617 }
40618 v.Reset(ssaop.OpRotateLeft64)
40619 v.AddArg2(x, y)
40620 return true
40621 }
40622 break
40623 }
40624
40625
40626
40627 for {
40628 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40629 left := v_0
40630 if left.Op != ssaop.OpLsh64x32 {
40631 continue
40632 }
40633 y := left.Args[1]
40634 x := left.Args[0]
40635 right := v_1
40636 if right.Op != ssaop.OpRsh64Ux32 {
40637 continue
40638 }
40639 _ = right.Args[1]
40640 if x != right.Args[0] {
40641 continue
40642 }
40643 right_1 := right.Args[1]
40644 if right_1.Op != ssaop.OpSub32 {
40645 continue
40646 }
40647 _ = right_1.Args[1]
40648 right_1_0 := right_1.Args[0]
40649 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)) {
40650 continue
40651 }
40652 v.Reset(ssaop.OpRotateLeft64)
40653 v.AddArg2(x, y)
40654 return true
40655 }
40656 break
40657 }
40658
40659
40660
40661 for {
40662 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40663 left := v_0
40664 if left.Op != ssaop.OpLsh64x16 {
40665 continue
40666 }
40667 y := left.Args[1]
40668 x := left.Args[0]
40669 right := v_1
40670 if right.Op != ssaop.OpRsh64Ux16 {
40671 continue
40672 }
40673 _ = right.Args[1]
40674 if x != right.Args[0] {
40675 continue
40676 }
40677 right_1 := right.Args[1]
40678 if right_1.Op != ssaop.OpSub16 {
40679 continue
40680 }
40681 _ = right_1.Args[1]
40682 right_1_0 := right_1.Args[0]
40683 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)) {
40684 continue
40685 }
40686 v.Reset(ssaop.OpRotateLeft64)
40687 v.AddArg2(x, y)
40688 return true
40689 }
40690 break
40691 }
40692
40693
40694
40695 for {
40696 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40697 left := v_0
40698 if left.Op != ssaop.OpLsh64x8 {
40699 continue
40700 }
40701 y := left.Args[1]
40702 x := left.Args[0]
40703 right := v_1
40704 if right.Op != ssaop.OpRsh64Ux8 {
40705 continue
40706 }
40707 _ = right.Args[1]
40708 if x != right.Args[0] {
40709 continue
40710 }
40711 right_1 := right.Args[1]
40712 if right_1.Op != ssaop.OpSub8 {
40713 continue
40714 }
40715 _ = right_1.Args[1]
40716 right_1_0 := right_1.Args[0]
40717 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)) {
40718 continue
40719 }
40720 v.Reset(ssaop.OpRotateLeft64)
40721 v.AddArg2(x, y)
40722 return true
40723 }
40724 break
40725 }
40726
40727
40728
40729 for {
40730 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40731 right := v_0
40732 if right.Op != ssaop.OpRsh64Ux64 {
40733 continue
40734 }
40735 y := right.Args[1]
40736 x := right.Args[0]
40737 left := v_1
40738 if left.Op != ssaop.OpLsh64x64 {
40739 continue
40740 }
40741 _ = left.Args[1]
40742 if x != left.Args[0] {
40743 continue
40744 }
40745 z := left.Args[1]
40746 if z.Op != ssaop.OpSub64 {
40747 continue
40748 }
40749 _ = z.Args[1]
40750 z_0 := z.Args[0]
40751 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)) {
40752 continue
40753 }
40754 v.Reset(ssaop.OpRotateLeft64)
40755 v.AddArg2(x, z)
40756 return true
40757 }
40758 break
40759 }
40760
40761
40762
40763 for {
40764 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40765 right := v_0
40766 if right.Op != ssaop.OpRsh64Ux32 {
40767 continue
40768 }
40769 y := right.Args[1]
40770 x := right.Args[0]
40771 left := v_1
40772 if left.Op != ssaop.OpLsh64x32 {
40773 continue
40774 }
40775 _ = left.Args[1]
40776 if x != left.Args[0] {
40777 continue
40778 }
40779 z := left.Args[1]
40780 if z.Op != ssaop.OpSub32 {
40781 continue
40782 }
40783 _ = z.Args[1]
40784 z_0 := z.Args[0]
40785 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)) {
40786 continue
40787 }
40788 v.Reset(ssaop.OpRotateLeft64)
40789 v.AddArg2(x, z)
40790 return true
40791 }
40792 break
40793 }
40794
40795
40796
40797 for {
40798 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40799 right := v_0
40800 if right.Op != ssaop.OpRsh64Ux16 {
40801 continue
40802 }
40803 y := right.Args[1]
40804 x := right.Args[0]
40805 left := v_1
40806 if left.Op != ssaop.OpLsh64x16 {
40807 continue
40808 }
40809 _ = left.Args[1]
40810 if x != left.Args[0] {
40811 continue
40812 }
40813 z := left.Args[1]
40814 if z.Op != ssaop.OpSub16 {
40815 continue
40816 }
40817 _ = z.Args[1]
40818 z_0 := z.Args[0]
40819 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)) {
40820 continue
40821 }
40822 v.Reset(ssaop.OpRotateLeft64)
40823 v.AddArg2(x, z)
40824 return true
40825 }
40826 break
40827 }
40828
40829
40830
40831 for {
40832 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40833 right := v_0
40834 if right.Op != ssaop.OpRsh64Ux8 {
40835 continue
40836 }
40837 y := right.Args[1]
40838 x := right.Args[0]
40839 left := v_1
40840 if left.Op != ssaop.OpLsh64x8 {
40841 continue
40842 }
40843 _ = left.Args[1]
40844 if x != left.Args[0] {
40845 continue
40846 }
40847 z := left.Args[1]
40848 if z.Op != ssaop.OpSub8 {
40849 continue
40850 }
40851 _ = z.Args[1]
40852 z_0 := z.Args[0]
40853 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)) {
40854 continue
40855 }
40856 v.Reset(ssaop.OpRotateLeft64)
40857 v.AddArg2(x, z)
40858 return true
40859 }
40860 break
40861 }
40862
40863
40864
40865 for {
40866 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40867 if v_0.Op != ssaop.OpZeroExt8to64 {
40868 continue
40869 }
40870 v_0_0 := v_0.Args[0]
40871 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40872 continue
40873 }
40874 cvtT := v_0_0.Type
40875 bool := v_0_0.Args[0]
40876 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
40877 continue
40878 }
40879 v.Reset(ssaop.OpZeroExt8to64)
40880 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40881 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
40882 v1.AddArg(bool)
40883 v0.AddArg(v1)
40884 v.AddArg(v0)
40885 return true
40886 }
40887 break
40888 }
40889
40890
40891
40892 for {
40893 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40894 if v_0.Op != ssaop.OpZeroExt8to64 {
40895 continue
40896 }
40897 v_0_0 := v_0.Args[0]
40898 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40899 continue
40900 }
40901 cvtT := v_0_0.Type
40902 v_0_0_0 := v_0_0.Args[0]
40903 if v_0_0_0.Op != ssaop.OpNot {
40904 continue
40905 }
40906 bool := v_0_0_0.Args[0]
40907 if v_1.Op != ssaop.OpConst64 {
40908 continue
40909 }
40910 constT := v_1.Type
40911 c := ssa.AuxIntToInt64(v_1.AuxInt)
40912 if !(c != 1) {
40913 continue
40914 }
40915 v.Reset(ssaop.OpXor64)
40916 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.UInt64)
40917 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40918 v1.AddArg(bool)
40919 v0.AddArg(v1)
40920 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, constT)
40921 v2.AuxInt = ssa.Int64ToAuxInt(c ^ 1)
40922 v.AddArg2(v0, v2)
40923 return true
40924 }
40925 break
40926 }
40927 return false
40928 }
40929 func rewriteValue_OpXor8(v *ssa.Value) bool {
40930 v_1 := v.Args[1]
40931 v_0 := v.Args[0]
40932 b := v.Block
40933 config := b.Func.Config
40934
40935
40936 for {
40937 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40938 if v_0.Op != ssaop.OpConst8 {
40939 continue
40940 }
40941 c := ssa.AuxIntToInt8(v_0.AuxInt)
40942 if v_1.Op != ssaop.OpConst8 {
40943 continue
40944 }
40945 d := ssa.AuxIntToInt8(v_1.AuxInt)
40946 v.Reset(ssaop.OpConst8)
40947 v.AuxInt = ssa.Int8ToAuxInt(c ^ d)
40948 return true
40949 }
40950 break
40951 }
40952
40953
40954 for {
40955 x := v_0
40956 if x != v_1 {
40957 break
40958 }
40959 v.Reset(ssaop.OpConst8)
40960 v.AuxInt = ssa.Int8ToAuxInt(0)
40961 return true
40962 }
40963
40964
40965 for {
40966 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40967 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
40968 continue
40969 }
40970 x := v_1
40971 v.CopyOf(x)
40972 return true
40973 }
40974 break
40975 }
40976
40977
40978 for {
40979 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40980 if v_0.Op != ssaop.OpCom8 {
40981 continue
40982 }
40983 x := v_0.Args[0]
40984 if x != v_1 {
40985 continue
40986 }
40987 v.Reset(ssaop.OpConst8)
40988 v.AuxInt = ssa.Int8ToAuxInt(-1)
40989 return true
40990 }
40991 break
40992 }
40993
40994
40995 for {
40996 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40997 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
40998 continue
40999 }
41000 x := v_1
41001 v.Reset(ssaop.OpCom8)
41002 v.AddArg(x)
41003 return true
41004 }
41005 break
41006 }
41007
41008
41009 for {
41010 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41011 x := v_0
41012 if v_1.Op != ssaop.OpXor8 {
41013 continue
41014 }
41015 _ = v_1.Args[1]
41016 v_1_0 := v_1.Args[0]
41017 v_1_1 := v_1.Args[1]
41018 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
41019 if x != v_1_0 {
41020 continue
41021 }
41022 y := v_1_1
41023 v.CopyOf(y)
41024 return true
41025 }
41026 }
41027 break
41028 }
41029
41030
41031
41032 for {
41033 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41034 if v_0.Op != ssaop.OpXor8 {
41035 continue
41036 }
41037 _ = v_0.Args[1]
41038 v_0_0 := v_0.Args[0]
41039 v_0_1 := v_0.Args[1]
41040 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
41041 i := v_0_0
41042 if i.Op != ssaop.OpConst8 {
41043 continue
41044 }
41045 t := i.Type
41046 z := v_0_1
41047 x := v_1
41048 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
41049 continue
41050 }
41051 v.Reset(ssaop.OpXor8)
41052 v0 := b.NewValue0(v.Pos, ssaop.OpXor8, t)
41053 v0.AddArg2(z, x)
41054 v.AddArg2(i, v0)
41055 return true
41056 }
41057 }
41058 break
41059 }
41060
41061
41062 for {
41063 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41064 if v_0.Op != ssaop.OpConst8 {
41065 continue
41066 }
41067 t := v_0.Type
41068 c := ssa.AuxIntToInt8(v_0.AuxInt)
41069 if v_1.Op != ssaop.OpXor8 {
41070 continue
41071 }
41072 _ = v_1.Args[1]
41073 v_1_0 := v_1.Args[0]
41074 v_1_1 := v_1.Args[1]
41075 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
41076 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
41077 continue
41078 }
41079 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
41080 x := v_1_1
41081 v.Reset(ssaop.OpXor8)
41082 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
41083 v0.AuxInt = ssa.Int8ToAuxInt(c ^ d)
41084 v.AddArg2(v0, x)
41085 return true
41086 }
41087 }
41088 break
41089 }
41090
41091
41092
41093 for {
41094 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41095 if v_0.Op != ssaop.OpLsh8x64 {
41096 continue
41097 }
41098 _ = v_0.Args[1]
41099 x := v_0.Args[0]
41100 z := v_0.Args[1]
41101 if z.Op != ssaop.OpConst64 {
41102 continue
41103 }
41104 c := ssa.AuxIntToInt64(z.AuxInt)
41105 if v_1.Op != ssaop.OpRsh8Ux64 {
41106 continue
41107 }
41108 _ = v_1.Args[1]
41109 if x != v_1.Args[0] {
41110 continue
41111 }
41112 v_1_1 := v_1.Args[1]
41113 if v_1_1.Op != ssaop.OpConst64 {
41114 continue
41115 }
41116 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
41117 if !(c < 8 && d == 8-c && canRotate(config, 8)) {
41118 continue
41119 }
41120 v.Reset(ssaop.OpRotateLeft8)
41121 v.AddArg2(x, z)
41122 return true
41123 }
41124 break
41125 }
41126
41127
41128
41129 for {
41130 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41131 left := v_0
41132 if left.Op != ssaop.OpLsh8x64 {
41133 continue
41134 }
41135 y := left.Args[1]
41136 x := left.Args[0]
41137 right := v_1
41138 if right.Op != ssaop.OpRsh8Ux64 {
41139 continue
41140 }
41141 _ = right.Args[1]
41142 if x != right.Args[0] {
41143 continue
41144 }
41145 right_1 := right.Args[1]
41146 if right_1.Op != ssaop.OpSub64 {
41147 continue
41148 }
41149 _ = right_1.Args[1]
41150 right_1_0 := right_1.Args[0]
41151 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)) {
41152 continue
41153 }
41154 v.Reset(ssaop.OpRotateLeft8)
41155 v.AddArg2(x, y)
41156 return true
41157 }
41158 break
41159 }
41160
41161
41162
41163 for {
41164 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41165 left := v_0
41166 if left.Op != ssaop.OpLsh8x32 {
41167 continue
41168 }
41169 y := left.Args[1]
41170 x := left.Args[0]
41171 right := v_1
41172 if right.Op != ssaop.OpRsh8Ux32 {
41173 continue
41174 }
41175 _ = right.Args[1]
41176 if x != right.Args[0] {
41177 continue
41178 }
41179 right_1 := right.Args[1]
41180 if right_1.Op != ssaop.OpSub32 {
41181 continue
41182 }
41183 _ = right_1.Args[1]
41184 right_1_0 := right_1.Args[0]
41185 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)) {
41186 continue
41187 }
41188 v.Reset(ssaop.OpRotateLeft8)
41189 v.AddArg2(x, y)
41190 return true
41191 }
41192 break
41193 }
41194
41195
41196
41197 for {
41198 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41199 left := v_0
41200 if left.Op != ssaop.OpLsh8x16 {
41201 continue
41202 }
41203 y := left.Args[1]
41204 x := left.Args[0]
41205 right := v_1
41206 if right.Op != ssaop.OpRsh8Ux16 {
41207 continue
41208 }
41209 _ = right.Args[1]
41210 if x != right.Args[0] {
41211 continue
41212 }
41213 right_1 := right.Args[1]
41214 if right_1.Op != ssaop.OpSub16 {
41215 continue
41216 }
41217 _ = right_1.Args[1]
41218 right_1_0 := right_1.Args[0]
41219 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)) {
41220 continue
41221 }
41222 v.Reset(ssaop.OpRotateLeft8)
41223 v.AddArg2(x, y)
41224 return true
41225 }
41226 break
41227 }
41228
41229
41230
41231 for {
41232 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41233 left := v_0
41234 if left.Op != ssaop.OpLsh8x8 {
41235 continue
41236 }
41237 y := left.Args[1]
41238 x := left.Args[0]
41239 right := v_1
41240 if right.Op != ssaop.OpRsh8Ux8 {
41241 continue
41242 }
41243 _ = right.Args[1]
41244 if x != right.Args[0] {
41245 continue
41246 }
41247 right_1 := right.Args[1]
41248 if right_1.Op != ssaop.OpSub8 {
41249 continue
41250 }
41251 _ = right_1.Args[1]
41252 right_1_0 := right_1.Args[0]
41253 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)) {
41254 continue
41255 }
41256 v.Reset(ssaop.OpRotateLeft8)
41257 v.AddArg2(x, y)
41258 return true
41259 }
41260 break
41261 }
41262
41263
41264
41265 for {
41266 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41267 right := v_0
41268 if right.Op != ssaop.OpRsh8Ux64 {
41269 continue
41270 }
41271 y := right.Args[1]
41272 x := right.Args[0]
41273 left := v_1
41274 if left.Op != ssaop.OpLsh8x64 {
41275 continue
41276 }
41277 _ = left.Args[1]
41278 if x != left.Args[0] {
41279 continue
41280 }
41281 z := left.Args[1]
41282 if z.Op != ssaop.OpSub64 {
41283 continue
41284 }
41285 _ = z.Args[1]
41286 z_0 := z.Args[0]
41287 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)) {
41288 continue
41289 }
41290 v.Reset(ssaop.OpRotateLeft8)
41291 v.AddArg2(x, z)
41292 return true
41293 }
41294 break
41295 }
41296
41297
41298
41299 for {
41300 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41301 right := v_0
41302 if right.Op != ssaop.OpRsh8Ux32 {
41303 continue
41304 }
41305 y := right.Args[1]
41306 x := right.Args[0]
41307 left := v_1
41308 if left.Op != ssaop.OpLsh8x32 {
41309 continue
41310 }
41311 _ = left.Args[1]
41312 if x != left.Args[0] {
41313 continue
41314 }
41315 z := left.Args[1]
41316 if z.Op != ssaop.OpSub32 {
41317 continue
41318 }
41319 _ = z.Args[1]
41320 z_0 := z.Args[0]
41321 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)) {
41322 continue
41323 }
41324 v.Reset(ssaop.OpRotateLeft8)
41325 v.AddArg2(x, z)
41326 return true
41327 }
41328 break
41329 }
41330
41331
41332
41333 for {
41334 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41335 right := v_0
41336 if right.Op != ssaop.OpRsh8Ux16 {
41337 continue
41338 }
41339 y := right.Args[1]
41340 x := right.Args[0]
41341 left := v_1
41342 if left.Op != ssaop.OpLsh8x16 {
41343 continue
41344 }
41345 _ = left.Args[1]
41346 if x != left.Args[0] {
41347 continue
41348 }
41349 z := left.Args[1]
41350 if z.Op != ssaop.OpSub16 {
41351 continue
41352 }
41353 _ = z.Args[1]
41354 z_0 := z.Args[0]
41355 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)) {
41356 continue
41357 }
41358 v.Reset(ssaop.OpRotateLeft8)
41359 v.AddArg2(x, z)
41360 return true
41361 }
41362 break
41363 }
41364
41365
41366
41367 for {
41368 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41369 right := v_0
41370 if right.Op != ssaop.OpRsh8Ux8 {
41371 continue
41372 }
41373 y := right.Args[1]
41374 x := right.Args[0]
41375 left := v_1
41376 if left.Op != ssaop.OpLsh8x8 {
41377 continue
41378 }
41379 _ = left.Args[1]
41380 if x != left.Args[0] {
41381 continue
41382 }
41383 z := left.Args[1]
41384 if z.Op != ssaop.OpSub8 {
41385 continue
41386 }
41387 _ = z.Args[1]
41388 z_0 := z.Args[0]
41389 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)) {
41390 continue
41391 }
41392 v.Reset(ssaop.OpRotateLeft8)
41393 v.AddArg2(x, z)
41394 return true
41395 }
41396 break
41397 }
41398
41399
41400
41401 for {
41402 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41403 if v_0.Op != ssaop.OpCvtBoolToUint8 {
41404 continue
41405 }
41406 bool := v_0.Args[0]
41407 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
41408 continue
41409 }
41410 v.Reset(ssaop.OpCvtBoolToUint8)
41411 v0 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
41412 v0.AddArg(bool)
41413 v.AddArg(v0)
41414 return true
41415 }
41416 break
41417 }
41418
41419
41420
41421 for {
41422 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
41423 if v_0.Op != ssaop.OpCvtBoolToUint8 {
41424 continue
41425 }
41426 cvtT := v_0.Type
41427 v_0_0 := v_0.Args[0]
41428 if v_0_0.Op != ssaop.OpNot {
41429 continue
41430 }
41431 bool := v_0_0.Args[0]
41432 if v_1.Op != ssaop.OpConst8 {
41433 continue
41434 }
41435 constT := v_1.Type
41436 c := ssa.AuxIntToInt8(v_1.AuxInt)
41437 if !(c != 1) {
41438 continue
41439 }
41440 v.Reset(ssaop.OpXor8)
41441 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
41442 v0.AddArg(bool)
41443 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, constT)
41444 v1.AuxInt = ssa.Int8ToAuxInt(c ^ 1)
41445 v.AddArg2(v0, v1)
41446 return true
41447 }
41448 break
41449 }
41450 return false
41451 }
41452 func rewriteValue_OpZero(v *ssa.Value) bool {
41453 v_1 := v.Args[1]
41454 v_0 := v.Args[0]
41455 b := v.Block
41456
41457
41458
41459 for {
41460 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
41461 break
41462 }
41463 call := v_0.Args[0]
41464 if call.Op != ssaop.OpStaticLECall {
41465 break
41466 }
41467 mem := v_1
41468 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(isMalloc(call.Aux)) {
41469 break
41470 }
41471 v.CopyOf(mem)
41472 return true
41473 }
41474
41475
41476
41477 for {
41478 n := ssa.AuxIntToInt64(v.AuxInt)
41479 t1 := ssa.AuxToType(v.Aux)
41480 p1 := v_0
41481 store := v_1
41482 if store.Op != ssaop.OpStore {
41483 break
41484 }
41485 t2 := ssa.AuxToType(store.Aux)
41486 mem := store.Args[2]
41487 store_0 := store.Args[0]
41488 if store_0.Op != ssaop.OpOffPtr {
41489 break
41490 }
41491 o2 := ssa.AuxIntToInt64(store_0.AuxInt)
41492 p2 := store_0.Args[0]
41493 if !(ssa.IsSamePtr(p1, p2) && store.Uses == 1 && n >= o2+t2.Size() && ssa.Clobber(store)) {
41494 break
41495 }
41496 v.Reset(ssaop.OpZero)
41497 v.AuxInt = ssa.Int64ToAuxInt(n)
41498 v.Aux = ssa.TypeToAux(t1)
41499 v.AddArg2(p1, mem)
41500 return true
41501 }
41502
41503
41504
41505 for {
41506 n := ssa.AuxIntToInt64(v.AuxInt)
41507 t := ssa.AuxToType(v.Aux)
41508 dst1 := v_0
41509 move := v_1
41510 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
41511 break
41512 }
41513 mem := move.Args[2]
41514 dst2 := move.Args[0]
41515 if !(move.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Clobber(move)) {
41516 break
41517 }
41518 v.Reset(ssaop.OpZero)
41519 v.AuxInt = ssa.Int64ToAuxInt(n)
41520 v.Aux = ssa.TypeToAux(t)
41521 v.AddArg2(dst1, mem)
41522 return true
41523 }
41524
41525
41526
41527 for {
41528 n := ssa.AuxIntToInt64(v.AuxInt)
41529 t := ssa.AuxToType(v.Aux)
41530 dst1 := v_0
41531 vardef := v_1
41532 if vardef.Op != ssaop.OpVarDef {
41533 break
41534 }
41535 x := ssa.AuxToSym(vardef.Aux)
41536 move := vardef.Args[0]
41537 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
41538 break
41539 }
41540 mem := move.Args[2]
41541 dst2 := move.Args[0]
41542 if !(move.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Clobber(move, vardef)) {
41543 break
41544 }
41545 v.Reset(ssaop.OpZero)
41546 v.AuxInt = ssa.Int64ToAuxInt(n)
41547 v.Aux = ssa.TypeToAux(t)
41548 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
41549 v0.Aux = ssa.SymToAux(x)
41550 v0.AddArg(mem)
41551 v.AddArg2(dst1, v0)
41552 return true
41553 }
41554
41555
41556
41557 for {
41558 s := ssa.AuxIntToInt64(v.AuxInt)
41559 t := ssa.AuxToType(v.Aux)
41560 dst1 := v_0
41561 zero := v_1
41562 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != s || ssa.AuxToType(zero.Aux) != t {
41563 break
41564 }
41565 dst2 := zero.Args[0]
41566 if !(ssa.IsSamePtr(dst1, dst2)) {
41567 break
41568 }
41569 v.CopyOf(zero)
41570 return true
41571 }
41572
41573
41574
41575 for {
41576 s := ssa.AuxIntToInt64(v.AuxInt)
41577 t := ssa.AuxToType(v.Aux)
41578 dst1 := v_0
41579 vardef := v_1
41580 if vardef.Op != ssaop.OpVarDef {
41581 break
41582 }
41583 vardef_0 := vardef.Args[0]
41584 if vardef_0.Op != ssaop.OpZero || ssa.AuxIntToInt64(vardef_0.AuxInt) != s || ssa.AuxToType(vardef_0.Aux) != t {
41585 break
41586 }
41587 dst2 := vardef_0.Args[0]
41588 if !(ssa.IsSamePtr(dst1, dst2)) {
41589 break
41590 }
41591 v.CopyOf(vardef)
41592 return true
41593 }
41594 return false
41595 }
41596 func rewriteValue_OpZeroExt16to32(v *ssa.Value) bool {
41597 v_0 := v.Args[0]
41598
41599
41600 for {
41601 if v_0.Op != ssaop.OpConst16 {
41602 break
41603 }
41604 c := ssa.AuxIntToInt16(v_0.AuxInt)
41605 v.Reset(ssaop.OpConst32)
41606 v.AuxInt = ssa.Int32ToAuxInt(int32(uint16(c)))
41607 return true
41608 }
41609
41610
41611
41612 for {
41613 if v_0.Op != ssaop.OpTrunc32to16 {
41614 break
41615 }
41616 x := v_0.Args[0]
41617 if x.Op != ssaop.OpRsh32Ux64 {
41618 break
41619 }
41620 _ = x.Args[1]
41621 x_1 := x.Args[1]
41622 if x_1.Op != ssaop.OpConst64 {
41623 break
41624 }
41625 s := ssa.AuxIntToInt64(x_1.AuxInt)
41626 if !(s >= 16) {
41627 break
41628 }
41629 v.CopyOf(x)
41630 return true
41631 }
41632 return false
41633 }
41634 func rewriteValue_OpZeroExt16to64(v *ssa.Value) bool {
41635 v_0 := v.Args[0]
41636
41637
41638 for {
41639 if v_0.Op != ssaop.OpConst16 {
41640 break
41641 }
41642 c := ssa.AuxIntToInt16(v_0.AuxInt)
41643 v.Reset(ssaop.OpConst64)
41644 v.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
41645 return true
41646 }
41647
41648
41649
41650 for {
41651 if v_0.Op != ssaop.OpTrunc64to16 {
41652 break
41653 }
41654 x := v_0.Args[0]
41655 if x.Op != ssaop.OpRsh64Ux64 {
41656 break
41657 }
41658 _ = x.Args[1]
41659 x_1 := x.Args[1]
41660 if x_1.Op != ssaop.OpConst64 {
41661 break
41662 }
41663 s := ssa.AuxIntToInt64(x_1.AuxInt)
41664 if !(s >= 48) {
41665 break
41666 }
41667 v.CopyOf(x)
41668 return true
41669 }
41670 return false
41671 }
41672 func rewriteValue_OpZeroExt32to64(v *ssa.Value) bool {
41673 v_0 := v.Args[0]
41674
41675
41676 for {
41677 if v_0.Op != ssaop.OpConst32 {
41678 break
41679 }
41680 c := ssa.AuxIntToInt32(v_0.AuxInt)
41681 v.Reset(ssaop.OpConst64)
41682 v.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
41683 return true
41684 }
41685
41686
41687
41688 for {
41689 if v_0.Op != ssaop.OpTrunc64to32 {
41690 break
41691 }
41692 x := v_0.Args[0]
41693 if x.Op != ssaop.OpRsh64Ux64 {
41694 break
41695 }
41696 _ = x.Args[1]
41697 x_1 := x.Args[1]
41698 if x_1.Op != ssaop.OpConst64 {
41699 break
41700 }
41701 s := ssa.AuxIntToInt64(x_1.AuxInt)
41702 if !(s >= 32) {
41703 break
41704 }
41705 v.CopyOf(x)
41706 return true
41707 }
41708 return false
41709 }
41710 func rewriteValue_OpZeroExt8to16(v *ssa.Value) bool {
41711 v_0 := v.Args[0]
41712
41713
41714 for {
41715 if v_0.Op != ssaop.OpConst8 {
41716 break
41717 }
41718 c := ssa.AuxIntToInt8(v_0.AuxInt)
41719 v.Reset(ssaop.OpConst16)
41720 v.AuxInt = ssa.Int16ToAuxInt(int16(uint8(c)))
41721 return true
41722 }
41723
41724
41725
41726 for {
41727 if v_0.Op != ssaop.OpTrunc16to8 {
41728 break
41729 }
41730 x := v_0.Args[0]
41731 if x.Op != ssaop.OpRsh16Ux64 {
41732 break
41733 }
41734 _ = x.Args[1]
41735 x_1 := x.Args[1]
41736 if x_1.Op != ssaop.OpConst64 {
41737 break
41738 }
41739 s := ssa.AuxIntToInt64(x_1.AuxInt)
41740 if !(s >= 8) {
41741 break
41742 }
41743 v.CopyOf(x)
41744 return true
41745 }
41746 return false
41747 }
41748 func rewriteValue_OpZeroExt8to32(v *ssa.Value) bool {
41749 v_0 := v.Args[0]
41750
41751
41752 for {
41753 if v_0.Op != ssaop.OpConst8 {
41754 break
41755 }
41756 c := ssa.AuxIntToInt8(v_0.AuxInt)
41757 v.Reset(ssaop.OpConst32)
41758 v.AuxInt = ssa.Int32ToAuxInt(int32(uint8(c)))
41759 return true
41760 }
41761
41762
41763
41764 for {
41765 if v_0.Op != ssaop.OpTrunc32to8 {
41766 break
41767 }
41768 x := v_0.Args[0]
41769 if x.Op != ssaop.OpRsh32Ux64 {
41770 break
41771 }
41772 _ = x.Args[1]
41773 x_1 := x.Args[1]
41774 if x_1.Op != ssaop.OpConst64 {
41775 break
41776 }
41777 s := ssa.AuxIntToInt64(x_1.AuxInt)
41778 if !(s >= 24) {
41779 break
41780 }
41781 v.CopyOf(x)
41782 return true
41783 }
41784 return false
41785 }
41786 func rewriteValue_OpZeroExt8to64(v *ssa.Value) bool {
41787 v_0 := v.Args[0]
41788
41789
41790 for {
41791 if v_0.Op != ssaop.OpConst8 {
41792 break
41793 }
41794 c := ssa.AuxIntToInt8(v_0.AuxInt)
41795 v.Reset(ssaop.OpConst64)
41796 v.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
41797 return true
41798 }
41799
41800
41801
41802 for {
41803 if v_0.Op != ssaop.OpTrunc64to8 {
41804 break
41805 }
41806 x := v_0.Args[0]
41807 if x.Op != ssaop.OpRsh64Ux64 {
41808 break
41809 }
41810 _ = x.Args[1]
41811 x_1 := x.Args[1]
41812 if x_1.Op != ssaop.OpConst64 {
41813 break
41814 }
41815 s := ssa.AuxIntToInt64(x_1.AuxInt)
41816 if !(s >= 56) {
41817 break
41818 }
41819 v.CopyOf(x)
41820 return true
41821 }
41822 return false
41823 }
41824 func RewriteBlock(b *ssa.Block) bool {
41825 switch b.Kind {
41826 case block.BlockIf:
41827
41828
41829 for b.Controls[0].Op == ssaop.OpNot {
41830 v_0 := b.Controls[0]
41831 cond := v_0.Args[0]
41832 b.ResetWithControl(block.BlockIf, cond)
41833 b.SwapSuccessors()
41834 return true
41835 }
41836
41837
41838
41839 for b.Controls[0].Op == ssaop.OpConstBool {
41840 v_0 := b.Controls[0]
41841 c := ssa.AuxIntToBool(v_0.AuxInt)
41842 if !(c) {
41843 break
41844 }
41845 b.Reset(block.BlockFirst)
41846 return true
41847 }
41848
41849
41850
41851 for b.Controls[0].Op == ssaop.OpConstBool {
41852 v_0 := b.Controls[0]
41853 c := ssa.AuxIntToBool(v_0.AuxInt)
41854 if !(!c) {
41855 break
41856 }
41857 b.Reset(block.BlockFirst)
41858 b.SwapSuccessors()
41859 return true
41860 }
41861 }
41862 return false
41863 }
41864
View as plain text