Source file src/pkg/cmd/compile/internal/ssa/rewritegeneric.go
1
2
3
4 package ssa
5
6 import "fmt"
7 import "math"
8 import "cmd/internal/obj"
9 import "cmd/internal/objabi"
10 import "cmd/compile/internal/types"
11
12 var _ = fmt.Println
13 var _ = math.MinInt8
14 var _ = obj.ANOP
15 var _ = objabi.GOROOT
16 var _ = types.TypeMem
17
18 func rewriteValuegeneric(v *Value) bool {
19 switch v.Op {
20 case OpAdd16:
21 return rewriteValuegeneric_OpAdd16_0(v) || rewriteValuegeneric_OpAdd16_10(v) || rewriteValuegeneric_OpAdd16_20(v) || rewriteValuegeneric_OpAdd16_30(v)
22 case OpAdd32:
23 return rewriteValuegeneric_OpAdd32_0(v) || rewriteValuegeneric_OpAdd32_10(v) || rewriteValuegeneric_OpAdd32_20(v) || rewriteValuegeneric_OpAdd32_30(v)
24 case OpAdd32F:
25 return rewriteValuegeneric_OpAdd32F_0(v)
26 case OpAdd64:
27 return rewriteValuegeneric_OpAdd64_0(v) || rewriteValuegeneric_OpAdd64_10(v) || rewriteValuegeneric_OpAdd64_20(v) || rewriteValuegeneric_OpAdd64_30(v)
28 case OpAdd64F:
29 return rewriteValuegeneric_OpAdd64F_0(v)
30 case OpAdd8:
31 return rewriteValuegeneric_OpAdd8_0(v) || rewriteValuegeneric_OpAdd8_10(v) || rewriteValuegeneric_OpAdd8_20(v) || rewriteValuegeneric_OpAdd8_30(v)
32 case OpAddPtr:
33 return rewriteValuegeneric_OpAddPtr_0(v)
34 case OpAnd16:
35 return rewriteValuegeneric_OpAnd16_0(v) || rewriteValuegeneric_OpAnd16_10(v) || rewriteValuegeneric_OpAnd16_20(v)
36 case OpAnd32:
37 return rewriteValuegeneric_OpAnd32_0(v) || rewriteValuegeneric_OpAnd32_10(v) || rewriteValuegeneric_OpAnd32_20(v)
38 case OpAnd64:
39 return rewriteValuegeneric_OpAnd64_0(v) || rewriteValuegeneric_OpAnd64_10(v) || rewriteValuegeneric_OpAnd64_20(v)
40 case OpAnd8:
41 return rewriteValuegeneric_OpAnd8_0(v) || rewriteValuegeneric_OpAnd8_10(v) || rewriteValuegeneric_OpAnd8_20(v)
42 case OpArraySelect:
43 return rewriteValuegeneric_OpArraySelect_0(v)
44 case OpCom16:
45 return rewriteValuegeneric_OpCom16_0(v)
46 case OpCom32:
47 return rewriteValuegeneric_OpCom32_0(v)
48 case OpCom64:
49 return rewriteValuegeneric_OpCom64_0(v)
50 case OpCom8:
51 return rewriteValuegeneric_OpCom8_0(v)
52 case OpConstInterface:
53 return rewriteValuegeneric_OpConstInterface_0(v)
54 case OpConstSlice:
55 return rewriteValuegeneric_OpConstSlice_0(v)
56 case OpConstString:
57 return rewriteValuegeneric_OpConstString_0(v)
58 case OpConvert:
59 return rewriteValuegeneric_OpConvert_0(v)
60 case OpCvt32Fto32:
61 return rewriteValuegeneric_OpCvt32Fto32_0(v)
62 case OpCvt32Fto64:
63 return rewriteValuegeneric_OpCvt32Fto64_0(v)
64 case OpCvt32Fto64F:
65 return rewriteValuegeneric_OpCvt32Fto64F_0(v)
66 case OpCvt32to32F:
67 return rewriteValuegeneric_OpCvt32to32F_0(v)
68 case OpCvt32to64F:
69 return rewriteValuegeneric_OpCvt32to64F_0(v)
70 case OpCvt64Fto32:
71 return rewriteValuegeneric_OpCvt64Fto32_0(v)
72 case OpCvt64Fto32F:
73 return rewriteValuegeneric_OpCvt64Fto32F_0(v)
74 case OpCvt64Fto64:
75 return rewriteValuegeneric_OpCvt64Fto64_0(v)
76 case OpCvt64to32F:
77 return rewriteValuegeneric_OpCvt64to32F_0(v)
78 case OpCvt64to64F:
79 return rewriteValuegeneric_OpCvt64to64F_0(v)
80 case OpDiv16:
81 return rewriteValuegeneric_OpDiv16_0(v)
82 case OpDiv16u:
83 return rewriteValuegeneric_OpDiv16u_0(v)
84 case OpDiv32:
85 return rewriteValuegeneric_OpDiv32_0(v)
86 case OpDiv32F:
87 return rewriteValuegeneric_OpDiv32F_0(v)
88 case OpDiv32u:
89 return rewriteValuegeneric_OpDiv32u_0(v)
90 case OpDiv64:
91 return rewriteValuegeneric_OpDiv64_0(v)
92 case OpDiv64F:
93 return rewriteValuegeneric_OpDiv64F_0(v)
94 case OpDiv64u:
95 return rewriteValuegeneric_OpDiv64u_0(v)
96 case OpDiv8:
97 return rewriteValuegeneric_OpDiv8_0(v)
98 case OpDiv8u:
99 return rewriteValuegeneric_OpDiv8u_0(v)
100 case OpEq16:
101 return rewriteValuegeneric_OpEq16_0(v) || rewriteValuegeneric_OpEq16_10(v) || rewriteValuegeneric_OpEq16_20(v) || rewriteValuegeneric_OpEq16_30(v) || rewriteValuegeneric_OpEq16_40(v) || rewriteValuegeneric_OpEq16_50(v)
102 case OpEq32:
103 return rewriteValuegeneric_OpEq32_0(v) || rewriteValuegeneric_OpEq32_10(v) || rewriteValuegeneric_OpEq32_20(v) || rewriteValuegeneric_OpEq32_30(v) || rewriteValuegeneric_OpEq32_40(v) || rewriteValuegeneric_OpEq32_50(v) || rewriteValuegeneric_OpEq32_60(v) || rewriteValuegeneric_OpEq32_70(v) || rewriteValuegeneric_OpEq32_80(v) || rewriteValuegeneric_OpEq32_90(v)
104 case OpEq32F:
105 return rewriteValuegeneric_OpEq32F_0(v)
106 case OpEq64:
107 return rewriteValuegeneric_OpEq64_0(v) || rewriteValuegeneric_OpEq64_10(v) || rewriteValuegeneric_OpEq64_20(v) || rewriteValuegeneric_OpEq64_30(v) || rewriteValuegeneric_OpEq64_40(v) || rewriteValuegeneric_OpEq64_50(v) || rewriteValuegeneric_OpEq64_60(v)
108 case OpEq64F:
109 return rewriteValuegeneric_OpEq64F_0(v)
110 case OpEq8:
111 return rewriteValuegeneric_OpEq8_0(v) || rewriteValuegeneric_OpEq8_10(v) || rewriteValuegeneric_OpEq8_20(v) || rewriteValuegeneric_OpEq8_30(v)
112 case OpEqB:
113 return rewriteValuegeneric_OpEqB_0(v)
114 case OpEqInter:
115 return rewriteValuegeneric_OpEqInter_0(v)
116 case OpEqPtr:
117 return rewriteValuegeneric_OpEqPtr_0(v) || rewriteValuegeneric_OpEqPtr_10(v) || rewriteValuegeneric_OpEqPtr_20(v)
118 case OpEqSlice:
119 return rewriteValuegeneric_OpEqSlice_0(v)
120 case OpGeq16:
121 return rewriteValuegeneric_OpGeq16_0(v)
122 case OpGeq16U:
123 return rewriteValuegeneric_OpGeq16U_0(v)
124 case OpGeq32:
125 return rewriteValuegeneric_OpGeq32_0(v)
126 case OpGeq32F:
127 return rewriteValuegeneric_OpGeq32F_0(v)
128 case OpGeq32U:
129 return rewriteValuegeneric_OpGeq32U_0(v)
130 case OpGeq64:
131 return rewriteValuegeneric_OpGeq64_0(v)
132 case OpGeq64F:
133 return rewriteValuegeneric_OpGeq64F_0(v)
134 case OpGeq64U:
135 return rewriteValuegeneric_OpGeq64U_0(v)
136 case OpGeq8:
137 return rewriteValuegeneric_OpGeq8_0(v)
138 case OpGeq8U:
139 return rewriteValuegeneric_OpGeq8U_0(v)
140 case OpGreater16:
141 return rewriteValuegeneric_OpGreater16_0(v)
142 case OpGreater16U:
143 return rewriteValuegeneric_OpGreater16U_0(v)
144 case OpGreater32:
145 return rewriteValuegeneric_OpGreater32_0(v)
146 case OpGreater32F:
147 return rewriteValuegeneric_OpGreater32F_0(v)
148 case OpGreater32U:
149 return rewriteValuegeneric_OpGreater32U_0(v)
150 case OpGreater64:
151 return rewriteValuegeneric_OpGreater64_0(v)
152 case OpGreater64F:
153 return rewriteValuegeneric_OpGreater64F_0(v)
154 case OpGreater64U:
155 return rewriteValuegeneric_OpGreater64U_0(v)
156 case OpGreater8:
157 return rewriteValuegeneric_OpGreater8_0(v)
158 case OpGreater8U:
159 return rewriteValuegeneric_OpGreater8U_0(v)
160 case OpIMake:
161 return rewriteValuegeneric_OpIMake_0(v)
162 case OpInterCall:
163 return rewriteValuegeneric_OpInterCall_0(v)
164 case OpIsInBounds:
165 return rewriteValuegeneric_OpIsInBounds_0(v) || rewriteValuegeneric_OpIsInBounds_10(v) || rewriteValuegeneric_OpIsInBounds_20(v) || rewriteValuegeneric_OpIsInBounds_30(v)
166 case OpIsNonNil:
167 return rewriteValuegeneric_OpIsNonNil_0(v)
168 case OpIsSliceInBounds:
169 return rewriteValuegeneric_OpIsSliceInBounds_0(v)
170 case OpLeq16:
171 return rewriteValuegeneric_OpLeq16_0(v)
172 case OpLeq16U:
173 return rewriteValuegeneric_OpLeq16U_0(v)
174 case OpLeq32:
175 return rewriteValuegeneric_OpLeq32_0(v)
176 case OpLeq32F:
177 return rewriteValuegeneric_OpLeq32F_0(v)
178 case OpLeq32U:
179 return rewriteValuegeneric_OpLeq32U_0(v)
180 case OpLeq64:
181 return rewriteValuegeneric_OpLeq64_0(v)
182 case OpLeq64F:
183 return rewriteValuegeneric_OpLeq64F_0(v)
184 case OpLeq64U:
185 return rewriteValuegeneric_OpLeq64U_0(v)
186 case OpLeq8:
187 return rewriteValuegeneric_OpLeq8_0(v)
188 case OpLeq8U:
189 return rewriteValuegeneric_OpLeq8U_0(v)
190 case OpLess16:
191 return rewriteValuegeneric_OpLess16_0(v)
192 case OpLess16U:
193 return rewriteValuegeneric_OpLess16U_0(v)
194 case OpLess32:
195 return rewriteValuegeneric_OpLess32_0(v)
196 case OpLess32F:
197 return rewriteValuegeneric_OpLess32F_0(v)
198 case OpLess32U:
199 return rewriteValuegeneric_OpLess32U_0(v)
200 case OpLess64:
201 return rewriteValuegeneric_OpLess64_0(v)
202 case OpLess64F:
203 return rewriteValuegeneric_OpLess64F_0(v)
204 case OpLess64U:
205 return rewriteValuegeneric_OpLess64U_0(v)
206 case OpLess8:
207 return rewriteValuegeneric_OpLess8_0(v)
208 case OpLess8U:
209 return rewriteValuegeneric_OpLess8U_0(v)
210 case OpLoad:
211 return rewriteValuegeneric_OpLoad_0(v) || rewriteValuegeneric_OpLoad_10(v) || rewriteValuegeneric_OpLoad_20(v)
212 case OpLsh16x16:
213 return rewriteValuegeneric_OpLsh16x16_0(v)
214 case OpLsh16x32:
215 return rewriteValuegeneric_OpLsh16x32_0(v)
216 case OpLsh16x64:
217 return rewriteValuegeneric_OpLsh16x64_0(v)
218 case OpLsh16x8:
219 return rewriteValuegeneric_OpLsh16x8_0(v)
220 case OpLsh32x16:
221 return rewriteValuegeneric_OpLsh32x16_0(v)
222 case OpLsh32x32:
223 return rewriteValuegeneric_OpLsh32x32_0(v)
224 case OpLsh32x64:
225 return rewriteValuegeneric_OpLsh32x64_0(v)
226 case OpLsh32x8:
227 return rewriteValuegeneric_OpLsh32x8_0(v)
228 case OpLsh64x16:
229 return rewriteValuegeneric_OpLsh64x16_0(v)
230 case OpLsh64x32:
231 return rewriteValuegeneric_OpLsh64x32_0(v)
232 case OpLsh64x64:
233 return rewriteValuegeneric_OpLsh64x64_0(v)
234 case OpLsh64x8:
235 return rewriteValuegeneric_OpLsh64x8_0(v)
236 case OpLsh8x16:
237 return rewriteValuegeneric_OpLsh8x16_0(v)
238 case OpLsh8x32:
239 return rewriteValuegeneric_OpLsh8x32_0(v)
240 case OpLsh8x64:
241 return rewriteValuegeneric_OpLsh8x64_0(v)
242 case OpLsh8x8:
243 return rewriteValuegeneric_OpLsh8x8_0(v)
244 case OpMod16:
245 return rewriteValuegeneric_OpMod16_0(v)
246 case OpMod16u:
247 return rewriteValuegeneric_OpMod16u_0(v)
248 case OpMod32:
249 return rewriteValuegeneric_OpMod32_0(v)
250 case OpMod32u:
251 return rewriteValuegeneric_OpMod32u_0(v)
252 case OpMod64:
253 return rewriteValuegeneric_OpMod64_0(v)
254 case OpMod64u:
255 return rewriteValuegeneric_OpMod64u_0(v)
256 case OpMod8:
257 return rewriteValuegeneric_OpMod8_0(v)
258 case OpMod8u:
259 return rewriteValuegeneric_OpMod8u_0(v)
260 case OpMove:
261 return rewriteValuegeneric_OpMove_0(v) || rewriteValuegeneric_OpMove_10(v) || rewriteValuegeneric_OpMove_20(v)
262 case OpMul16:
263 return rewriteValuegeneric_OpMul16_0(v) || rewriteValuegeneric_OpMul16_10(v)
264 case OpMul32:
265 return rewriteValuegeneric_OpMul32_0(v) || rewriteValuegeneric_OpMul32_10(v)
266 case OpMul32F:
267 return rewriteValuegeneric_OpMul32F_0(v)
268 case OpMul64:
269 return rewriteValuegeneric_OpMul64_0(v) || rewriteValuegeneric_OpMul64_10(v)
270 case OpMul64F:
271 return rewriteValuegeneric_OpMul64F_0(v)
272 case OpMul8:
273 return rewriteValuegeneric_OpMul8_0(v) || rewriteValuegeneric_OpMul8_10(v)
274 case OpNeg16:
275 return rewriteValuegeneric_OpNeg16_0(v)
276 case OpNeg32:
277 return rewriteValuegeneric_OpNeg32_0(v)
278 case OpNeg32F:
279 return rewriteValuegeneric_OpNeg32F_0(v)
280 case OpNeg64:
281 return rewriteValuegeneric_OpNeg64_0(v)
282 case OpNeg64F:
283 return rewriteValuegeneric_OpNeg64F_0(v)
284 case OpNeg8:
285 return rewriteValuegeneric_OpNeg8_0(v)
286 case OpNeq16:
287 return rewriteValuegeneric_OpNeq16_0(v)
288 case OpNeq32:
289 return rewriteValuegeneric_OpNeq32_0(v)
290 case OpNeq32F:
291 return rewriteValuegeneric_OpNeq32F_0(v)
292 case OpNeq64:
293 return rewriteValuegeneric_OpNeq64_0(v)
294 case OpNeq64F:
295 return rewriteValuegeneric_OpNeq64F_0(v)
296 case OpNeq8:
297 return rewriteValuegeneric_OpNeq8_0(v)
298 case OpNeqB:
299 return rewriteValuegeneric_OpNeqB_0(v)
300 case OpNeqInter:
301 return rewriteValuegeneric_OpNeqInter_0(v)
302 case OpNeqPtr:
303 return rewriteValuegeneric_OpNeqPtr_0(v) || rewriteValuegeneric_OpNeqPtr_10(v) || rewriteValuegeneric_OpNeqPtr_20(v)
304 case OpNeqSlice:
305 return rewriteValuegeneric_OpNeqSlice_0(v)
306 case OpNilCheck:
307 return rewriteValuegeneric_OpNilCheck_0(v)
308 case OpNot:
309 return rewriteValuegeneric_OpNot_0(v) || rewriteValuegeneric_OpNot_10(v) || rewriteValuegeneric_OpNot_20(v) || rewriteValuegeneric_OpNot_30(v) || rewriteValuegeneric_OpNot_40(v)
310 case OpOffPtr:
311 return rewriteValuegeneric_OpOffPtr_0(v)
312 case OpOr16:
313 return rewriteValuegeneric_OpOr16_0(v) || rewriteValuegeneric_OpOr16_10(v) || rewriteValuegeneric_OpOr16_20(v)
314 case OpOr32:
315 return rewriteValuegeneric_OpOr32_0(v) || rewriteValuegeneric_OpOr32_10(v) || rewriteValuegeneric_OpOr32_20(v)
316 case OpOr64:
317 return rewriteValuegeneric_OpOr64_0(v) || rewriteValuegeneric_OpOr64_10(v) || rewriteValuegeneric_OpOr64_20(v)
318 case OpOr8:
319 return rewriteValuegeneric_OpOr8_0(v) || rewriteValuegeneric_OpOr8_10(v) || rewriteValuegeneric_OpOr8_20(v)
320 case OpPhi:
321 return rewriteValuegeneric_OpPhi_0(v)
322 case OpPtrIndex:
323 return rewriteValuegeneric_OpPtrIndex_0(v)
324 case OpRotateLeft16:
325 return rewriteValuegeneric_OpRotateLeft16_0(v)
326 case OpRotateLeft32:
327 return rewriteValuegeneric_OpRotateLeft32_0(v)
328 case OpRotateLeft64:
329 return rewriteValuegeneric_OpRotateLeft64_0(v)
330 case OpRotateLeft8:
331 return rewriteValuegeneric_OpRotateLeft8_0(v)
332 case OpRound32F:
333 return rewriteValuegeneric_OpRound32F_0(v)
334 case OpRound64F:
335 return rewriteValuegeneric_OpRound64F_0(v)
336 case OpRsh16Ux16:
337 return rewriteValuegeneric_OpRsh16Ux16_0(v)
338 case OpRsh16Ux32:
339 return rewriteValuegeneric_OpRsh16Ux32_0(v)
340 case OpRsh16Ux64:
341 return rewriteValuegeneric_OpRsh16Ux64_0(v)
342 case OpRsh16Ux8:
343 return rewriteValuegeneric_OpRsh16Ux8_0(v)
344 case OpRsh16x16:
345 return rewriteValuegeneric_OpRsh16x16_0(v)
346 case OpRsh16x32:
347 return rewriteValuegeneric_OpRsh16x32_0(v)
348 case OpRsh16x64:
349 return rewriteValuegeneric_OpRsh16x64_0(v)
350 case OpRsh16x8:
351 return rewriteValuegeneric_OpRsh16x8_0(v)
352 case OpRsh32Ux16:
353 return rewriteValuegeneric_OpRsh32Ux16_0(v)
354 case OpRsh32Ux32:
355 return rewriteValuegeneric_OpRsh32Ux32_0(v)
356 case OpRsh32Ux64:
357 return rewriteValuegeneric_OpRsh32Ux64_0(v)
358 case OpRsh32Ux8:
359 return rewriteValuegeneric_OpRsh32Ux8_0(v)
360 case OpRsh32x16:
361 return rewriteValuegeneric_OpRsh32x16_0(v)
362 case OpRsh32x32:
363 return rewriteValuegeneric_OpRsh32x32_0(v)
364 case OpRsh32x64:
365 return rewriteValuegeneric_OpRsh32x64_0(v)
366 case OpRsh32x8:
367 return rewriteValuegeneric_OpRsh32x8_0(v)
368 case OpRsh64Ux16:
369 return rewriteValuegeneric_OpRsh64Ux16_0(v)
370 case OpRsh64Ux32:
371 return rewriteValuegeneric_OpRsh64Ux32_0(v)
372 case OpRsh64Ux64:
373 return rewriteValuegeneric_OpRsh64Ux64_0(v)
374 case OpRsh64Ux8:
375 return rewriteValuegeneric_OpRsh64Ux8_0(v)
376 case OpRsh64x16:
377 return rewriteValuegeneric_OpRsh64x16_0(v)
378 case OpRsh64x32:
379 return rewriteValuegeneric_OpRsh64x32_0(v)
380 case OpRsh64x64:
381 return rewriteValuegeneric_OpRsh64x64_0(v)
382 case OpRsh64x8:
383 return rewriteValuegeneric_OpRsh64x8_0(v)
384 case OpRsh8Ux16:
385 return rewriteValuegeneric_OpRsh8Ux16_0(v)
386 case OpRsh8Ux32:
387 return rewriteValuegeneric_OpRsh8Ux32_0(v)
388 case OpRsh8Ux64:
389 return rewriteValuegeneric_OpRsh8Ux64_0(v)
390 case OpRsh8Ux8:
391 return rewriteValuegeneric_OpRsh8Ux8_0(v)
392 case OpRsh8x16:
393 return rewriteValuegeneric_OpRsh8x16_0(v)
394 case OpRsh8x32:
395 return rewriteValuegeneric_OpRsh8x32_0(v)
396 case OpRsh8x64:
397 return rewriteValuegeneric_OpRsh8x64_0(v)
398 case OpRsh8x8:
399 return rewriteValuegeneric_OpRsh8x8_0(v)
400 case OpSelect0:
401 return rewriteValuegeneric_OpSelect0_0(v)
402 case OpSelect1:
403 return rewriteValuegeneric_OpSelect1_0(v)
404 case OpSignExt16to32:
405 return rewriteValuegeneric_OpSignExt16to32_0(v)
406 case OpSignExt16to64:
407 return rewriteValuegeneric_OpSignExt16to64_0(v)
408 case OpSignExt32to64:
409 return rewriteValuegeneric_OpSignExt32to64_0(v)
410 case OpSignExt8to16:
411 return rewriteValuegeneric_OpSignExt8to16_0(v)
412 case OpSignExt8to32:
413 return rewriteValuegeneric_OpSignExt8to32_0(v)
414 case OpSignExt8to64:
415 return rewriteValuegeneric_OpSignExt8to64_0(v)
416 case OpSliceCap:
417 return rewriteValuegeneric_OpSliceCap_0(v)
418 case OpSliceLen:
419 return rewriteValuegeneric_OpSliceLen_0(v)
420 case OpSlicePtr:
421 return rewriteValuegeneric_OpSlicePtr_0(v)
422 case OpSlicemask:
423 return rewriteValuegeneric_OpSlicemask_0(v)
424 case OpSqrt:
425 return rewriteValuegeneric_OpSqrt_0(v)
426 case OpStaticCall:
427 return rewriteValuegeneric_OpStaticCall_0(v)
428 case OpStore:
429 return rewriteValuegeneric_OpStore_0(v) || rewriteValuegeneric_OpStore_10(v) || rewriteValuegeneric_OpStore_20(v)
430 case OpStringLen:
431 return rewriteValuegeneric_OpStringLen_0(v)
432 case OpStringPtr:
433 return rewriteValuegeneric_OpStringPtr_0(v)
434 case OpStructSelect:
435 return rewriteValuegeneric_OpStructSelect_0(v) || rewriteValuegeneric_OpStructSelect_10(v)
436 case OpSub16:
437 return rewriteValuegeneric_OpSub16_0(v) || rewriteValuegeneric_OpSub16_10(v)
438 case OpSub32:
439 return rewriteValuegeneric_OpSub32_0(v) || rewriteValuegeneric_OpSub32_10(v)
440 case OpSub32F:
441 return rewriteValuegeneric_OpSub32F_0(v)
442 case OpSub64:
443 return rewriteValuegeneric_OpSub64_0(v) || rewriteValuegeneric_OpSub64_10(v)
444 case OpSub64F:
445 return rewriteValuegeneric_OpSub64F_0(v)
446 case OpSub8:
447 return rewriteValuegeneric_OpSub8_0(v) || rewriteValuegeneric_OpSub8_10(v)
448 case OpTrunc16to8:
449 return rewriteValuegeneric_OpTrunc16to8_0(v)
450 case OpTrunc32to16:
451 return rewriteValuegeneric_OpTrunc32to16_0(v)
452 case OpTrunc32to8:
453 return rewriteValuegeneric_OpTrunc32to8_0(v)
454 case OpTrunc64to16:
455 return rewriteValuegeneric_OpTrunc64to16_0(v)
456 case OpTrunc64to32:
457 return rewriteValuegeneric_OpTrunc64to32_0(v)
458 case OpTrunc64to8:
459 return rewriteValuegeneric_OpTrunc64to8_0(v)
460 case OpXor16:
461 return rewriteValuegeneric_OpXor16_0(v) || rewriteValuegeneric_OpXor16_10(v)
462 case OpXor32:
463 return rewriteValuegeneric_OpXor32_0(v) || rewriteValuegeneric_OpXor32_10(v)
464 case OpXor64:
465 return rewriteValuegeneric_OpXor64_0(v) || rewriteValuegeneric_OpXor64_10(v)
466 case OpXor8:
467 return rewriteValuegeneric_OpXor8_0(v) || rewriteValuegeneric_OpXor8_10(v)
468 case OpZero:
469 return rewriteValuegeneric_OpZero_0(v)
470 case OpZeroExt16to32:
471 return rewriteValuegeneric_OpZeroExt16to32_0(v)
472 case OpZeroExt16to64:
473 return rewriteValuegeneric_OpZeroExt16to64_0(v)
474 case OpZeroExt32to64:
475 return rewriteValuegeneric_OpZeroExt32to64_0(v)
476 case OpZeroExt8to16:
477 return rewriteValuegeneric_OpZeroExt8to16_0(v)
478 case OpZeroExt8to32:
479 return rewriteValuegeneric_OpZeroExt8to32_0(v)
480 case OpZeroExt8to64:
481 return rewriteValuegeneric_OpZeroExt8to64_0(v)
482 }
483 return false
484 }
485 func rewriteValuegeneric_OpAdd16_0(v *Value) bool {
486 b := v.Block
487
488
489
490 for {
491 _ = v.Args[1]
492 v_0 := v.Args[0]
493 if v_0.Op != OpConst16 {
494 break
495 }
496 c := v_0.AuxInt
497 v_1 := v.Args[1]
498 if v_1.Op != OpConst16 {
499 break
500 }
501 d := v_1.AuxInt
502 v.reset(OpConst16)
503 v.AuxInt = int64(int16(c + d))
504 return true
505 }
506
507
508
509 for {
510 _ = v.Args[1]
511 v_0 := v.Args[0]
512 if v_0.Op != OpConst16 {
513 break
514 }
515 d := v_0.AuxInt
516 v_1 := v.Args[1]
517 if v_1.Op != OpConst16 {
518 break
519 }
520 c := v_1.AuxInt
521 v.reset(OpConst16)
522 v.AuxInt = int64(int16(c + d))
523 return true
524 }
525
526
527
528 for {
529 t := v.Type
530 _ = v.Args[1]
531 v_0 := v.Args[0]
532 if v_0.Op != OpMul16 {
533 break
534 }
535 y := v_0.Args[1]
536 x := v_0.Args[0]
537 v_1 := v.Args[1]
538 if v_1.Op != OpMul16 {
539 break
540 }
541 z := v_1.Args[1]
542 if x != v_1.Args[0] {
543 break
544 }
545 v.reset(OpMul16)
546 v.AddArg(x)
547 v0 := b.NewValue0(v.Pos, OpAdd16, t)
548 v0.AddArg(y)
549 v0.AddArg(z)
550 v.AddArg(v0)
551 return true
552 }
553
554
555
556 for {
557 t := v.Type
558 _ = v.Args[1]
559 v_0 := v.Args[0]
560 if v_0.Op != OpMul16 {
561 break
562 }
563 x := v_0.Args[1]
564 y := v_0.Args[0]
565 v_1 := v.Args[1]
566 if v_1.Op != OpMul16 {
567 break
568 }
569 z := v_1.Args[1]
570 if x != v_1.Args[0] {
571 break
572 }
573 v.reset(OpMul16)
574 v.AddArg(x)
575 v0 := b.NewValue0(v.Pos, OpAdd16, t)
576 v0.AddArg(y)
577 v0.AddArg(z)
578 v.AddArg(v0)
579 return true
580 }
581
582
583
584 for {
585 t := v.Type
586 _ = v.Args[1]
587 v_0 := v.Args[0]
588 if v_0.Op != OpMul16 {
589 break
590 }
591 y := v_0.Args[1]
592 x := v_0.Args[0]
593 v_1 := v.Args[1]
594 if v_1.Op != OpMul16 {
595 break
596 }
597 _ = v_1.Args[1]
598 z := v_1.Args[0]
599 if x != v_1.Args[1] {
600 break
601 }
602 v.reset(OpMul16)
603 v.AddArg(x)
604 v0 := b.NewValue0(v.Pos, OpAdd16, t)
605 v0.AddArg(y)
606 v0.AddArg(z)
607 v.AddArg(v0)
608 return true
609 }
610
611
612
613 for {
614 t := v.Type
615 _ = v.Args[1]
616 v_0 := v.Args[0]
617 if v_0.Op != OpMul16 {
618 break
619 }
620 x := v_0.Args[1]
621 y := v_0.Args[0]
622 v_1 := v.Args[1]
623 if v_1.Op != OpMul16 {
624 break
625 }
626 _ = v_1.Args[1]
627 z := v_1.Args[0]
628 if x != v_1.Args[1] {
629 break
630 }
631 v.reset(OpMul16)
632 v.AddArg(x)
633 v0 := b.NewValue0(v.Pos, OpAdd16, t)
634 v0.AddArg(y)
635 v0.AddArg(z)
636 v.AddArg(v0)
637 return true
638 }
639
640
641
642 for {
643 t := v.Type
644 _ = v.Args[1]
645 v_0 := v.Args[0]
646 if v_0.Op != OpMul16 {
647 break
648 }
649 z := v_0.Args[1]
650 x := v_0.Args[0]
651 v_1 := v.Args[1]
652 if v_1.Op != OpMul16 {
653 break
654 }
655 y := v_1.Args[1]
656 if x != v_1.Args[0] {
657 break
658 }
659 v.reset(OpMul16)
660 v.AddArg(x)
661 v0 := b.NewValue0(v.Pos, OpAdd16, t)
662 v0.AddArg(y)
663 v0.AddArg(z)
664 v.AddArg(v0)
665 return true
666 }
667
668
669
670 for {
671 t := v.Type
672 _ = v.Args[1]
673 v_0 := v.Args[0]
674 if v_0.Op != OpMul16 {
675 break
676 }
677 x := v_0.Args[1]
678 z := v_0.Args[0]
679 v_1 := v.Args[1]
680 if v_1.Op != OpMul16 {
681 break
682 }
683 y := v_1.Args[1]
684 if x != v_1.Args[0] {
685 break
686 }
687 v.reset(OpMul16)
688 v.AddArg(x)
689 v0 := b.NewValue0(v.Pos, OpAdd16, t)
690 v0.AddArg(y)
691 v0.AddArg(z)
692 v.AddArg(v0)
693 return true
694 }
695
696
697
698 for {
699 t := v.Type
700 _ = v.Args[1]
701 v_0 := v.Args[0]
702 if v_0.Op != OpMul16 {
703 break
704 }
705 z := v_0.Args[1]
706 x := v_0.Args[0]
707 v_1 := v.Args[1]
708 if v_1.Op != OpMul16 {
709 break
710 }
711 _ = v_1.Args[1]
712 y := v_1.Args[0]
713 if x != v_1.Args[1] {
714 break
715 }
716 v.reset(OpMul16)
717 v.AddArg(x)
718 v0 := b.NewValue0(v.Pos, OpAdd16, t)
719 v0.AddArg(y)
720 v0.AddArg(z)
721 v.AddArg(v0)
722 return true
723 }
724
725
726
727 for {
728 t := v.Type
729 _ = v.Args[1]
730 v_0 := v.Args[0]
731 if v_0.Op != OpMul16 {
732 break
733 }
734 x := v_0.Args[1]
735 z := v_0.Args[0]
736 v_1 := v.Args[1]
737 if v_1.Op != OpMul16 {
738 break
739 }
740 _ = v_1.Args[1]
741 y := v_1.Args[0]
742 if x != v_1.Args[1] {
743 break
744 }
745 v.reset(OpMul16)
746 v.AddArg(x)
747 v0 := b.NewValue0(v.Pos, OpAdd16, t)
748 v0.AddArg(y)
749 v0.AddArg(z)
750 v.AddArg(v0)
751 return true
752 }
753 return false
754 }
755 func rewriteValuegeneric_OpAdd16_10(v *Value) bool {
756 b := v.Block
757
758
759
760 for {
761 x := v.Args[1]
762 v_0 := v.Args[0]
763 if v_0.Op != OpConst16 {
764 break
765 }
766 if v_0.AuxInt != 0 {
767 break
768 }
769 v.reset(OpCopy)
770 v.Type = x.Type
771 v.AddArg(x)
772 return true
773 }
774
775
776
777 for {
778 _ = v.Args[1]
779 x := v.Args[0]
780 v_1 := v.Args[1]
781 if v_1.Op != OpConst16 {
782 break
783 }
784 if v_1.AuxInt != 0 {
785 break
786 }
787 v.reset(OpCopy)
788 v.Type = x.Type
789 v.AddArg(x)
790 return true
791 }
792
793
794
795 for {
796 _ = v.Args[1]
797 v_0 := v.Args[0]
798 if v_0.Op != OpConst16 {
799 break
800 }
801 if v_0.AuxInt != 1 {
802 break
803 }
804 v_1 := v.Args[1]
805 if v_1.Op != OpCom16 {
806 break
807 }
808 x := v_1.Args[0]
809 v.reset(OpNeg16)
810 v.AddArg(x)
811 return true
812 }
813
814
815
816 for {
817 _ = v.Args[1]
818 v_0 := v.Args[0]
819 if v_0.Op != OpCom16 {
820 break
821 }
822 x := v_0.Args[0]
823 v_1 := v.Args[1]
824 if v_1.Op != OpConst16 {
825 break
826 }
827 if v_1.AuxInt != 1 {
828 break
829 }
830 v.reset(OpNeg16)
831 v.AddArg(x)
832 return true
833 }
834
835
836
837 for {
838 x := v.Args[1]
839 v_0 := v.Args[0]
840 if v_0.Op != OpAdd16 {
841 break
842 }
843 z := v_0.Args[1]
844 i := v_0.Args[0]
845 if i.Op != OpConst16 {
846 break
847 }
848 t := i.Type
849 if !(z.Op != OpConst16 && x.Op != OpConst16) {
850 break
851 }
852 v.reset(OpAdd16)
853 v.AddArg(i)
854 v0 := b.NewValue0(v.Pos, OpAdd16, t)
855 v0.AddArg(z)
856 v0.AddArg(x)
857 v.AddArg(v0)
858 return true
859 }
860
861
862
863 for {
864 x := v.Args[1]
865 v_0 := v.Args[0]
866 if v_0.Op != OpAdd16 {
867 break
868 }
869 _ = v_0.Args[1]
870 z := v_0.Args[0]
871 i := v_0.Args[1]
872 if i.Op != OpConst16 {
873 break
874 }
875 t := i.Type
876 if !(z.Op != OpConst16 && x.Op != OpConst16) {
877 break
878 }
879 v.reset(OpAdd16)
880 v.AddArg(i)
881 v0 := b.NewValue0(v.Pos, OpAdd16, t)
882 v0.AddArg(z)
883 v0.AddArg(x)
884 v.AddArg(v0)
885 return true
886 }
887
888
889
890 for {
891 _ = v.Args[1]
892 x := v.Args[0]
893 v_1 := v.Args[1]
894 if v_1.Op != OpAdd16 {
895 break
896 }
897 z := v_1.Args[1]
898 i := v_1.Args[0]
899 if i.Op != OpConst16 {
900 break
901 }
902 t := i.Type
903 if !(z.Op != OpConst16 && x.Op != OpConst16) {
904 break
905 }
906 v.reset(OpAdd16)
907 v.AddArg(i)
908 v0 := b.NewValue0(v.Pos, OpAdd16, t)
909 v0.AddArg(z)
910 v0.AddArg(x)
911 v.AddArg(v0)
912 return true
913 }
914
915
916
917 for {
918 _ = v.Args[1]
919 x := v.Args[0]
920 v_1 := v.Args[1]
921 if v_1.Op != OpAdd16 {
922 break
923 }
924 _ = v_1.Args[1]
925 z := v_1.Args[0]
926 i := v_1.Args[1]
927 if i.Op != OpConst16 {
928 break
929 }
930 t := i.Type
931 if !(z.Op != OpConst16 && x.Op != OpConst16) {
932 break
933 }
934 v.reset(OpAdd16)
935 v.AddArg(i)
936 v0 := b.NewValue0(v.Pos, OpAdd16, t)
937 v0.AddArg(z)
938 v0.AddArg(x)
939 v.AddArg(v0)
940 return true
941 }
942
943
944
945 for {
946 x := v.Args[1]
947 v_0 := v.Args[0]
948 if v_0.Op != OpSub16 {
949 break
950 }
951 z := v_0.Args[1]
952 i := v_0.Args[0]
953 if i.Op != OpConst16 {
954 break
955 }
956 t := i.Type
957 if !(z.Op != OpConst16 && x.Op != OpConst16) {
958 break
959 }
960 v.reset(OpAdd16)
961 v.AddArg(i)
962 v0 := b.NewValue0(v.Pos, OpSub16, t)
963 v0.AddArg(x)
964 v0.AddArg(z)
965 v.AddArg(v0)
966 return true
967 }
968
969
970
971 for {
972 _ = v.Args[1]
973 x := v.Args[0]
974 v_1 := v.Args[1]
975 if v_1.Op != OpSub16 {
976 break
977 }
978 z := v_1.Args[1]
979 i := v_1.Args[0]
980 if i.Op != OpConst16 {
981 break
982 }
983 t := i.Type
984 if !(z.Op != OpConst16 && x.Op != OpConst16) {
985 break
986 }
987 v.reset(OpAdd16)
988 v.AddArg(i)
989 v0 := b.NewValue0(v.Pos, OpSub16, t)
990 v0.AddArg(x)
991 v0.AddArg(z)
992 v.AddArg(v0)
993 return true
994 }
995 return false
996 }
997 func rewriteValuegeneric_OpAdd16_20(v *Value) bool {
998 b := v.Block
999
1000
1001
1002 for {
1003 _ = v.Args[1]
1004 x := v.Args[0]
1005 v_1 := v.Args[1]
1006 if v_1.Op != OpSub16 {
1007 break
1008 }
1009 z := v_1.Args[1]
1010 i := v_1.Args[0]
1011 if i.Op != OpConst16 {
1012 break
1013 }
1014 t := i.Type
1015 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1016 break
1017 }
1018 v.reset(OpAdd16)
1019 v.AddArg(i)
1020 v0 := b.NewValue0(v.Pos, OpSub16, t)
1021 v0.AddArg(x)
1022 v0.AddArg(z)
1023 v.AddArg(v0)
1024 return true
1025 }
1026
1027
1028
1029 for {
1030 x := v.Args[1]
1031 v_0 := v.Args[0]
1032 if v_0.Op != OpSub16 {
1033 break
1034 }
1035 z := v_0.Args[1]
1036 i := v_0.Args[0]
1037 if i.Op != OpConst16 {
1038 break
1039 }
1040 t := i.Type
1041 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1042 break
1043 }
1044 v.reset(OpAdd16)
1045 v.AddArg(i)
1046 v0 := b.NewValue0(v.Pos, OpSub16, t)
1047 v0.AddArg(x)
1048 v0.AddArg(z)
1049 v.AddArg(v0)
1050 return true
1051 }
1052
1053
1054
1055 for {
1056 x := v.Args[1]
1057 v_0 := v.Args[0]
1058 if v_0.Op != OpSub16 {
1059 break
1060 }
1061 _ = v_0.Args[1]
1062 z := v_0.Args[0]
1063 i := v_0.Args[1]
1064 if i.Op != OpConst16 {
1065 break
1066 }
1067 t := i.Type
1068 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1069 break
1070 }
1071 v.reset(OpSub16)
1072 v0 := b.NewValue0(v.Pos, OpAdd16, t)
1073 v0.AddArg(x)
1074 v0.AddArg(z)
1075 v.AddArg(v0)
1076 v.AddArg(i)
1077 return true
1078 }
1079
1080
1081
1082 for {
1083 _ = v.Args[1]
1084 x := v.Args[0]
1085 v_1 := v.Args[1]
1086 if v_1.Op != OpSub16 {
1087 break
1088 }
1089 _ = v_1.Args[1]
1090 z := v_1.Args[0]
1091 i := v_1.Args[1]
1092 if i.Op != OpConst16 {
1093 break
1094 }
1095 t := i.Type
1096 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1097 break
1098 }
1099 v.reset(OpSub16)
1100 v0 := b.NewValue0(v.Pos, OpAdd16, t)
1101 v0.AddArg(x)
1102 v0.AddArg(z)
1103 v.AddArg(v0)
1104 v.AddArg(i)
1105 return true
1106 }
1107
1108
1109
1110 for {
1111 _ = v.Args[1]
1112 x := v.Args[0]
1113 v_1 := v.Args[1]
1114 if v_1.Op != OpSub16 {
1115 break
1116 }
1117 _ = v_1.Args[1]
1118 z := v_1.Args[0]
1119 i := v_1.Args[1]
1120 if i.Op != OpConst16 {
1121 break
1122 }
1123 t := i.Type
1124 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1125 break
1126 }
1127 v.reset(OpSub16)
1128 v0 := b.NewValue0(v.Pos, OpAdd16, t)
1129 v0.AddArg(x)
1130 v0.AddArg(z)
1131 v.AddArg(v0)
1132 v.AddArg(i)
1133 return true
1134 }
1135
1136
1137
1138 for {
1139 x := v.Args[1]
1140 v_0 := v.Args[0]
1141 if v_0.Op != OpSub16 {
1142 break
1143 }
1144 _ = v_0.Args[1]
1145 z := v_0.Args[0]
1146 i := v_0.Args[1]
1147 if i.Op != OpConst16 {
1148 break
1149 }
1150 t := i.Type
1151 if !(z.Op != OpConst16 && x.Op != OpConst16) {
1152 break
1153 }
1154 v.reset(OpSub16)
1155 v0 := b.NewValue0(v.Pos, OpAdd16, t)
1156 v0.AddArg(x)
1157 v0.AddArg(z)
1158 v.AddArg(v0)
1159 v.AddArg(i)
1160 return true
1161 }
1162
1163
1164
1165 for {
1166 _ = v.Args[1]
1167 v_0 := v.Args[0]
1168 if v_0.Op != OpConst16 {
1169 break
1170 }
1171 t := v_0.Type
1172 c := v_0.AuxInt
1173 v_1 := v.Args[1]
1174 if v_1.Op != OpAdd16 {
1175 break
1176 }
1177 x := v_1.Args[1]
1178 v_1_0 := v_1.Args[0]
1179 if v_1_0.Op != OpConst16 {
1180 break
1181 }
1182 if v_1_0.Type != t {
1183 break
1184 }
1185 d := v_1_0.AuxInt
1186 v.reset(OpAdd16)
1187 v0 := b.NewValue0(v.Pos, OpConst16, t)
1188 v0.AuxInt = int64(int16(c + d))
1189 v.AddArg(v0)
1190 v.AddArg(x)
1191 return true
1192 }
1193
1194
1195
1196 for {
1197 _ = v.Args[1]
1198 v_0 := v.Args[0]
1199 if v_0.Op != OpConst16 {
1200 break
1201 }
1202 t := v_0.Type
1203 c := v_0.AuxInt
1204 v_1 := v.Args[1]
1205 if v_1.Op != OpAdd16 {
1206 break
1207 }
1208 _ = v_1.Args[1]
1209 x := v_1.Args[0]
1210 v_1_1 := v_1.Args[1]
1211 if v_1_1.Op != OpConst16 {
1212 break
1213 }
1214 if v_1_1.Type != t {
1215 break
1216 }
1217 d := v_1_1.AuxInt
1218 v.reset(OpAdd16)
1219 v0 := b.NewValue0(v.Pos, OpConst16, t)
1220 v0.AuxInt = int64(int16(c + d))
1221 v.AddArg(v0)
1222 v.AddArg(x)
1223 return true
1224 }
1225
1226
1227
1228 for {
1229 _ = v.Args[1]
1230 v_0 := v.Args[0]
1231 if v_0.Op != OpAdd16 {
1232 break
1233 }
1234 x := v_0.Args[1]
1235 v_0_0 := v_0.Args[0]
1236 if v_0_0.Op != OpConst16 {
1237 break
1238 }
1239 t := v_0_0.Type
1240 d := v_0_0.AuxInt
1241 v_1 := v.Args[1]
1242 if v_1.Op != OpConst16 {
1243 break
1244 }
1245 if v_1.Type != t {
1246 break
1247 }
1248 c := v_1.AuxInt
1249 v.reset(OpAdd16)
1250 v0 := b.NewValue0(v.Pos, OpConst16, t)
1251 v0.AuxInt = int64(int16(c + d))
1252 v.AddArg(v0)
1253 v.AddArg(x)
1254 return true
1255 }
1256
1257
1258
1259 for {
1260 _ = v.Args[1]
1261 v_0 := v.Args[0]
1262 if v_0.Op != OpAdd16 {
1263 break
1264 }
1265 _ = v_0.Args[1]
1266 x := v_0.Args[0]
1267 v_0_1 := v_0.Args[1]
1268 if v_0_1.Op != OpConst16 {
1269 break
1270 }
1271 t := v_0_1.Type
1272 d := v_0_1.AuxInt
1273 v_1 := v.Args[1]
1274 if v_1.Op != OpConst16 {
1275 break
1276 }
1277 if v_1.Type != t {
1278 break
1279 }
1280 c := v_1.AuxInt
1281 v.reset(OpAdd16)
1282 v0 := b.NewValue0(v.Pos, OpConst16, t)
1283 v0.AuxInt = int64(int16(c + d))
1284 v.AddArg(v0)
1285 v.AddArg(x)
1286 return true
1287 }
1288 return false
1289 }
1290 func rewriteValuegeneric_OpAdd16_30(v *Value) bool {
1291 b := v.Block
1292
1293
1294
1295 for {
1296 _ = v.Args[1]
1297 v_0 := v.Args[0]
1298 if v_0.Op != OpConst16 {
1299 break
1300 }
1301 t := v_0.Type
1302 c := v_0.AuxInt
1303 v_1 := v.Args[1]
1304 if v_1.Op != OpSub16 {
1305 break
1306 }
1307 x := v_1.Args[1]
1308 v_1_0 := v_1.Args[0]
1309 if v_1_0.Op != OpConst16 {
1310 break
1311 }
1312 if v_1_0.Type != t {
1313 break
1314 }
1315 d := v_1_0.AuxInt
1316 v.reset(OpSub16)
1317 v0 := b.NewValue0(v.Pos, OpConst16, t)
1318 v0.AuxInt = int64(int16(c + d))
1319 v.AddArg(v0)
1320 v.AddArg(x)
1321 return true
1322 }
1323
1324
1325
1326 for {
1327 _ = v.Args[1]
1328 v_0 := v.Args[0]
1329 if v_0.Op != OpSub16 {
1330 break
1331 }
1332 x := v_0.Args[1]
1333 v_0_0 := v_0.Args[0]
1334 if v_0_0.Op != OpConst16 {
1335 break
1336 }
1337 t := v_0_0.Type
1338 d := v_0_0.AuxInt
1339 v_1 := v.Args[1]
1340 if v_1.Op != OpConst16 {
1341 break
1342 }
1343 if v_1.Type != t {
1344 break
1345 }
1346 c := v_1.AuxInt
1347 v.reset(OpSub16)
1348 v0 := b.NewValue0(v.Pos, OpConst16, t)
1349 v0.AuxInt = int64(int16(c + d))
1350 v.AddArg(v0)
1351 v.AddArg(x)
1352 return true
1353 }
1354
1355
1356
1357 for {
1358 _ = v.Args[1]
1359 v_0 := v.Args[0]
1360 if v_0.Op != OpConst16 {
1361 break
1362 }
1363 t := v_0.Type
1364 c := v_0.AuxInt
1365 v_1 := v.Args[1]
1366 if v_1.Op != OpSub16 {
1367 break
1368 }
1369 _ = v_1.Args[1]
1370 x := v_1.Args[0]
1371 v_1_1 := v_1.Args[1]
1372 if v_1_1.Op != OpConst16 {
1373 break
1374 }
1375 if v_1_1.Type != t {
1376 break
1377 }
1378 d := v_1_1.AuxInt
1379 v.reset(OpAdd16)
1380 v0 := b.NewValue0(v.Pos, OpConst16, t)
1381 v0.AuxInt = int64(int16(c - d))
1382 v.AddArg(v0)
1383 v.AddArg(x)
1384 return true
1385 }
1386
1387
1388
1389 for {
1390 _ = v.Args[1]
1391 v_0 := v.Args[0]
1392 if v_0.Op != OpSub16 {
1393 break
1394 }
1395 _ = v_0.Args[1]
1396 x := v_0.Args[0]
1397 v_0_1 := v_0.Args[1]
1398 if v_0_1.Op != OpConst16 {
1399 break
1400 }
1401 t := v_0_1.Type
1402 d := v_0_1.AuxInt
1403 v_1 := v.Args[1]
1404 if v_1.Op != OpConst16 {
1405 break
1406 }
1407 if v_1.Type != t {
1408 break
1409 }
1410 c := v_1.AuxInt
1411 v.reset(OpAdd16)
1412 v0 := b.NewValue0(v.Pos, OpConst16, t)
1413 v0.AuxInt = int64(int16(c - d))
1414 v.AddArg(v0)
1415 v.AddArg(x)
1416 return true
1417 }
1418 return false
1419 }
1420 func rewriteValuegeneric_OpAdd32_0(v *Value) bool {
1421 b := v.Block
1422
1423
1424
1425 for {
1426 _ = v.Args[1]
1427 v_0 := v.Args[0]
1428 if v_0.Op != OpConst32 {
1429 break
1430 }
1431 c := v_0.AuxInt
1432 v_1 := v.Args[1]
1433 if v_1.Op != OpConst32 {
1434 break
1435 }
1436 d := v_1.AuxInt
1437 v.reset(OpConst32)
1438 v.AuxInt = int64(int32(c + d))
1439 return true
1440 }
1441
1442
1443
1444 for {
1445 _ = v.Args[1]
1446 v_0 := v.Args[0]
1447 if v_0.Op != OpConst32 {
1448 break
1449 }
1450 d := v_0.AuxInt
1451 v_1 := v.Args[1]
1452 if v_1.Op != OpConst32 {
1453 break
1454 }
1455 c := v_1.AuxInt
1456 v.reset(OpConst32)
1457 v.AuxInt = int64(int32(c + d))
1458 return true
1459 }
1460
1461
1462
1463 for {
1464 t := v.Type
1465 _ = v.Args[1]
1466 v_0 := v.Args[0]
1467 if v_0.Op != OpMul32 {
1468 break
1469 }
1470 y := v_0.Args[1]
1471 x := v_0.Args[0]
1472 v_1 := v.Args[1]
1473 if v_1.Op != OpMul32 {
1474 break
1475 }
1476 z := v_1.Args[1]
1477 if x != v_1.Args[0] {
1478 break
1479 }
1480 v.reset(OpMul32)
1481 v.AddArg(x)
1482 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1483 v0.AddArg(y)
1484 v0.AddArg(z)
1485 v.AddArg(v0)
1486 return true
1487 }
1488
1489
1490
1491 for {
1492 t := v.Type
1493 _ = v.Args[1]
1494 v_0 := v.Args[0]
1495 if v_0.Op != OpMul32 {
1496 break
1497 }
1498 x := v_0.Args[1]
1499 y := v_0.Args[0]
1500 v_1 := v.Args[1]
1501 if v_1.Op != OpMul32 {
1502 break
1503 }
1504 z := v_1.Args[1]
1505 if x != v_1.Args[0] {
1506 break
1507 }
1508 v.reset(OpMul32)
1509 v.AddArg(x)
1510 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1511 v0.AddArg(y)
1512 v0.AddArg(z)
1513 v.AddArg(v0)
1514 return true
1515 }
1516
1517
1518
1519 for {
1520 t := v.Type
1521 _ = v.Args[1]
1522 v_0 := v.Args[0]
1523 if v_0.Op != OpMul32 {
1524 break
1525 }
1526 y := v_0.Args[1]
1527 x := v_0.Args[0]
1528 v_1 := v.Args[1]
1529 if v_1.Op != OpMul32 {
1530 break
1531 }
1532 _ = v_1.Args[1]
1533 z := v_1.Args[0]
1534 if x != v_1.Args[1] {
1535 break
1536 }
1537 v.reset(OpMul32)
1538 v.AddArg(x)
1539 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1540 v0.AddArg(y)
1541 v0.AddArg(z)
1542 v.AddArg(v0)
1543 return true
1544 }
1545
1546
1547
1548 for {
1549 t := v.Type
1550 _ = v.Args[1]
1551 v_0 := v.Args[0]
1552 if v_0.Op != OpMul32 {
1553 break
1554 }
1555 x := v_0.Args[1]
1556 y := v_0.Args[0]
1557 v_1 := v.Args[1]
1558 if v_1.Op != OpMul32 {
1559 break
1560 }
1561 _ = v_1.Args[1]
1562 z := v_1.Args[0]
1563 if x != v_1.Args[1] {
1564 break
1565 }
1566 v.reset(OpMul32)
1567 v.AddArg(x)
1568 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1569 v0.AddArg(y)
1570 v0.AddArg(z)
1571 v.AddArg(v0)
1572 return true
1573 }
1574
1575
1576
1577 for {
1578 t := v.Type
1579 _ = v.Args[1]
1580 v_0 := v.Args[0]
1581 if v_0.Op != OpMul32 {
1582 break
1583 }
1584 z := v_0.Args[1]
1585 x := v_0.Args[0]
1586 v_1 := v.Args[1]
1587 if v_1.Op != OpMul32 {
1588 break
1589 }
1590 y := v_1.Args[1]
1591 if x != v_1.Args[0] {
1592 break
1593 }
1594 v.reset(OpMul32)
1595 v.AddArg(x)
1596 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1597 v0.AddArg(y)
1598 v0.AddArg(z)
1599 v.AddArg(v0)
1600 return true
1601 }
1602
1603
1604
1605 for {
1606 t := v.Type
1607 _ = v.Args[1]
1608 v_0 := v.Args[0]
1609 if v_0.Op != OpMul32 {
1610 break
1611 }
1612 x := v_0.Args[1]
1613 z := v_0.Args[0]
1614 v_1 := v.Args[1]
1615 if v_1.Op != OpMul32 {
1616 break
1617 }
1618 y := v_1.Args[1]
1619 if x != v_1.Args[0] {
1620 break
1621 }
1622 v.reset(OpMul32)
1623 v.AddArg(x)
1624 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1625 v0.AddArg(y)
1626 v0.AddArg(z)
1627 v.AddArg(v0)
1628 return true
1629 }
1630
1631
1632
1633 for {
1634 t := v.Type
1635 _ = v.Args[1]
1636 v_0 := v.Args[0]
1637 if v_0.Op != OpMul32 {
1638 break
1639 }
1640 z := v_0.Args[1]
1641 x := v_0.Args[0]
1642 v_1 := v.Args[1]
1643 if v_1.Op != OpMul32 {
1644 break
1645 }
1646 _ = v_1.Args[1]
1647 y := v_1.Args[0]
1648 if x != v_1.Args[1] {
1649 break
1650 }
1651 v.reset(OpMul32)
1652 v.AddArg(x)
1653 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1654 v0.AddArg(y)
1655 v0.AddArg(z)
1656 v.AddArg(v0)
1657 return true
1658 }
1659
1660
1661
1662 for {
1663 t := v.Type
1664 _ = v.Args[1]
1665 v_0 := v.Args[0]
1666 if v_0.Op != OpMul32 {
1667 break
1668 }
1669 x := v_0.Args[1]
1670 z := v_0.Args[0]
1671 v_1 := v.Args[1]
1672 if v_1.Op != OpMul32 {
1673 break
1674 }
1675 _ = v_1.Args[1]
1676 y := v_1.Args[0]
1677 if x != v_1.Args[1] {
1678 break
1679 }
1680 v.reset(OpMul32)
1681 v.AddArg(x)
1682 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1683 v0.AddArg(y)
1684 v0.AddArg(z)
1685 v.AddArg(v0)
1686 return true
1687 }
1688 return false
1689 }
1690 func rewriteValuegeneric_OpAdd32_10(v *Value) bool {
1691 b := v.Block
1692
1693
1694
1695 for {
1696 x := v.Args[1]
1697 v_0 := v.Args[0]
1698 if v_0.Op != OpConst32 {
1699 break
1700 }
1701 if v_0.AuxInt != 0 {
1702 break
1703 }
1704 v.reset(OpCopy)
1705 v.Type = x.Type
1706 v.AddArg(x)
1707 return true
1708 }
1709
1710
1711
1712 for {
1713 _ = v.Args[1]
1714 x := v.Args[0]
1715 v_1 := v.Args[1]
1716 if v_1.Op != OpConst32 {
1717 break
1718 }
1719 if v_1.AuxInt != 0 {
1720 break
1721 }
1722 v.reset(OpCopy)
1723 v.Type = x.Type
1724 v.AddArg(x)
1725 return true
1726 }
1727
1728
1729
1730 for {
1731 _ = v.Args[1]
1732 v_0 := v.Args[0]
1733 if v_0.Op != OpConst32 {
1734 break
1735 }
1736 if v_0.AuxInt != 1 {
1737 break
1738 }
1739 v_1 := v.Args[1]
1740 if v_1.Op != OpCom32 {
1741 break
1742 }
1743 x := v_1.Args[0]
1744 v.reset(OpNeg32)
1745 v.AddArg(x)
1746 return true
1747 }
1748
1749
1750
1751 for {
1752 _ = v.Args[1]
1753 v_0 := v.Args[0]
1754 if v_0.Op != OpCom32 {
1755 break
1756 }
1757 x := v_0.Args[0]
1758 v_1 := v.Args[1]
1759 if v_1.Op != OpConst32 {
1760 break
1761 }
1762 if v_1.AuxInt != 1 {
1763 break
1764 }
1765 v.reset(OpNeg32)
1766 v.AddArg(x)
1767 return true
1768 }
1769
1770
1771
1772 for {
1773 x := v.Args[1]
1774 v_0 := v.Args[0]
1775 if v_0.Op != OpAdd32 {
1776 break
1777 }
1778 z := v_0.Args[1]
1779 i := v_0.Args[0]
1780 if i.Op != OpConst32 {
1781 break
1782 }
1783 t := i.Type
1784 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1785 break
1786 }
1787 v.reset(OpAdd32)
1788 v.AddArg(i)
1789 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1790 v0.AddArg(z)
1791 v0.AddArg(x)
1792 v.AddArg(v0)
1793 return true
1794 }
1795
1796
1797
1798 for {
1799 x := v.Args[1]
1800 v_0 := v.Args[0]
1801 if v_0.Op != OpAdd32 {
1802 break
1803 }
1804 _ = v_0.Args[1]
1805 z := v_0.Args[0]
1806 i := v_0.Args[1]
1807 if i.Op != OpConst32 {
1808 break
1809 }
1810 t := i.Type
1811 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1812 break
1813 }
1814 v.reset(OpAdd32)
1815 v.AddArg(i)
1816 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1817 v0.AddArg(z)
1818 v0.AddArg(x)
1819 v.AddArg(v0)
1820 return true
1821 }
1822
1823
1824
1825 for {
1826 _ = v.Args[1]
1827 x := v.Args[0]
1828 v_1 := v.Args[1]
1829 if v_1.Op != OpAdd32 {
1830 break
1831 }
1832 z := v_1.Args[1]
1833 i := v_1.Args[0]
1834 if i.Op != OpConst32 {
1835 break
1836 }
1837 t := i.Type
1838 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1839 break
1840 }
1841 v.reset(OpAdd32)
1842 v.AddArg(i)
1843 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1844 v0.AddArg(z)
1845 v0.AddArg(x)
1846 v.AddArg(v0)
1847 return true
1848 }
1849
1850
1851
1852 for {
1853 _ = v.Args[1]
1854 x := v.Args[0]
1855 v_1 := v.Args[1]
1856 if v_1.Op != OpAdd32 {
1857 break
1858 }
1859 _ = v_1.Args[1]
1860 z := v_1.Args[0]
1861 i := v_1.Args[1]
1862 if i.Op != OpConst32 {
1863 break
1864 }
1865 t := i.Type
1866 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1867 break
1868 }
1869 v.reset(OpAdd32)
1870 v.AddArg(i)
1871 v0 := b.NewValue0(v.Pos, OpAdd32, t)
1872 v0.AddArg(z)
1873 v0.AddArg(x)
1874 v.AddArg(v0)
1875 return true
1876 }
1877
1878
1879
1880 for {
1881 x := v.Args[1]
1882 v_0 := v.Args[0]
1883 if v_0.Op != OpSub32 {
1884 break
1885 }
1886 z := v_0.Args[1]
1887 i := v_0.Args[0]
1888 if i.Op != OpConst32 {
1889 break
1890 }
1891 t := i.Type
1892 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1893 break
1894 }
1895 v.reset(OpAdd32)
1896 v.AddArg(i)
1897 v0 := b.NewValue0(v.Pos, OpSub32, t)
1898 v0.AddArg(x)
1899 v0.AddArg(z)
1900 v.AddArg(v0)
1901 return true
1902 }
1903
1904
1905
1906 for {
1907 _ = v.Args[1]
1908 x := v.Args[0]
1909 v_1 := v.Args[1]
1910 if v_1.Op != OpSub32 {
1911 break
1912 }
1913 z := v_1.Args[1]
1914 i := v_1.Args[0]
1915 if i.Op != OpConst32 {
1916 break
1917 }
1918 t := i.Type
1919 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1920 break
1921 }
1922 v.reset(OpAdd32)
1923 v.AddArg(i)
1924 v0 := b.NewValue0(v.Pos, OpSub32, t)
1925 v0.AddArg(x)
1926 v0.AddArg(z)
1927 v.AddArg(v0)
1928 return true
1929 }
1930 return false
1931 }
1932 func rewriteValuegeneric_OpAdd32_20(v *Value) bool {
1933 b := v.Block
1934
1935
1936
1937 for {
1938 _ = v.Args[1]
1939 x := v.Args[0]
1940 v_1 := v.Args[1]
1941 if v_1.Op != OpSub32 {
1942 break
1943 }
1944 z := v_1.Args[1]
1945 i := v_1.Args[0]
1946 if i.Op != OpConst32 {
1947 break
1948 }
1949 t := i.Type
1950 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1951 break
1952 }
1953 v.reset(OpAdd32)
1954 v.AddArg(i)
1955 v0 := b.NewValue0(v.Pos, OpSub32, t)
1956 v0.AddArg(x)
1957 v0.AddArg(z)
1958 v.AddArg(v0)
1959 return true
1960 }
1961
1962
1963
1964 for {
1965 x := v.Args[1]
1966 v_0 := v.Args[0]
1967 if v_0.Op != OpSub32 {
1968 break
1969 }
1970 z := v_0.Args[1]
1971 i := v_0.Args[0]
1972 if i.Op != OpConst32 {
1973 break
1974 }
1975 t := i.Type
1976 if !(z.Op != OpConst32 && x.Op != OpConst32) {
1977 break
1978 }
1979 v.reset(OpAdd32)
1980 v.AddArg(i)
1981 v0 := b.NewValue0(v.Pos, OpSub32, t)
1982 v0.AddArg(x)
1983 v0.AddArg(z)
1984 v.AddArg(v0)
1985 return true
1986 }
1987
1988
1989
1990 for {
1991 x := v.Args[1]
1992 v_0 := v.Args[0]
1993 if v_0.Op != OpSub32 {
1994 break
1995 }
1996 _ = v_0.Args[1]
1997 z := v_0.Args[0]
1998 i := v_0.Args[1]
1999 if i.Op != OpConst32 {
2000 break
2001 }
2002 t := i.Type
2003 if !(z.Op != OpConst32 && x.Op != OpConst32) {
2004 break
2005 }
2006 v.reset(OpSub32)
2007 v0 := b.NewValue0(v.Pos, OpAdd32, t)
2008 v0.AddArg(x)
2009 v0.AddArg(z)
2010 v.AddArg(v0)
2011 v.AddArg(i)
2012 return true
2013 }
2014
2015
2016
2017 for {
2018 _ = v.Args[1]
2019 x := v.Args[0]
2020 v_1 := v.Args[1]
2021 if v_1.Op != OpSub32 {
2022 break
2023 }
2024 _ = v_1.Args[1]
2025 z := v_1.Args[0]
2026 i := v_1.Args[1]
2027 if i.Op != OpConst32 {
2028 break
2029 }
2030 t := i.Type
2031 if !(z.Op != OpConst32 && x.Op != OpConst32) {
2032 break
2033 }
2034 v.reset(OpSub32)
2035 v0 := b.NewValue0(v.Pos, OpAdd32, t)
2036 v0.AddArg(x)
2037 v0.AddArg(z)
2038 v.AddArg(v0)
2039 v.AddArg(i)
2040 return true
2041 }
2042
2043
2044
2045 for {
2046 _ = v.Args[1]
2047 x := v.Args[0]
2048 v_1 := v.Args[1]
2049 if v_1.Op != OpSub32 {
2050 break
2051 }
2052 _ = v_1.Args[1]
2053 z := v_1.Args[0]
2054 i := v_1.Args[1]
2055 if i.Op != OpConst32 {
2056 break
2057 }
2058 t := i.Type
2059 if !(z.Op != OpConst32 && x.Op != OpConst32) {
2060 break
2061 }
2062 v.reset(OpSub32)
2063 v0 := b.NewValue0(v.Pos, OpAdd32, t)
2064 v0.AddArg(x)
2065 v0.AddArg(z)
2066 v.AddArg(v0)
2067 v.AddArg(i)
2068 return true
2069 }
2070
2071
2072
2073 for {
2074 x := v.Args[1]
2075 v_0 := v.Args[0]
2076 if v_0.Op != OpSub32 {
2077 break
2078 }
2079 _ = v_0.Args[1]
2080 z := v_0.Args[0]
2081 i := v_0.Args[1]
2082 if i.Op != OpConst32 {
2083 break
2084 }
2085 t := i.Type
2086 if !(z.Op != OpConst32 && x.Op != OpConst32) {
2087 break
2088 }
2089 v.reset(OpSub32)
2090 v0 := b.NewValue0(v.Pos, OpAdd32, t)
2091 v0.AddArg(x)
2092 v0.AddArg(z)
2093 v.AddArg(v0)
2094 v.AddArg(i)
2095 return true
2096 }
2097
2098
2099
2100 for {
2101 _ = v.Args[1]
2102 v_0 := v.Args[0]
2103 if v_0.Op != OpConst32 {
2104 break
2105 }
2106 t := v_0.Type
2107 c := v_0.AuxInt
2108 v_1 := v.Args[1]
2109 if v_1.Op != OpAdd32 {
2110 break
2111 }
2112 x := v_1.Args[1]
2113 v_1_0 := v_1.Args[0]
2114 if v_1_0.Op != OpConst32 {
2115 break
2116 }
2117 if v_1_0.Type != t {
2118 break
2119 }
2120 d := v_1_0.AuxInt
2121 v.reset(OpAdd32)
2122 v0 := b.NewValue0(v.Pos, OpConst32, t)
2123 v0.AuxInt = int64(int32(c + d))
2124 v.AddArg(v0)
2125 v.AddArg(x)
2126 return true
2127 }
2128
2129
2130
2131 for {
2132 _ = v.Args[1]
2133 v_0 := v.Args[0]
2134 if v_0.Op != OpConst32 {
2135 break
2136 }
2137 t := v_0.Type
2138 c := v_0.AuxInt
2139 v_1 := v.Args[1]
2140 if v_1.Op != OpAdd32 {
2141 break
2142 }
2143 _ = v_1.Args[1]
2144 x := v_1.Args[0]
2145 v_1_1 := v_1.Args[1]
2146 if v_1_1.Op != OpConst32 {
2147 break
2148 }
2149 if v_1_1.Type != t {
2150 break
2151 }
2152 d := v_1_1.AuxInt
2153 v.reset(OpAdd32)
2154 v0 := b.NewValue0(v.Pos, OpConst32, t)
2155 v0.AuxInt = int64(int32(c + d))
2156 v.AddArg(v0)
2157 v.AddArg(x)
2158 return true
2159 }
2160
2161
2162
2163 for {
2164 _ = v.Args[1]
2165 v_0 := v.Args[0]
2166 if v_0.Op != OpAdd32 {
2167 break
2168 }
2169 x := v_0.Args[1]
2170 v_0_0 := v_0.Args[0]
2171 if v_0_0.Op != OpConst32 {
2172 break
2173 }
2174 t := v_0_0.Type
2175 d := v_0_0.AuxInt
2176 v_1 := v.Args[1]
2177 if v_1.Op != OpConst32 {
2178 break
2179 }
2180 if v_1.Type != t {
2181 break
2182 }
2183 c := v_1.AuxInt
2184 v.reset(OpAdd32)
2185 v0 := b.NewValue0(v.Pos, OpConst32, t)
2186 v0.AuxInt = int64(int32(c + d))
2187 v.AddArg(v0)
2188 v.AddArg(x)
2189 return true
2190 }
2191
2192
2193
2194 for {
2195 _ = v.Args[1]
2196 v_0 := v.Args[0]
2197 if v_0.Op != OpAdd32 {
2198 break
2199 }
2200 _ = v_0.Args[1]
2201 x := v_0.Args[0]
2202 v_0_1 := v_0.Args[1]
2203 if v_0_1.Op != OpConst32 {
2204 break
2205 }
2206 t := v_0_1.Type
2207 d := v_0_1.AuxInt
2208 v_1 := v.Args[1]
2209 if v_1.Op != OpConst32 {
2210 break
2211 }
2212 if v_1.Type != t {
2213 break
2214 }
2215 c := v_1.AuxInt
2216 v.reset(OpAdd32)
2217 v0 := b.NewValue0(v.Pos, OpConst32, t)
2218 v0.AuxInt = int64(int32(c + d))
2219 v.AddArg(v0)
2220 v.AddArg(x)
2221 return true
2222 }
2223 return false
2224 }
2225 func rewriteValuegeneric_OpAdd32_30(v *Value) bool {
2226 b := v.Block
2227
2228
2229
2230 for {
2231 _ = v.Args[1]
2232 v_0 := v.Args[0]
2233 if v_0.Op != OpConst32 {
2234 break
2235 }
2236 t := v_0.Type
2237 c := v_0.AuxInt
2238 v_1 := v.Args[1]
2239 if v_1.Op != OpSub32 {
2240 break
2241 }
2242 x := v_1.Args[1]
2243 v_1_0 := v_1.Args[0]
2244 if v_1_0.Op != OpConst32 {
2245 break
2246 }
2247 if v_1_0.Type != t {
2248 break
2249 }
2250 d := v_1_0.AuxInt
2251 v.reset(OpSub32)
2252 v0 := b.NewValue0(v.Pos, OpConst32, t)
2253 v0.AuxInt = int64(int32(c + d))
2254 v.AddArg(v0)
2255 v.AddArg(x)
2256 return true
2257 }
2258
2259
2260
2261 for {
2262 _ = v.Args[1]
2263 v_0 := v.Args[0]
2264 if v_0.Op != OpSub32 {
2265 break
2266 }
2267 x := v_0.Args[1]
2268 v_0_0 := v_0.Args[0]
2269 if v_0_0.Op != OpConst32 {
2270 break
2271 }
2272 t := v_0_0.Type
2273 d := v_0_0.AuxInt
2274 v_1 := v.Args[1]
2275 if v_1.Op != OpConst32 {
2276 break
2277 }
2278 if v_1.Type != t {
2279 break
2280 }
2281 c := v_1.AuxInt
2282 v.reset(OpSub32)
2283 v0 := b.NewValue0(v.Pos, OpConst32, t)
2284 v0.AuxInt = int64(int32(c + d))
2285 v.AddArg(v0)
2286 v.AddArg(x)
2287 return true
2288 }
2289
2290
2291
2292 for {
2293 _ = v.Args[1]
2294 v_0 := v.Args[0]
2295 if v_0.Op != OpConst32 {
2296 break
2297 }
2298 t := v_0.Type
2299 c := v_0.AuxInt
2300 v_1 := v.Args[1]
2301 if v_1.Op != OpSub32 {
2302 break
2303 }
2304 _ = v_1.Args[1]
2305 x := v_1.Args[0]
2306 v_1_1 := v_1.Args[1]
2307 if v_1_1.Op != OpConst32 {
2308 break
2309 }
2310 if v_1_1.Type != t {
2311 break
2312 }
2313 d := v_1_1.AuxInt
2314 v.reset(OpAdd32)
2315 v0 := b.NewValue0(v.Pos, OpConst32, t)
2316 v0.AuxInt = int64(int32(c - d))
2317 v.AddArg(v0)
2318 v.AddArg(x)
2319 return true
2320 }
2321
2322
2323
2324 for {
2325 _ = v.Args[1]
2326 v_0 := v.Args[0]
2327 if v_0.Op != OpSub32 {
2328 break
2329 }
2330 _ = v_0.Args[1]
2331 x := v_0.Args[0]
2332 v_0_1 := v_0.Args[1]
2333 if v_0_1.Op != OpConst32 {
2334 break
2335 }
2336 t := v_0_1.Type
2337 d := v_0_1.AuxInt
2338 v_1 := v.Args[1]
2339 if v_1.Op != OpConst32 {
2340 break
2341 }
2342 if v_1.Type != t {
2343 break
2344 }
2345 c := v_1.AuxInt
2346 v.reset(OpAdd32)
2347 v0 := b.NewValue0(v.Pos, OpConst32, t)
2348 v0.AuxInt = int64(int32(c - d))
2349 v.AddArg(v0)
2350 v.AddArg(x)
2351 return true
2352 }
2353 return false
2354 }
2355 func rewriteValuegeneric_OpAdd32F_0(v *Value) bool {
2356
2357
2358
2359 for {
2360 _ = v.Args[1]
2361 v_0 := v.Args[0]
2362 if v_0.Op != OpConst32F {
2363 break
2364 }
2365 c := v_0.AuxInt
2366 v_1 := v.Args[1]
2367 if v_1.Op != OpConst32F {
2368 break
2369 }
2370 d := v_1.AuxInt
2371 v.reset(OpConst32F)
2372 v.AuxInt = auxFrom32F(auxTo32F(c) + auxTo32F(d))
2373 return true
2374 }
2375
2376
2377
2378 for {
2379 _ = v.Args[1]
2380 v_0 := v.Args[0]
2381 if v_0.Op != OpConst32F {
2382 break
2383 }
2384 d := v_0.AuxInt
2385 v_1 := v.Args[1]
2386 if v_1.Op != OpConst32F {
2387 break
2388 }
2389 c := v_1.AuxInt
2390 v.reset(OpConst32F)
2391 v.AuxInt = auxFrom32F(auxTo32F(c) + auxTo32F(d))
2392 return true
2393 }
2394 return false
2395 }
2396 func rewriteValuegeneric_OpAdd64_0(v *Value) bool {
2397 b := v.Block
2398
2399
2400
2401 for {
2402 _ = v.Args[1]
2403 v_0 := v.Args[0]
2404 if v_0.Op != OpConst64 {
2405 break
2406 }
2407 c := v_0.AuxInt
2408 v_1 := v.Args[1]
2409 if v_1.Op != OpConst64 {
2410 break
2411 }
2412 d := v_1.AuxInt
2413 v.reset(OpConst64)
2414 v.AuxInt = c + d
2415 return true
2416 }
2417
2418
2419
2420 for {
2421 _ = v.Args[1]
2422 v_0 := v.Args[0]
2423 if v_0.Op != OpConst64 {
2424 break
2425 }
2426 d := v_0.AuxInt
2427 v_1 := v.Args[1]
2428 if v_1.Op != OpConst64 {
2429 break
2430 }
2431 c := v_1.AuxInt
2432 v.reset(OpConst64)
2433 v.AuxInt = c + d
2434 return true
2435 }
2436
2437
2438
2439 for {
2440 t := v.Type
2441 _ = v.Args[1]
2442 v_0 := v.Args[0]
2443 if v_0.Op != OpMul64 {
2444 break
2445 }
2446 y := v_0.Args[1]
2447 x := v_0.Args[0]
2448 v_1 := v.Args[1]
2449 if v_1.Op != OpMul64 {
2450 break
2451 }
2452 z := v_1.Args[1]
2453 if x != v_1.Args[0] {
2454 break
2455 }
2456 v.reset(OpMul64)
2457 v.AddArg(x)
2458 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2459 v0.AddArg(y)
2460 v0.AddArg(z)
2461 v.AddArg(v0)
2462 return true
2463 }
2464
2465
2466
2467 for {
2468 t := v.Type
2469 _ = v.Args[1]
2470 v_0 := v.Args[0]
2471 if v_0.Op != OpMul64 {
2472 break
2473 }
2474 x := v_0.Args[1]
2475 y := v_0.Args[0]
2476 v_1 := v.Args[1]
2477 if v_1.Op != OpMul64 {
2478 break
2479 }
2480 z := v_1.Args[1]
2481 if x != v_1.Args[0] {
2482 break
2483 }
2484 v.reset(OpMul64)
2485 v.AddArg(x)
2486 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2487 v0.AddArg(y)
2488 v0.AddArg(z)
2489 v.AddArg(v0)
2490 return true
2491 }
2492
2493
2494
2495 for {
2496 t := v.Type
2497 _ = v.Args[1]
2498 v_0 := v.Args[0]
2499 if v_0.Op != OpMul64 {
2500 break
2501 }
2502 y := v_0.Args[1]
2503 x := v_0.Args[0]
2504 v_1 := v.Args[1]
2505 if v_1.Op != OpMul64 {
2506 break
2507 }
2508 _ = v_1.Args[1]
2509 z := v_1.Args[0]
2510 if x != v_1.Args[1] {
2511 break
2512 }
2513 v.reset(OpMul64)
2514 v.AddArg(x)
2515 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2516 v0.AddArg(y)
2517 v0.AddArg(z)
2518 v.AddArg(v0)
2519 return true
2520 }
2521
2522
2523
2524 for {
2525 t := v.Type
2526 _ = v.Args[1]
2527 v_0 := v.Args[0]
2528 if v_0.Op != OpMul64 {
2529 break
2530 }
2531 x := v_0.Args[1]
2532 y := v_0.Args[0]
2533 v_1 := v.Args[1]
2534 if v_1.Op != OpMul64 {
2535 break
2536 }
2537 _ = v_1.Args[1]
2538 z := v_1.Args[0]
2539 if x != v_1.Args[1] {
2540 break
2541 }
2542 v.reset(OpMul64)
2543 v.AddArg(x)
2544 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2545 v0.AddArg(y)
2546 v0.AddArg(z)
2547 v.AddArg(v0)
2548 return true
2549 }
2550
2551
2552
2553 for {
2554 t := v.Type
2555 _ = v.Args[1]
2556 v_0 := v.Args[0]
2557 if v_0.Op != OpMul64 {
2558 break
2559 }
2560 z := v_0.Args[1]
2561 x := v_0.Args[0]
2562 v_1 := v.Args[1]
2563 if v_1.Op != OpMul64 {
2564 break
2565 }
2566 y := v_1.Args[1]
2567 if x != v_1.Args[0] {
2568 break
2569 }
2570 v.reset(OpMul64)
2571 v.AddArg(x)
2572 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2573 v0.AddArg(y)
2574 v0.AddArg(z)
2575 v.AddArg(v0)
2576 return true
2577 }
2578
2579
2580
2581 for {
2582 t := v.Type
2583 _ = v.Args[1]
2584 v_0 := v.Args[0]
2585 if v_0.Op != OpMul64 {
2586 break
2587 }
2588 x := v_0.Args[1]
2589 z := v_0.Args[0]
2590 v_1 := v.Args[1]
2591 if v_1.Op != OpMul64 {
2592 break
2593 }
2594 y := v_1.Args[1]
2595 if x != v_1.Args[0] {
2596 break
2597 }
2598 v.reset(OpMul64)
2599 v.AddArg(x)
2600 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2601 v0.AddArg(y)
2602 v0.AddArg(z)
2603 v.AddArg(v0)
2604 return true
2605 }
2606
2607
2608
2609 for {
2610 t := v.Type
2611 _ = v.Args[1]
2612 v_0 := v.Args[0]
2613 if v_0.Op != OpMul64 {
2614 break
2615 }
2616 z := v_0.Args[1]
2617 x := v_0.Args[0]
2618 v_1 := v.Args[1]
2619 if v_1.Op != OpMul64 {
2620 break
2621 }
2622 _ = v_1.Args[1]
2623 y := v_1.Args[0]
2624 if x != v_1.Args[1] {
2625 break
2626 }
2627 v.reset(OpMul64)
2628 v.AddArg(x)
2629 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2630 v0.AddArg(y)
2631 v0.AddArg(z)
2632 v.AddArg(v0)
2633 return true
2634 }
2635
2636
2637
2638 for {
2639 t := v.Type
2640 _ = v.Args[1]
2641 v_0 := v.Args[0]
2642 if v_0.Op != OpMul64 {
2643 break
2644 }
2645 x := v_0.Args[1]
2646 z := v_0.Args[0]
2647 v_1 := v.Args[1]
2648 if v_1.Op != OpMul64 {
2649 break
2650 }
2651 _ = v_1.Args[1]
2652 y := v_1.Args[0]
2653 if x != v_1.Args[1] {
2654 break
2655 }
2656 v.reset(OpMul64)
2657 v.AddArg(x)
2658 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2659 v0.AddArg(y)
2660 v0.AddArg(z)
2661 v.AddArg(v0)
2662 return true
2663 }
2664 return false
2665 }
2666 func rewriteValuegeneric_OpAdd64_10(v *Value) bool {
2667 b := v.Block
2668
2669
2670
2671 for {
2672 x := v.Args[1]
2673 v_0 := v.Args[0]
2674 if v_0.Op != OpConst64 {
2675 break
2676 }
2677 if v_0.AuxInt != 0 {
2678 break
2679 }
2680 v.reset(OpCopy)
2681 v.Type = x.Type
2682 v.AddArg(x)
2683 return true
2684 }
2685
2686
2687
2688 for {
2689 _ = v.Args[1]
2690 x := v.Args[0]
2691 v_1 := v.Args[1]
2692 if v_1.Op != OpConst64 {
2693 break
2694 }
2695 if v_1.AuxInt != 0 {
2696 break
2697 }
2698 v.reset(OpCopy)
2699 v.Type = x.Type
2700 v.AddArg(x)
2701 return true
2702 }
2703
2704
2705
2706 for {
2707 _ = v.Args[1]
2708 v_0 := v.Args[0]
2709 if v_0.Op != OpConst64 {
2710 break
2711 }
2712 if v_0.AuxInt != 1 {
2713 break
2714 }
2715 v_1 := v.Args[1]
2716 if v_1.Op != OpCom64 {
2717 break
2718 }
2719 x := v_1.Args[0]
2720 v.reset(OpNeg64)
2721 v.AddArg(x)
2722 return true
2723 }
2724
2725
2726
2727 for {
2728 _ = v.Args[1]
2729 v_0 := v.Args[0]
2730 if v_0.Op != OpCom64 {
2731 break
2732 }
2733 x := v_0.Args[0]
2734 v_1 := v.Args[1]
2735 if v_1.Op != OpConst64 {
2736 break
2737 }
2738 if v_1.AuxInt != 1 {
2739 break
2740 }
2741 v.reset(OpNeg64)
2742 v.AddArg(x)
2743 return true
2744 }
2745
2746
2747
2748 for {
2749 x := v.Args[1]
2750 v_0 := v.Args[0]
2751 if v_0.Op != OpAdd64 {
2752 break
2753 }
2754 z := v_0.Args[1]
2755 i := v_0.Args[0]
2756 if i.Op != OpConst64 {
2757 break
2758 }
2759 t := i.Type
2760 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2761 break
2762 }
2763 v.reset(OpAdd64)
2764 v.AddArg(i)
2765 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2766 v0.AddArg(z)
2767 v0.AddArg(x)
2768 v.AddArg(v0)
2769 return true
2770 }
2771
2772
2773
2774 for {
2775 x := v.Args[1]
2776 v_0 := v.Args[0]
2777 if v_0.Op != OpAdd64 {
2778 break
2779 }
2780 _ = v_0.Args[1]
2781 z := v_0.Args[0]
2782 i := v_0.Args[1]
2783 if i.Op != OpConst64 {
2784 break
2785 }
2786 t := i.Type
2787 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2788 break
2789 }
2790 v.reset(OpAdd64)
2791 v.AddArg(i)
2792 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2793 v0.AddArg(z)
2794 v0.AddArg(x)
2795 v.AddArg(v0)
2796 return true
2797 }
2798
2799
2800
2801 for {
2802 _ = v.Args[1]
2803 x := v.Args[0]
2804 v_1 := v.Args[1]
2805 if v_1.Op != OpAdd64 {
2806 break
2807 }
2808 z := v_1.Args[1]
2809 i := v_1.Args[0]
2810 if i.Op != OpConst64 {
2811 break
2812 }
2813 t := i.Type
2814 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2815 break
2816 }
2817 v.reset(OpAdd64)
2818 v.AddArg(i)
2819 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2820 v0.AddArg(z)
2821 v0.AddArg(x)
2822 v.AddArg(v0)
2823 return true
2824 }
2825
2826
2827
2828 for {
2829 _ = v.Args[1]
2830 x := v.Args[0]
2831 v_1 := v.Args[1]
2832 if v_1.Op != OpAdd64 {
2833 break
2834 }
2835 _ = v_1.Args[1]
2836 z := v_1.Args[0]
2837 i := v_1.Args[1]
2838 if i.Op != OpConst64 {
2839 break
2840 }
2841 t := i.Type
2842 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2843 break
2844 }
2845 v.reset(OpAdd64)
2846 v.AddArg(i)
2847 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2848 v0.AddArg(z)
2849 v0.AddArg(x)
2850 v.AddArg(v0)
2851 return true
2852 }
2853
2854
2855
2856 for {
2857 x := v.Args[1]
2858 v_0 := v.Args[0]
2859 if v_0.Op != OpSub64 {
2860 break
2861 }
2862 z := v_0.Args[1]
2863 i := v_0.Args[0]
2864 if i.Op != OpConst64 {
2865 break
2866 }
2867 t := i.Type
2868 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2869 break
2870 }
2871 v.reset(OpAdd64)
2872 v.AddArg(i)
2873 v0 := b.NewValue0(v.Pos, OpSub64, t)
2874 v0.AddArg(x)
2875 v0.AddArg(z)
2876 v.AddArg(v0)
2877 return true
2878 }
2879
2880
2881
2882 for {
2883 _ = v.Args[1]
2884 x := v.Args[0]
2885 v_1 := v.Args[1]
2886 if v_1.Op != OpSub64 {
2887 break
2888 }
2889 z := v_1.Args[1]
2890 i := v_1.Args[0]
2891 if i.Op != OpConst64 {
2892 break
2893 }
2894 t := i.Type
2895 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2896 break
2897 }
2898 v.reset(OpAdd64)
2899 v.AddArg(i)
2900 v0 := b.NewValue0(v.Pos, OpSub64, t)
2901 v0.AddArg(x)
2902 v0.AddArg(z)
2903 v.AddArg(v0)
2904 return true
2905 }
2906 return false
2907 }
2908 func rewriteValuegeneric_OpAdd64_20(v *Value) bool {
2909 b := v.Block
2910
2911
2912
2913 for {
2914 _ = v.Args[1]
2915 x := v.Args[0]
2916 v_1 := v.Args[1]
2917 if v_1.Op != OpSub64 {
2918 break
2919 }
2920 z := v_1.Args[1]
2921 i := v_1.Args[0]
2922 if i.Op != OpConst64 {
2923 break
2924 }
2925 t := i.Type
2926 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2927 break
2928 }
2929 v.reset(OpAdd64)
2930 v.AddArg(i)
2931 v0 := b.NewValue0(v.Pos, OpSub64, t)
2932 v0.AddArg(x)
2933 v0.AddArg(z)
2934 v.AddArg(v0)
2935 return true
2936 }
2937
2938
2939
2940 for {
2941 x := v.Args[1]
2942 v_0 := v.Args[0]
2943 if v_0.Op != OpSub64 {
2944 break
2945 }
2946 z := v_0.Args[1]
2947 i := v_0.Args[0]
2948 if i.Op != OpConst64 {
2949 break
2950 }
2951 t := i.Type
2952 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2953 break
2954 }
2955 v.reset(OpAdd64)
2956 v.AddArg(i)
2957 v0 := b.NewValue0(v.Pos, OpSub64, t)
2958 v0.AddArg(x)
2959 v0.AddArg(z)
2960 v.AddArg(v0)
2961 return true
2962 }
2963
2964
2965
2966 for {
2967 x := v.Args[1]
2968 v_0 := v.Args[0]
2969 if v_0.Op != OpSub64 {
2970 break
2971 }
2972 _ = v_0.Args[1]
2973 z := v_0.Args[0]
2974 i := v_0.Args[1]
2975 if i.Op != OpConst64 {
2976 break
2977 }
2978 t := i.Type
2979 if !(z.Op != OpConst64 && x.Op != OpConst64) {
2980 break
2981 }
2982 v.reset(OpSub64)
2983 v0 := b.NewValue0(v.Pos, OpAdd64, t)
2984 v0.AddArg(x)
2985 v0.AddArg(z)
2986 v.AddArg(v0)
2987 v.AddArg(i)
2988 return true
2989 }
2990
2991
2992
2993 for {
2994 _ = v.Args[1]
2995 x := v.Args[0]
2996 v_1 := v.Args[1]
2997 if v_1.Op != OpSub64 {
2998 break
2999 }
3000 _ = v_1.Args[1]
3001 z := v_1.Args[0]
3002 i := v_1.Args[1]
3003 if i.Op != OpConst64 {
3004 break
3005 }
3006 t := i.Type
3007 if !(z.Op != OpConst64 && x.Op != OpConst64) {
3008 break
3009 }
3010 v.reset(OpSub64)
3011 v0 := b.NewValue0(v.Pos, OpAdd64, t)
3012 v0.AddArg(x)
3013 v0.AddArg(z)
3014 v.AddArg(v0)
3015 v.AddArg(i)
3016 return true
3017 }
3018
3019
3020
3021 for {
3022 _ = v.Args[1]
3023 x := v.Args[0]
3024 v_1 := v.Args[1]
3025 if v_1.Op != OpSub64 {
3026 break
3027 }
3028 _ = v_1.Args[1]
3029 z := v_1.Args[0]
3030 i := v_1.Args[1]
3031 if i.Op != OpConst64 {
3032 break
3033 }
3034 t := i.Type
3035 if !(z.Op != OpConst64 && x.Op != OpConst64) {
3036 break
3037 }
3038 v.reset(OpSub64)
3039 v0 := b.NewValue0(v.Pos, OpAdd64, t)
3040 v0.AddArg(x)
3041 v0.AddArg(z)
3042 v.AddArg(v0)
3043 v.AddArg(i)
3044 return true
3045 }
3046
3047
3048
3049 for {
3050 x := v.Args[1]
3051 v_0 := v.Args[0]
3052 if v_0.Op != OpSub64 {
3053 break
3054 }
3055 _ = v_0.Args[1]
3056 z := v_0.Args[0]
3057 i := v_0.Args[1]
3058 if i.Op != OpConst64 {
3059 break
3060 }
3061 t := i.Type
3062 if !(z.Op != OpConst64 && x.Op != OpConst64) {
3063 break
3064 }
3065 v.reset(OpSub64)
3066 v0 := b.NewValue0(v.Pos, OpAdd64, t)
3067 v0.AddArg(x)
3068 v0.AddArg(z)
3069 v.AddArg(v0)
3070 v.AddArg(i)
3071 return true
3072 }
3073
3074
3075
3076 for {
3077 _ = v.Args[1]
3078 v_0 := v.Args[0]
3079 if v_0.Op != OpConst64 {
3080 break
3081 }
3082 t := v_0.Type
3083 c := v_0.AuxInt
3084 v_1 := v.Args[1]
3085 if v_1.Op != OpAdd64 {
3086 break
3087 }
3088 x := v_1.Args[1]
3089 v_1_0 := v_1.Args[0]
3090 if v_1_0.Op != OpConst64 {
3091 break
3092 }
3093 if v_1_0.Type != t {
3094 break
3095 }
3096 d := v_1_0.AuxInt
3097 v.reset(OpAdd64)
3098 v0 := b.NewValue0(v.Pos, OpConst64, t)
3099 v0.AuxInt = c + d
3100 v.AddArg(v0)
3101 v.AddArg(x)
3102 return true
3103 }
3104
3105
3106
3107 for {
3108 _ = v.Args[1]
3109 v_0 := v.Args[0]
3110 if v_0.Op != OpConst64 {
3111 break
3112 }
3113 t := v_0.Type
3114 c := v_0.AuxInt
3115 v_1 := v.Args[1]
3116 if v_1.Op != OpAdd64 {
3117 break
3118 }
3119 _ = v_1.Args[1]
3120 x := v_1.Args[0]
3121 v_1_1 := v_1.Args[1]
3122 if v_1_1.Op != OpConst64 {
3123 break
3124 }
3125 if v_1_1.Type != t {
3126 break
3127 }
3128 d := v_1_1.AuxInt
3129 v.reset(OpAdd64)
3130 v0 := b.NewValue0(v.Pos, OpConst64, t)
3131 v0.AuxInt = c + d
3132 v.AddArg(v0)
3133 v.AddArg(x)
3134 return true
3135 }
3136
3137
3138
3139 for {
3140 _ = v.Args[1]
3141 v_0 := v.Args[0]
3142 if v_0.Op != OpAdd64 {
3143 break
3144 }
3145 x := v_0.Args[1]
3146 v_0_0 := v_0.Args[0]
3147 if v_0_0.Op != OpConst64 {
3148 break
3149 }
3150 t := v_0_0.Type
3151 d := v_0_0.AuxInt
3152 v_1 := v.Args[1]
3153 if v_1.Op != OpConst64 {
3154 break
3155 }
3156 if v_1.Type != t {
3157 break
3158 }
3159 c := v_1.AuxInt
3160 v.reset(OpAdd64)
3161 v0 := b.NewValue0(v.Pos, OpConst64, t)
3162 v0.AuxInt = c + d
3163 v.AddArg(v0)
3164 v.AddArg(x)
3165 return true
3166 }
3167
3168
3169
3170 for {
3171 _ = v.Args[1]
3172 v_0 := v.Args[0]
3173 if v_0.Op != OpAdd64 {
3174 break
3175 }
3176 _ = v_0.Args[1]
3177 x := v_0.Args[0]
3178 v_0_1 := v_0.Args[1]
3179 if v_0_1.Op != OpConst64 {
3180 break
3181 }
3182 t := v_0_1.Type
3183 d := v_0_1.AuxInt
3184 v_1 := v.Args[1]
3185 if v_1.Op != OpConst64 {
3186 break
3187 }
3188 if v_1.Type != t {
3189 break
3190 }
3191 c := v_1.AuxInt
3192 v.reset(OpAdd64)
3193 v0 := b.NewValue0(v.Pos, OpConst64, t)
3194 v0.AuxInt = c + d
3195 v.AddArg(v0)
3196 v.AddArg(x)
3197 return true
3198 }
3199 return false
3200 }
3201 func rewriteValuegeneric_OpAdd64_30(v *Value) bool {
3202 b := v.Block
3203
3204
3205
3206 for {
3207 _ = v.Args[1]
3208 v_0 := v.Args[0]
3209 if v_0.Op != OpConst64 {
3210 break
3211 }
3212 t := v_0.Type
3213 c := v_0.AuxInt
3214 v_1 := v.Args[1]
3215 if v_1.Op != OpSub64 {
3216 break
3217 }
3218 x := v_1.Args[1]
3219 v_1_0 := v_1.Args[0]
3220 if v_1_0.Op != OpConst64 {
3221 break
3222 }
3223 if v_1_0.Type != t {
3224 break
3225 }
3226 d := v_1_0.AuxInt
3227 v.reset(OpSub64)
3228 v0 := b.NewValue0(v.Pos, OpConst64, t)
3229 v0.AuxInt = c + d
3230 v.AddArg(v0)
3231 v.AddArg(x)
3232 return true
3233 }
3234
3235
3236
3237 for {
3238 _ = v.Args[1]
3239 v_0 := v.Args[0]
3240 if v_0.Op != OpSub64 {
3241 break
3242 }
3243 x := v_0.Args[1]
3244 v_0_0 := v_0.Args[0]
3245 if v_0_0.Op != OpConst64 {
3246 break
3247 }
3248 t := v_0_0.Type
3249 d := v_0_0.AuxInt
3250 v_1 := v.Args[1]
3251 if v_1.Op != OpConst64 {
3252 break
3253 }
3254 if v_1.Type != t {
3255 break
3256 }
3257 c := v_1.AuxInt
3258 v.reset(OpSub64)
3259 v0 := b.NewValue0(v.Pos, OpConst64, t)
3260 v0.AuxInt = c + d
3261 v.AddArg(v0)
3262 v.AddArg(x)
3263 return true
3264 }
3265
3266
3267
3268 for {
3269 _ = v.Args[1]
3270 v_0 := v.Args[0]
3271 if v_0.Op != OpConst64 {
3272 break
3273 }
3274 t := v_0.Type
3275 c := v_0.AuxInt
3276 v_1 := v.Args[1]
3277 if v_1.Op != OpSub64 {
3278 break
3279 }
3280 _ = v_1.Args[1]
3281 x := v_1.Args[0]
3282 v_1_1 := v_1.Args[1]
3283 if v_1_1.Op != OpConst64 {
3284 break
3285 }
3286 if v_1_1.Type != t {
3287 break
3288 }
3289 d := v_1_1.AuxInt
3290 v.reset(OpAdd64)
3291 v0 := b.NewValue0(v.Pos, OpConst64, t)
3292 v0.AuxInt = c - d
3293 v.AddArg(v0)
3294 v.AddArg(x)
3295 return true
3296 }
3297
3298
3299
3300 for {
3301 _ = v.Args[1]
3302 v_0 := v.Args[0]
3303 if v_0.Op != OpSub64 {
3304 break
3305 }
3306 _ = v_0.Args[1]
3307 x := v_0.Args[0]
3308 v_0_1 := v_0.Args[1]
3309 if v_0_1.Op != OpConst64 {
3310 break
3311 }
3312 t := v_0_1.Type
3313 d := v_0_1.AuxInt
3314 v_1 := v.Args[1]
3315 if v_1.Op != OpConst64 {
3316 break
3317 }
3318 if v_1.Type != t {
3319 break
3320 }
3321 c := v_1.AuxInt
3322 v.reset(OpAdd64)
3323 v0 := b.NewValue0(v.Pos, OpConst64, t)
3324 v0.AuxInt = c - d
3325 v.AddArg(v0)
3326 v.AddArg(x)
3327 return true
3328 }
3329 return false
3330 }
3331 func rewriteValuegeneric_OpAdd64F_0(v *Value) bool {
3332
3333
3334
3335 for {
3336 _ = v.Args[1]
3337 v_0 := v.Args[0]
3338 if v_0.Op != OpConst64F {
3339 break
3340 }
3341 c := v_0.AuxInt
3342 v_1 := v.Args[1]
3343 if v_1.Op != OpConst64F {
3344 break
3345 }
3346 d := v_1.AuxInt
3347 v.reset(OpConst64F)
3348 v.AuxInt = auxFrom64F(auxTo64F(c) + auxTo64F(d))
3349 return true
3350 }
3351
3352
3353
3354 for {
3355 _ = v.Args[1]
3356 v_0 := v.Args[0]
3357 if v_0.Op != OpConst64F {
3358 break
3359 }
3360 d := v_0.AuxInt
3361 v_1 := v.Args[1]
3362 if v_1.Op != OpConst64F {
3363 break
3364 }
3365 c := v_1.AuxInt
3366 v.reset(OpConst64F)
3367 v.AuxInt = auxFrom64F(auxTo64F(c) + auxTo64F(d))
3368 return true
3369 }
3370 return false
3371 }
3372 func rewriteValuegeneric_OpAdd8_0(v *Value) bool {
3373 b := v.Block
3374
3375
3376
3377 for {
3378 _ = v.Args[1]
3379 v_0 := v.Args[0]
3380 if v_0.Op != OpConst8 {
3381 break
3382 }
3383 c := v_0.AuxInt
3384 v_1 := v.Args[1]
3385 if v_1.Op != OpConst8 {
3386 break
3387 }
3388 d := v_1.AuxInt
3389 v.reset(OpConst8)
3390 v.AuxInt = int64(int8(c + d))
3391 return true
3392 }
3393
3394
3395
3396 for {
3397 _ = v.Args[1]
3398 v_0 := v.Args[0]
3399 if v_0.Op != OpConst8 {
3400 break
3401 }
3402 d := v_0.AuxInt
3403 v_1 := v.Args[1]
3404 if v_1.Op != OpConst8 {
3405 break
3406 }
3407 c := v_1.AuxInt
3408 v.reset(OpConst8)
3409 v.AuxInt = int64(int8(c + d))
3410 return true
3411 }
3412
3413
3414
3415 for {
3416 t := v.Type
3417 _ = v.Args[1]
3418 v_0 := v.Args[0]
3419 if v_0.Op != OpMul8 {
3420 break
3421 }
3422 y := v_0.Args[1]
3423 x := v_0.Args[0]
3424 v_1 := v.Args[1]
3425 if v_1.Op != OpMul8 {
3426 break
3427 }
3428 z := v_1.Args[1]
3429 if x != v_1.Args[0] {
3430 break
3431 }
3432 v.reset(OpMul8)
3433 v.AddArg(x)
3434 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3435 v0.AddArg(y)
3436 v0.AddArg(z)
3437 v.AddArg(v0)
3438 return true
3439 }
3440
3441
3442
3443 for {
3444 t := v.Type
3445 _ = v.Args[1]
3446 v_0 := v.Args[0]
3447 if v_0.Op != OpMul8 {
3448 break
3449 }
3450 x := v_0.Args[1]
3451 y := v_0.Args[0]
3452 v_1 := v.Args[1]
3453 if v_1.Op != OpMul8 {
3454 break
3455 }
3456 z := v_1.Args[1]
3457 if x != v_1.Args[0] {
3458 break
3459 }
3460 v.reset(OpMul8)
3461 v.AddArg(x)
3462 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3463 v0.AddArg(y)
3464 v0.AddArg(z)
3465 v.AddArg(v0)
3466 return true
3467 }
3468
3469
3470
3471 for {
3472 t := v.Type
3473 _ = v.Args[1]
3474 v_0 := v.Args[0]
3475 if v_0.Op != OpMul8 {
3476 break
3477 }
3478 y := v_0.Args[1]
3479 x := v_0.Args[0]
3480 v_1 := v.Args[1]
3481 if v_1.Op != OpMul8 {
3482 break
3483 }
3484 _ = v_1.Args[1]
3485 z := v_1.Args[0]
3486 if x != v_1.Args[1] {
3487 break
3488 }
3489 v.reset(OpMul8)
3490 v.AddArg(x)
3491 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3492 v0.AddArg(y)
3493 v0.AddArg(z)
3494 v.AddArg(v0)
3495 return true
3496 }
3497
3498
3499
3500 for {
3501 t := v.Type
3502 _ = v.Args[1]
3503 v_0 := v.Args[0]
3504 if v_0.Op != OpMul8 {
3505 break
3506 }
3507 x := v_0.Args[1]
3508 y := v_0.Args[0]
3509 v_1 := v.Args[1]
3510 if v_1.Op != OpMul8 {
3511 break
3512 }
3513 _ = v_1.Args[1]
3514 z := v_1.Args[0]
3515 if x != v_1.Args[1] {
3516 break
3517 }
3518 v.reset(OpMul8)
3519 v.AddArg(x)
3520 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3521 v0.AddArg(y)
3522 v0.AddArg(z)
3523 v.AddArg(v0)
3524 return true
3525 }
3526
3527
3528
3529 for {
3530 t := v.Type
3531 _ = v.Args[1]
3532 v_0 := v.Args[0]
3533 if v_0.Op != OpMul8 {
3534 break
3535 }
3536 z := v_0.Args[1]
3537 x := v_0.Args[0]
3538 v_1 := v.Args[1]
3539 if v_1.Op != OpMul8 {
3540 break
3541 }
3542 y := v_1.Args[1]
3543 if x != v_1.Args[0] {
3544 break
3545 }
3546 v.reset(OpMul8)
3547 v.AddArg(x)
3548 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3549 v0.AddArg(y)
3550 v0.AddArg(z)
3551 v.AddArg(v0)
3552 return true
3553 }
3554
3555
3556
3557 for {
3558 t := v.Type
3559 _ = v.Args[1]
3560 v_0 := v.Args[0]
3561 if v_0.Op != OpMul8 {
3562 break
3563 }
3564 x := v_0.Args[1]
3565 z := v_0.Args[0]
3566 v_1 := v.Args[1]
3567 if v_1.Op != OpMul8 {
3568 break
3569 }
3570 y := v_1.Args[1]
3571 if x != v_1.Args[0] {
3572 break
3573 }
3574 v.reset(OpMul8)
3575 v.AddArg(x)
3576 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3577 v0.AddArg(y)
3578 v0.AddArg(z)
3579 v.AddArg(v0)
3580 return true
3581 }
3582
3583
3584
3585 for {
3586 t := v.Type
3587 _ = v.Args[1]
3588 v_0 := v.Args[0]
3589 if v_0.Op != OpMul8 {
3590 break
3591 }
3592 z := v_0.Args[1]
3593 x := v_0.Args[0]
3594 v_1 := v.Args[1]
3595 if v_1.Op != OpMul8 {
3596 break
3597 }
3598 _ = v_1.Args[1]
3599 y := v_1.Args[0]
3600 if x != v_1.Args[1] {
3601 break
3602 }
3603 v.reset(OpMul8)
3604 v.AddArg(x)
3605 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3606 v0.AddArg(y)
3607 v0.AddArg(z)
3608 v.AddArg(v0)
3609 return true
3610 }
3611
3612
3613
3614 for {
3615 t := v.Type
3616 _ = v.Args[1]
3617 v_0 := v.Args[0]
3618 if v_0.Op != OpMul8 {
3619 break
3620 }
3621 x := v_0.Args[1]
3622 z := v_0.Args[0]
3623 v_1 := v.Args[1]
3624 if v_1.Op != OpMul8 {
3625 break
3626 }
3627 _ = v_1.Args[1]
3628 y := v_1.Args[0]
3629 if x != v_1.Args[1] {
3630 break
3631 }
3632 v.reset(OpMul8)
3633 v.AddArg(x)
3634 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3635 v0.AddArg(y)
3636 v0.AddArg(z)
3637 v.AddArg(v0)
3638 return true
3639 }
3640 return false
3641 }
3642 func rewriteValuegeneric_OpAdd8_10(v *Value) bool {
3643 b := v.Block
3644
3645
3646
3647 for {
3648 x := v.Args[1]
3649 v_0 := v.Args[0]
3650 if v_0.Op != OpConst8 {
3651 break
3652 }
3653 if v_0.AuxInt != 0 {
3654 break
3655 }
3656 v.reset(OpCopy)
3657 v.Type = x.Type
3658 v.AddArg(x)
3659 return true
3660 }
3661
3662
3663
3664 for {
3665 _ = v.Args[1]
3666 x := v.Args[0]
3667 v_1 := v.Args[1]
3668 if v_1.Op != OpConst8 {
3669 break
3670 }
3671 if v_1.AuxInt != 0 {
3672 break
3673 }
3674 v.reset(OpCopy)
3675 v.Type = x.Type
3676 v.AddArg(x)
3677 return true
3678 }
3679
3680
3681
3682 for {
3683 _ = v.Args[1]
3684 v_0 := v.Args[0]
3685 if v_0.Op != OpConst8 {
3686 break
3687 }
3688 if v_0.AuxInt != 1 {
3689 break
3690 }
3691 v_1 := v.Args[1]
3692 if v_1.Op != OpCom8 {
3693 break
3694 }
3695 x := v_1.Args[0]
3696 v.reset(OpNeg8)
3697 v.AddArg(x)
3698 return true
3699 }
3700
3701
3702
3703 for {
3704 _ = v.Args[1]
3705 v_0 := v.Args[0]
3706 if v_0.Op != OpCom8 {
3707 break
3708 }
3709 x := v_0.Args[0]
3710 v_1 := v.Args[1]
3711 if v_1.Op != OpConst8 {
3712 break
3713 }
3714 if v_1.AuxInt != 1 {
3715 break
3716 }
3717 v.reset(OpNeg8)
3718 v.AddArg(x)
3719 return true
3720 }
3721
3722
3723
3724 for {
3725 x := v.Args[1]
3726 v_0 := v.Args[0]
3727 if v_0.Op != OpAdd8 {
3728 break
3729 }
3730 z := v_0.Args[1]
3731 i := v_0.Args[0]
3732 if i.Op != OpConst8 {
3733 break
3734 }
3735 t := i.Type
3736 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3737 break
3738 }
3739 v.reset(OpAdd8)
3740 v.AddArg(i)
3741 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3742 v0.AddArg(z)
3743 v0.AddArg(x)
3744 v.AddArg(v0)
3745 return true
3746 }
3747
3748
3749
3750 for {
3751 x := v.Args[1]
3752 v_0 := v.Args[0]
3753 if v_0.Op != OpAdd8 {
3754 break
3755 }
3756 _ = v_0.Args[1]
3757 z := v_0.Args[0]
3758 i := v_0.Args[1]
3759 if i.Op != OpConst8 {
3760 break
3761 }
3762 t := i.Type
3763 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3764 break
3765 }
3766 v.reset(OpAdd8)
3767 v.AddArg(i)
3768 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3769 v0.AddArg(z)
3770 v0.AddArg(x)
3771 v.AddArg(v0)
3772 return true
3773 }
3774
3775
3776
3777 for {
3778 _ = v.Args[1]
3779 x := v.Args[0]
3780 v_1 := v.Args[1]
3781 if v_1.Op != OpAdd8 {
3782 break
3783 }
3784 z := v_1.Args[1]
3785 i := v_1.Args[0]
3786 if i.Op != OpConst8 {
3787 break
3788 }
3789 t := i.Type
3790 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3791 break
3792 }
3793 v.reset(OpAdd8)
3794 v.AddArg(i)
3795 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3796 v0.AddArg(z)
3797 v0.AddArg(x)
3798 v.AddArg(v0)
3799 return true
3800 }
3801
3802
3803
3804 for {
3805 _ = v.Args[1]
3806 x := v.Args[0]
3807 v_1 := v.Args[1]
3808 if v_1.Op != OpAdd8 {
3809 break
3810 }
3811 _ = v_1.Args[1]
3812 z := v_1.Args[0]
3813 i := v_1.Args[1]
3814 if i.Op != OpConst8 {
3815 break
3816 }
3817 t := i.Type
3818 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3819 break
3820 }
3821 v.reset(OpAdd8)
3822 v.AddArg(i)
3823 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3824 v0.AddArg(z)
3825 v0.AddArg(x)
3826 v.AddArg(v0)
3827 return true
3828 }
3829
3830
3831
3832 for {
3833 x := v.Args[1]
3834 v_0 := v.Args[0]
3835 if v_0.Op != OpSub8 {
3836 break
3837 }
3838 z := v_0.Args[1]
3839 i := v_0.Args[0]
3840 if i.Op != OpConst8 {
3841 break
3842 }
3843 t := i.Type
3844 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3845 break
3846 }
3847 v.reset(OpAdd8)
3848 v.AddArg(i)
3849 v0 := b.NewValue0(v.Pos, OpSub8, t)
3850 v0.AddArg(x)
3851 v0.AddArg(z)
3852 v.AddArg(v0)
3853 return true
3854 }
3855
3856
3857
3858 for {
3859 _ = v.Args[1]
3860 x := v.Args[0]
3861 v_1 := v.Args[1]
3862 if v_1.Op != OpSub8 {
3863 break
3864 }
3865 z := v_1.Args[1]
3866 i := v_1.Args[0]
3867 if i.Op != OpConst8 {
3868 break
3869 }
3870 t := i.Type
3871 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3872 break
3873 }
3874 v.reset(OpAdd8)
3875 v.AddArg(i)
3876 v0 := b.NewValue0(v.Pos, OpSub8, t)
3877 v0.AddArg(x)
3878 v0.AddArg(z)
3879 v.AddArg(v0)
3880 return true
3881 }
3882 return false
3883 }
3884 func rewriteValuegeneric_OpAdd8_20(v *Value) bool {
3885 b := v.Block
3886
3887
3888
3889 for {
3890 _ = v.Args[1]
3891 x := v.Args[0]
3892 v_1 := v.Args[1]
3893 if v_1.Op != OpSub8 {
3894 break
3895 }
3896 z := v_1.Args[1]
3897 i := v_1.Args[0]
3898 if i.Op != OpConst8 {
3899 break
3900 }
3901 t := i.Type
3902 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3903 break
3904 }
3905 v.reset(OpAdd8)
3906 v.AddArg(i)
3907 v0 := b.NewValue0(v.Pos, OpSub8, t)
3908 v0.AddArg(x)
3909 v0.AddArg(z)
3910 v.AddArg(v0)
3911 return true
3912 }
3913
3914
3915
3916 for {
3917 x := v.Args[1]
3918 v_0 := v.Args[0]
3919 if v_0.Op != OpSub8 {
3920 break
3921 }
3922 z := v_0.Args[1]
3923 i := v_0.Args[0]
3924 if i.Op != OpConst8 {
3925 break
3926 }
3927 t := i.Type
3928 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3929 break
3930 }
3931 v.reset(OpAdd8)
3932 v.AddArg(i)
3933 v0 := b.NewValue0(v.Pos, OpSub8, t)
3934 v0.AddArg(x)
3935 v0.AddArg(z)
3936 v.AddArg(v0)
3937 return true
3938 }
3939
3940
3941
3942 for {
3943 x := v.Args[1]
3944 v_0 := v.Args[0]
3945 if v_0.Op != OpSub8 {
3946 break
3947 }
3948 _ = v_0.Args[1]
3949 z := v_0.Args[0]
3950 i := v_0.Args[1]
3951 if i.Op != OpConst8 {
3952 break
3953 }
3954 t := i.Type
3955 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3956 break
3957 }
3958 v.reset(OpSub8)
3959 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3960 v0.AddArg(x)
3961 v0.AddArg(z)
3962 v.AddArg(v0)
3963 v.AddArg(i)
3964 return true
3965 }
3966
3967
3968
3969 for {
3970 _ = v.Args[1]
3971 x := v.Args[0]
3972 v_1 := v.Args[1]
3973 if v_1.Op != OpSub8 {
3974 break
3975 }
3976 _ = v_1.Args[1]
3977 z := v_1.Args[0]
3978 i := v_1.Args[1]
3979 if i.Op != OpConst8 {
3980 break
3981 }
3982 t := i.Type
3983 if !(z.Op != OpConst8 && x.Op != OpConst8) {
3984 break
3985 }
3986 v.reset(OpSub8)
3987 v0 := b.NewValue0(v.Pos, OpAdd8, t)
3988 v0.AddArg(x)
3989 v0.AddArg(z)
3990 v.AddArg(v0)
3991 v.AddArg(i)
3992 return true
3993 }
3994
3995
3996
3997 for {
3998 _ = v.Args[1]
3999 x := v.Args[0]
4000 v_1 := v.Args[1]
4001 if v_1.Op != OpSub8 {
4002 break
4003 }
4004 _ = v_1.Args[1]
4005 z := v_1.Args[0]
4006 i := v_1.Args[1]
4007 if i.Op != OpConst8 {
4008 break
4009 }
4010 t := i.Type
4011 if !(z.Op != OpConst8 && x.Op != OpConst8) {
4012 break
4013 }
4014 v.reset(OpSub8)
4015 v0 := b.NewValue0(v.Pos, OpAdd8, t)
4016 v0.AddArg(x)
4017 v0.AddArg(z)
4018 v.AddArg(v0)
4019 v.AddArg(i)
4020 return true
4021 }
4022
4023
4024
4025 for {
4026 x := v.Args[1]
4027 v_0 := v.Args[0]
4028 if v_0.Op != OpSub8 {
4029 break
4030 }
4031 _ = v_0.Args[1]
4032 z := v_0.Args[0]
4033 i := v_0.Args[1]
4034 if i.Op != OpConst8 {
4035 break
4036 }
4037 t := i.Type
4038 if !(z.Op != OpConst8 && x.Op != OpConst8) {
4039 break
4040 }
4041 v.reset(OpSub8)
4042 v0 := b.NewValue0(v.Pos, OpAdd8, t)
4043 v0.AddArg(x)
4044 v0.AddArg(z)
4045 v.AddArg(v0)
4046 v.AddArg(i)
4047 return true
4048 }
4049
4050
4051
4052 for {
4053 _ = v.Args[1]
4054 v_0 := v.Args[0]
4055 if v_0.Op != OpConst8 {
4056 break
4057 }
4058 t := v_0.Type
4059 c := v_0.AuxInt
4060 v_1 := v.Args[1]
4061 if v_1.Op != OpAdd8 {
4062 break
4063 }
4064 x := v_1.Args[1]
4065 v_1_0 := v_1.Args[0]
4066 if v_1_0.Op != OpConst8 {
4067 break
4068 }
4069 if v_1_0.Type != t {
4070 break
4071 }
4072 d := v_1_0.AuxInt
4073 v.reset(OpAdd8)
4074 v0 := b.NewValue0(v.Pos, OpConst8, t)
4075 v0.AuxInt = int64(int8(c + d))
4076 v.AddArg(v0)
4077 v.AddArg(x)
4078 return true
4079 }
4080
4081
4082
4083 for {
4084 _ = v.Args[1]
4085 v_0 := v.Args[0]
4086 if v_0.Op != OpConst8 {
4087 break
4088 }
4089 t := v_0.Type
4090 c := v_0.AuxInt
4091 v_1 := v.Args[1]
4092 if v_1.Op != OpAdd8 {
4093 break
4094 }
4095 _ = v_1.Args[1]
4096 x := v_1.Args[0]
4097 v_1_1 := v_1.Args[1]
4098 if v_1_1.Op != OpConst8 {
4099 break
4100 }
4101 if v_1_1.Type != t {
4102 break
4103 }
4104 d := v_1_1.AuxInt
4105 v.reset(OpAdd8)
4106 v0 := b.NewValue0(v.Pos, OpConst8, t)
4107 v0.AuxInt = int64(int8(c + d))
4108 v.AddArg(v0)
4109 v.AddArg(x)
4110 return true
4111 }
4112
4113
4114
4115 for {
4116 _ = v.Args[1]
4117 v_0 := v.Args[0]
4118 if v_0.Op != OpAdd8 {
4119 break
4120 }
4121 x := v_0.Args[1]
4122 v_0_0 := v_0.Args[0]
4123 if v_0_0.Op != OpConst8 {
4124 break
4125 }
4126 t := v_0_0.Type
4127 d := v_0_0.AuxInt
4128 v_1 := v.Args[1]
4129 if v_1.Op != OpConst8 {
4130 break
4131 }
4132 if v_1.Type != t {
4133 break
4134 }
4135 c := v_1.AuxInt
4136 v.reset(OpAdd8)
4137 v0 := b.NewValue0(v.Pos, OpConst8, t)
4138 v0.AuxInt = int64(int8(c + d))
4139 v.AddArg(v0)
4140 v.AddArg(x)
4141 return true
4142 }
4143
4144
4145
4146 for {
4147 _ = v.Args[1]
4148 v_0 := v.Args[0]
4149 if v_0.Op != OpAdd8 {
4150 break
4151 }
4152 _ = v_0.Args[1]
4153 x := v_0.Args[0]
4154 v_0_1 := v_0.Args[1]
4155 if v_0_1.Op != OpConst8 {
4156 break
4157 }
4158 t := v_0_1.Type
4159 d := v_0_1.AuxInt
4160 v_1 := v.Args[1]
4161 if v_1.Op != OpConst8 {
4162 break
4163 }
4164 if v_1.Type != t {
4165 break
4166 }
4167 c := v_1.AuxInt
4168 v.reset(OpAdd8)
4169 v0 := b.NewValue0(v.Pos, OpConst8, t)
4170 v0.AuxInt = int64(int8(c + d))
4171 v.AddArg(v0)
4172 v.AddArg(x)
4173 return true
4174 }
4175 return false
4176 }
4177 func rewriteValuegeneric_OpAdd8_30(v *Value) bool {
4178 b := v.Block
4179
4180
4181
4182 for {
4183 _ = v.Args[1]
4184 v_0 := v.Args[0]
4185 if v_0.Op != OpConst8 {
4186 break
4187 }
4188 t := v_0.Type
4189 c := v_0.AuxInt
4190 v_1 := v.Args[1]
4191 if v_1.Op != OpSub8 {
4192 break
4193 }
4194 x := v_1.Args[1]
4195 v_1_0 := v_1.Args[0]
4196 if v_1_0.Op != OpConst8 {
4197 break
4198 }
4199 if v_1_0.Type != t {
4200 break
4201 }
4202 d := v_1_0.AuxInt
4203 v.reset(OpSub8)
4204 v0 := b.NewValue0(v.Pos, OpConst8, t)
4205 v0.AuxInt = int64(int8(c + d))
4206 v.AddArg(v0)
4207 v.AddArg(x)
4208 return true
4209 }
4210
4211
4212
4213 for {
4214 _ = v.Args[1]
4215 v_0 := v.Args[0]
4216 if v_0.Op != OpSub8 {
4217 break
4218 }
4219 x := v_0.Args[1]
4220 v_0_0 := v_0.Args[0]
4221 if v_0_0.Op != OpConst8 {
4222 break
4223 }
4224 t := v_0_0.Type
4225 d := v_0_0.AuxInt
4226 v_1 := v.Args[1]
4227 if v_1.Op != OpConst8 {
4228 break
4229 }
4230 if v_1.Type != t {
4231 break
4232 }
4233 c := v_1.AuxInt
4234 v.reset(OpSub8)
4235 v0 := b.NewValue0(v.Pos, OpConst8, t)
4236 v0.AuxInt = int64(int8(c + d))
4237 v.AddArg(v0)
4238 v.AddArg(x)
4239 return true
4240 }
4241
4242
4243
4244 for {
4245 _ = v.Args[1]
4246 v_0 := v.Args[0]
4247 if v_0.Op != OpConst8 {
4248 break
4249 }
4250 t := v_0.Type
4251 c := v_0.AuxInt
4252 v_1 := v.Args[1]
4253 if v_1.Op != OpSub8 {
4254 break
4255 }
4256 _ = v_1.Args[1]
4257 x := v_1.Args[0]
4258 v_1_1 := v_1.Args[1]
4259 if v_1_1.Op != OpConst8 {
4260 break
4261 }
4262 if v_1_1.Type != t {
4263 break
4264 }
4265 d := v_1_1.AuxInt
4266 v.reset(OpAdd8)
4267 v0 := b.NewValue0(v.Pos, OpConst8, t)
4268 v0.AuxInt = int64(int8(c - d))
4269 v.AddArg(v0)
4270 v.AddArg(x)
4271 return true
4272 }
4273
4274
4275
4276 for {
4277 _ = v.Args[1]
4278 v_0 := v.Args[0]
4279 if v_0.Op != OpSub8 {
4280 break
4281 }
4282 _ = v_0.Args[1]
4283 x := v_0.Args[0]
4284 v_0_1 := v_0.Args[1]
4285 if v_0_1.Op != OpConst8 {
4286 break
4287 }
4288 t := v_0_1.Type
4289 d := v_0_1.AuxInt
4290 v_1 := v.Args[1]
4291 if v_1.Op != OpConst8 {
4292 break
4293 }
4294 if v_1.Type != t {
4295 break
4296 }
4297 c := v_1.AuxInt
4298 v.reset(OpAdd8)
4299 v0 := b.NewValue0(v.Pos, OpConst8, t)
4300 v0.AuxInt = int64(int8(c - d))
4301 v.AddArg(v0)
4302 v.AddArg(x)
4303 return true
4304 }
4305 return false
4306 }
4307 func rewriteValuegeneric_OpAddPtr_0(v *Value) bool {
4308
4309
4310
4311 for {
4312 t := v.Type
4313 _ = v.Args[1]
4314 x := v.Args[0]
4315 v_1 := v.Args[1]
4316 if v_1.Op != OpConst64 {
4317 break
4318 }
4319 c := v_1.AuxInt
4320 v.reset(OpOffPtr)
4321 v.Type = t
4322 v.AuxInt = c
4323 v.AddArg(x)
4324 return true
4325 }
4326
4327
4328
4329 for {
4330 t := v.Type
4331 _ = v.Args[1]
4332 x := v.Args[0]
4333 v_1 := v.Args[1]
4334 if v_1.Op != OpConst32 {
4335 break
4336 }
4337 c := v_1.AuxInt
4338 v.reset(OpOffPtr)
4339 v.Type = t
4340 v.AuxInt = c
4341 v.AddArg(x)
4342 return true
4343 }
4344 return false
4345 }
4346 func rewriteValuegeneric_OpAnd16_0(v *Value) bool {
4347
4348
4349
4350 for {
4351 _ = v.Args[1]
4352 v_0 := v.Args[0]
4353 if v_0.Op != OpConst16 {
4354 break
4355 }
4356 c := v_0.AuxInt
4357 v_1 := v.Args[1]
4358 if v_1.Op != OpConst16 {
4359 break
4360 }
4361 d := v_1.AuxInt
4362 v.reset(OpConst16)
4363 v.AuxInt = int64(int16(c & d))
4364 return true
4365 }
4366
4367
4368
4369 for {
4370 _ = v.Args[1]
4371 v_0 := v.Args[0]
4372 if v_0.Op != OpConst16 {
4373 break
4374 }
4375 d := v_0.AuxInt
4376 v_1 := v.Args[1]
4377 if v_1.Op != OpConst16 {
4378 break
4379 }
4380 c := v_1.AuxInt
4381 v.reset(OpConst16)
4382 v.AuxInt = int64(int16(c & d))
4383 return true
4384 }
4385
4386
4387
4388 for {
4389 _ = v.Args[1]
4390 v_0 := v.Args[0]
4391 if v_0.Op != OpConst16 {
4392 break
4393 }
4394 m := v_0.AuxInt
4395 v_1 := v.Args[1]
4396 if v_1.Op != OpRsh16Ux64 {
4397 break
4398 }
4399 _ = v_1.Args[1]
4400 v_1_1 := v_1.Args[1]
4401 if v_1_1.Op != OpConst64 {
4402 break
4403 }
4404 c := v_1_1.AuxInt
4405 if !(c >= 64-ntz(m)) {
4406 break
4407 }
4408 v.reset(OpConst16)
4409 v.AuxInt = 0
4410 return true
4411 }
4412
4413
4414
4415 for {
4416 _ = v.Args[1]
4417 v_0 := v.Args[0]
4418 if v_0.Op != OpRsh16Ux64 {
4419 break
4420 }
4421 _ = v_0.Args[1]
4422 v_0_1 := v_0.Args[1]
4423 if v_0_1.Op != OpConst64 {
4424 break
4425 }
4426 c := v_0_1.AuxInt
4427 v_1 := v.Args[1]
4428 if v_1.Op != OpConst16 {
4429 break
4430 }
4431 m := v_1.AuxInt
4432 if !(c >= 64-ntz(m)) {
4433 break
4434 }
4435 v.reset(OpConst16)
4436 v.AuxInt = 0
4437 return true
4438 }
4439
4440
4441
4442 for {
4443 _ = v.Args[1]
4444 v_0 := v.Args[0]
4445 if v_0.Op != OpConst16 {
4446 break
4447 }
4448 m := v_0.AuxInt
4449 v_1 := v.Args[1]
4450 if v_1.Op != OpLsh16x64 {
4451 break
4452 }
4453 _ = v_1.Args[1]
4454 v_1_1 := v_1.Args[1]
4455 if v_1_1.Op != OpConst64 {
4456 break
4457 }
4458 c := v_1_1.AuxInt
4459 if !(c >= 64-nlz(m)) {
4460 break
4461 }
4462 v.reset(OpConst16)
4463 v.AuxInt = 0
4464 return true
4465 }
4466
4467
4468
4469 for {
4470 _ = v.Args[1]
4471 v_0 := v.Args[0]
4472 if v_0.Op != OpLsh16x64 {
4473 break
4474 }
4475 _ = v_0.Args[1]
4476 v_0_1 := v_0.Args[1]
4477 if v_0_1.Op != OpConst64 {
4478 break
4479 }
4480 c := v_0_1.AuxInt
4481 v_1 := v.Args[1]
4482 if v_1.Op != OpConst16 {
4483 break
4484 }
4485 m := v_1.AuxInt
4486 if !(c >= 64-nlz(m)) {
4487 break
4488 }
4489 v.reset(OpConst16)
4490 v.AuxInt = 0
4491 return true
4492 }
4493
4494
4495
4496 for {
4497 x := v.Args[1]
4498 if x != v.Args[0] {
4499 break
4500 }
4501 v.reset(OpCopy)
4502 v.Type = x.Type
4503 v.AddArg(x)
4504 return true
4505 }
4506
4507
4508
4509 for {
4510 x := v.Args[1]
4511 v_0 := v.Args[0]
4512 if v_0.Op != OpConst16 {
4513 break
4514 }
4515 if v_0.AuxInt != -1 {
4516 break
4517 }
4518 v.reset(OpCopy)
4519 v.Type = x.Type
4520 v.AddArg(x)
4521 return true
4522 }
4523
4524
4525
4526 for {
4527 _ = v.Args[1]
4528 x := v.Args[0]
4529 v_1 := v.Args[1]
4530 if v_1.Op != OpConst16 {
4531 break
4532 }
4533 if v_1.AuxInt != -1 {
4534 break
4535 }
4536 v.reset(OpCopy)
4537 v.Type = x.Type
4538 v.AddArg(x)
4539 return true
4540 }
4541
4542
4543
4544 for {
4545 _ = v.Args[1]
4546 v_0 := v.Args[0]
4547 if v_0.Op != OpConst16 {
4548 break
4549 }
4550 if v_0.AuxInt != 0 {
4551 break
4552 }
4553 v.reset(OpConst16)
4554 v.AuxInt = 0
4555 return true
4556 }
4557 return false
4558 }
4559 func rewriteValuegeneric_OpAnd16_10(v *Value) bool {
4560 b := v.Block
4561
4562
4563
4564 for {
4565 _ = v.Args[1]
4566 v_1 := v.Args[1]
4567 if v_1.Op != OpConst16 {
4568 break
4569 }
4570 if v_1.AuxInt != 0 {
4571 break
4572 }
4573 v.reset(OpConst16)
4574 v.AuxInt = 0
4575 return true
4576 }
4577
4578
4579
4580 for {
4581 _ = v.Args[1]
4582 x := v.Args[0]
4583 v_1 := v.Args[1]
4584 if v_1.Op != OpAnd16 {
4585 break
4586 }
4587 y := v_1.Args[1]
4588 if x != v_1.Args[0] {
4589 break
4590 }
4591 v.reset(OpAnd16)
4592 v.AddArg(x)
4593 v.AddArg(y)
4594 return true
4595 }
4596
4597
4598
4599 for {
4600 _ = v.Args[1]
4601 x := v.Args[0]
4602 v_1 := v.Args[1]
4603 if v_1.Op != OpAnd16 {
4604 break
4605 }
4606 _ = v_1.Args[1]
4607 y := v_1.Args[0]
4608 if x != v_1.Args[1] {
4609 break
4610 }
4611 v.reset(OpAnd16)
4612 v.AddArg(x)
4613 v.AddArg(y)
4614 return true
4615 }
4616
4617
4618
4619 for {
4620 x := v.Args[1]
4621 v_0 := v.Args[0]
4622 if v_0.Op != OpAnd16 {
4623 break
4624 }
4625 y := v_0.Args[1]
4626 if x != v_0.Args[0] {
4627 break
4628 }
4629 v.reset(OpAnd16)
4630 v.AddArg(x)
4631 v.AddArg(y)
4632 return true
4633 }
4634
4635
4636
4637 for {
4638 x := v.Args[1]
4639 v_0 := v.Args[0]
4640 if v_0.Op != OpAnd16 {
4641 break
4642 }
4643 _ = v_0.Args[1]
4644 y := v_0.Args[0]
4645 if x != v_0.Args[1] {
4646 break
4647 }
4648 v.reset(OpAnd16)
4649 v.AddArg(x)
4650 v.AddArg(y)
4651 return true
4652 }
4653
4654
4655
4656 for {
4657 x := v.Args[1]
4658 v_0 := v.Args[0]
4659 if v_0.Op != OpAnd16 {
4660 break
4661 }
4662 z := v_0.Args[1]
4663 i := v_0.Args[0]
4664 if i.Op != OpConst16 {
4665 break
4666 }
4667 t := i.Type
4668 if !(z.Op != OpConst16 && x.Op != OpConst16) {
4669 break
4670 }
4671 v.reset(OpAnd16)
4672 v.AddArg(i)
4673 v0 := b.NewValue0(v.Pos, OpAnd16, t)
4674 v0.AddArg(z)
4675 v0.AddArg(x)
4676 v.AddArg(v0)
4677 return true
4678 }
4679
4680
4681
4682 for {
4683 x := v.Args[1]
4684 v_0 := v.Args[0]
4685 if v_0.Op != OpAnd16 {
4686 break
4687 }
4688 _ = v_0.Args[1]
4689 z := v_0.Args[0]
4690 i := v_0.Args[1]
4691 if i.Op != OpConst16 {
4692 break
4693 }
4694 t := i.Type
4695 if !(z.Op != OpConst16 && x.Op != OpConst16) {
4696 break
4697 }
4698 v.reset(OpAnd16)
4699 v.AddArg(i)
4700 v0 := b.NewValue0(v.Pos, OpAnd16, t)
4701 v0.AddArg(z)
4702 v0.AddArg(x)
4703 v.AddArg(v0)
4704 return true
4705 }
4706
4707
4708
4709 for {
4710 _ = v.Args[1]
4711 x := v.Args[0]
4712 v_1 := v.Args[1]
4713 if v_1.Op != OpAnd16 {
4714 break
4715 }
4716 z := v_1.Args[1]
4717 i := v_1.Args[0]
4718 if i.Op != OpConst16 {
4719 break
4720 }
4721 t := i.Type
4722 if !(z.Op != OpConst16 && x.Op != OpConst16) {
4723 break
4724 }
4725 v.reset(OpAnd16)
4726 v.AddArg(i)
4727 v0 := b.NewValue0(v.Pos, OpAnd16, t)
4728 v0.AddArg(z)
4729 v0.AddArg(x)
4730 v.AddArg(v0)
4731 return true
4732 }
4733
4734
4735
4736 for {
4737 _ = v.Args[1]
4738 x := v.Args[0]
4739 v_1 := v.Args[1]
4740 if v_1.Op != OpAnd16 {
4741 break
4742 }
4743 _ = v_1.Args[1]
4744 z := v_1.Args[0]
4745 i := v_1.Args[1]
4746 if i.Op != OpConst16 {
4747 break
4748 }
4749 t := i.Type
4750 if !(z.Op != OpConst16 && x.Op != OpConst16) {
4751 break
4752 }
4753 v.reset(OpAnd16)
4754 v.AddArg(i)
4755 v0 := b.NewValue0(v.Pos, OpAnd16, t)
4756 v0.AddArg(z)
4757 v0.AddArg(x)
4758 v.AddArg(v0)
4759 return true
4760 }
4761
4762
4763
4764 for {
4765 _ = v.Args[1]
4766 v_0 := v.Args[0]
4767 if v_0.Op != OpConst16 {
4768 break
4769 }
4770 t := v_0.Type
4771 c := v_0.AuxInt
4772 v_1 := v.Args[1]
4773 if v_1.Op != OpAnd16 {
4774 break
4775 }
4776 x := v_1.Args[1]
4777 v_1_0 := v_1.Args[0]
4778 if v_1_0.Op != OpConst16 {
4779 break
4780 }
4781 if v_1_0.Type != t {
4782 break
4783 }
4784 d := v_1_0.AuxInt
4785 v.reset(OpAnd16)
4786 v0 := b.NewValue0(v.Pos, OpConst16, t)
4787 v0.AuxInt = int64(int16(c & d))
4788 v.AddArg(v0)
4789 v.AddArg(x)
4790 return true
4791 }
4792 return false
4793 }
4794 func rewriteValuegeneric_OpAnd16_20(v *Value) bool {
4795 b := v.Block
4796
4797
4798
4799 for {
4800 _ = v.Args[1]
4801 v_0 := v.Args[0]
4802 if v_0.Op != OpConst16 {
4803 break
4804 }
4805 t := v_0.Type
4806 c := v_0.AuxInt
4807 v_1 := v.Args[1]
4808 if v_1.Op != OpAnd16 {
4809 break
4810 }
4811 _ = v_1.Args[1]
4812 x := v_1.Args[0]
4813 v_1_1 := v_1.Args[1]
4814 if v_1_1.Op != OpConst16 {
4815 break
4816 }
4817 if v_1_1.Type != t {
4818 break
4819 }
4820 d := v_1_1.AuxInt
4821 v.reset(OpAnd16)
4822 v0 := b.NewValue0(v.Pos, OpConst16, t)
4823 v0.AuxInt = int64(int16(c & d))
4824 v.AddArg(v0)
4825 v.AddArg(x)
4826 return true
4827 }
4828
4829
4830
4831 for {
4832 _ = v.Args[1]
4833 v_0 := v.Args[0]
4834 if v_0.Op != OpAnd16 {
4835 break
4836 }
4837 x := v_0.Args[1]
4838 v_0_0 := v_0.Args[0]
4839 if v_0_0.Op != OpConst16 {
4840 break
4841 }
4842 t := v_0_0.Type
4843 d := v_0_0.AuxInt
4844 v_1 := v.Args[1]
4845 if v_1.Op != OpConst16 {
4846 break
4847 }
4848 if v_1.Type != t {
4849 break
4850 }
4851 c := v_1.AuxInt
4852 v.reset(OpAnd16)
4853 v0 := b.NewValue0(v.Pos, OpConst16, t)
4854 v0.AuxInt = int64(int16(c & d))
4855 v.AddArg(v0)
4856 v.AddArg(x)
4857 return true
4858 }
4859
4860
4861
4862 for {
4863 _ = v.Args[1]
4864 v_0 := v.Args[0]
4865 if v_0.Op != OpAnd16 {
4866 break
4867 }
4868 _ = v_0.Args[1]
4869 x := v_0.Args[0]
4870 v_0_1 := v_0.Args[1]
4871 if v_0_1.Op != OpConst16 {
4872 break
4873 }
4874 t := v_0_1.Type
4875 d := v_0_1.AuxInt
4876 v_1 := v.Args[1]
4877 if v_1.Op != OpConst16 {
4878 break
4879 }
4880 if v_1.Type != t {
4881 break
4882 }
4883 c := v_1.AuxInt
4884 v.reset(OpAnd16)
4885 v0 := b.NewValue0(v.Pos, OpConst16, t)
4886 v0.AuxInt = int64(int16(c & d))
4887 v.AddArg(v0)
4888 v.AddArg(x)
4889 return true
4890 }
4891 return false
4892 }
4893 func rewriteValuegeneric_OpAnd32_0(v *Value) bool {
4894
4895
4896
4897 for {
4898 _ = v.Args[1]
4899 v_0 := v.Args[0]
4900 if v_0.Op != OpConst32 {
4901 break
4902 }
4903 c := v_0.AuxInt
4904 v_1 := v.Args[1]
4905 if v_1.Op != OpConst32 {
4906 break
4907 }
4908 d := v_1.AuxInt
4909 v.reset(OpConst32)
4910 v.AuxInt = int64(int32(c & d))
4911 return true
4912 }
4913
4914
4915
4916 for {
4917 _ = v.Args[1]
4918 v_0 := v.Args[0]
4919 if v_0.Op != OpConst32 {
4920 break
4921 }
4922 d := v_0.AuxInt
4923 v_1 := v.Args[1]
4924 if v_1.Op != OpConst32 {
4925 break
4926 }
4927 c := v_1.AuxInt
4928 v.reset(OpConst32)
4929 v.AuxInt = int64(int32(c & d))
4930 return true
4931 }
4932
4933
4934
4935 for {
4936 _ = v.Args[1]
4937 v_0 := v.Args[0]
4938 if v_0.Op != OpConst32 {
4939 break
4940 }
4941 m := v_0.AuxInt
4942 v_1 := v.Args[1]
4943 if v_1.Op != OpRsh32Ux64 {
4944 break
4945 }
4946 _ = v_1.Args[1]
4947 v_1_1 := v_1.Args[1]
4948 if v_1_1.Op != OpConst64 {
4949 break
4950 }
4951 c := v_1_1.AuxInt
4952 if !(c >= 64-ntz(m)) {
4953 break
4954 }
4955 v.reset(OpConst32)
4956 v.AuxInt = 0
4957 return true
4958 }
4959
4960
4961
4962 for {
4963 _ = v.Args[1]
4964 v_0 := v.Args[0]
4965 if v_0.Op != OpRsh32Ux64 {
4966 break
4967 }
4968 _ = v_0.Args[1]
4969 v_0_1 := v_0.Args[1]
4970 if v_0_1.Op != OpConst64 {
4971 break
4972 }
4973 c := v_0_1.AuxInt
4974 v_1 := v.Args[1]
4975 if v_1.Op != OpConst32 {
4976 break
4977 }
4978 m := v_1.AuxInt
4979 if !(c >= 64-ntz(m)) {
4980 break
4981 }
4982 v.reset(OpConst32)
4983 v.AuxInt = 0
4984 return true
4985 }
4986
4987
4988
4989 for {
4990 _ = v.Args[1]
4991 v_0 := v.Args[0]
4992 if v_0.Op != OpConst32 {
4993 break
4994 }
4995 m := v_0.AuxInt
4996 v_1 := v.Args[1]
4997 if v_1.Op != OpLsh32x64 {
4998 break
4999 }
5000 _ = v_1.Args[1]
5001 v_1_1 := v_1.Args[1]
5002 if v_1_1.Op != OpConst64 {
5003 break
5004 }
5005 c := v_1_1.AuxInt
5006 if !(c >= 64-nlz(m)) {
5007 break
5008 }
5009 v.reset(OpConst32)
5010 v.AuxInt = 0
5011 return true
5012 }
5013
5014
5015
5016 for {
5017 _ = v.Args[1]
5018 v_0 := v.Args[0]
5019 if v_0.Op != OpLsh32x64 {
5020 break
5021 }
5022 _ = v_0.Args[1]
5023 v_0_1 := v_0.Args[1]
5024 if v_0_1.Op != OpConst64 {
5025 break
5026 }
5027 c := v_0_1.AuxInt
5028 v_1 := v.Args[1]
5029 if v_1.Op != OpConst32 {
5030 break
5031 }
5032 m := v_1.AuxInt
5033 if !(c >= 64-nlz(m)) {
5034 break
5035 }
5036 v.reset(OpConst32)
5037 v.AuxInt = 0
5038 return true
5039 }
5040
5041
5042
5043 for {
5044 x := v.Args[1]
5045 if x != v.Args[0] {
5046 break
5047 }
5048 v.reset(OpCopy)
5049 v.Type = x.Type
5050 v.AddArg(x)
5051 return true
5052 }
5053
5054
5055
5056 for {
5057 x := v.Args[1]
5058 v_0 := v.Args[0]
5059 if v_0.Op != OpConst32 {
5060 break
5061 }
5062 if v_0.AuxInt != -1 {
5063 break
5064 }
5065 v.reset(OpCopy)
5066 v.Type = x.Type
5067 v.AddArg(x)
5068 return true
5069 }
5070
5071
5072
5073 for {
5074 _ = v.Args[1]
5075 x := v.Args[0]
5076 v_1 := v.Args[1]
5077 if v_1.Op != OpConst32 {
5078 break
5079 }
5080 if v_1.AuxInt != -1 {
5081 break
5082 }
5083 v.reset(OpCopy)
5084 v.Type = x.Type
5085 v.AddArg(x)
5086 return true
5087 }
5088
5089
5090
5091 for {
5092 _ = v.Args[1]
5093 v_0 := v.Args[0]
5094 if v_0.Op != OpConst32 {
5095 break
5096 }
5097 if v_0.AuxInt != 0 {
5098 break
5099 }
5100 v.reset(OpConst32)
5101 v.AuxInt = 0
5102 return true
5103 }
5104 return false
5105 }
5106 func rewriteValuegeneric_OpAnd32_10(v *Value) bool {
5107 b := v.Block
5108
5109
5110
5111 for {
5112 _ = v.Args[1]
5113 v_1 := v.Args[1]
5114 if v_1.Op != OpConst32 {
5115 break
5116 }
5117 if v_1.AuxInt != 0 {
5118 break
5119 }
5120 v.reset(OpConst32)
5121 v.AuxInt = 0
5122 return true
5123 }
5124
5125
5126
5127 for {
5128 _ = v.Args[1]
5129 x := v.Args[0]
5130 v_1 := v.Args[1]
5131 if v_1.Op != OpAnd32 {
5132 break
5133 }
5134 y := v_1.Args[1]
5135 if x != v_1.Args[0] {
5136 break
5137 }
5138 v.reset(OpAnd32)
5139 v.AddArg(x)
5140 v.AddArg(y)
5141 return true
5142 }
5143
5144
5145
5146 for {
5147 _ = v.Args[1]
5148 x := v.Args[0]
5149 v_1 := v.Args[1]
5150 if v_1.Op != OpAnd32 {
5151 break
5152 }
5153 _ = v_1.Args[1]
5154 y := v_1.Args[0]
5155 if x != v_1.Args[1] {
5156 break
5157 }
5158 v.reset(OpAnd32)
5159 v.AddArg(x)
5160 v.AddArg(y)
5161 return true
5162 }
5163
5164
5165
5166 for {
5167 x := v.Args[1]
5168 v_0 := v.Args[0]
5169 if v_0.Op != OpAnd32 {
5170 break
5171 }
5172 y := v_0.Args[1]
5173 if x != v_0.Args[0] {
5174 break
5175 }
5176 v.reset(OpAnd32)
5177 v.AddArg(x)
5178 v.AddArg(y)
5179 return true
5180 }
5181
5182
5183
5184 for {
5185 x := v.Args[1]
5186 v_0 := v.Args[0]
5187 if v_0.Op != OpAnd32 {
5188 break
5189 }
5190 _ = v_0.Args[1]
5191 y := v_0.Args[0]
5192 if x != v_0.Args[1] {
5193 break
5194 }
5195 v.reset(OpAnd32)
5196 v.AddArg(x)
5197 v.AddArg(y)
5198 return true
5199 }
5200
5201
5202
5203 for {
5204 x := v.Args[1]
5205 v_0 := v.Args[0]
5206 if v_0.Op != OpAnd32 {
5207 break
5208 }
5209 z := v_0.Args[1]
5210 i := v_0.Args[0]
5211 if i.Op != OpConst32 {
5212 break
5213 }
5214 t := i.Type
5215 if !(z.Op != OpConst32 && x.Op != OpConst32) {
5216 break
5217 }
5218 v.reset(OpAnd32)
5219 v.AddArg(i)
5220 v0 := b.NewValue0(v.Pos, OpAnd32, t)
5221 v0.AddArg(z)
5222 v0.AddArg(x)
5223 v.AddArg(v0)
5224 return true
5225 }
5226
5227
5228
5229 for {
5230 x := v.Args[1]
5231 v_0 := v.Args[0]
5232 if v_0.Op != OpAnd32 {
5233 break
5234 }
5235 _ = v_0.Args[1]
5236 z := v_0.Args[0]
5237 i := v_0.Args[1]
5238 if i.Op != OpConst32 {
5239 break
5240 }
5241 t := i.Type
5242 if !(z.Op != OpConst32 && x.Op != OpConst32) {
5243 break
5244 }
5245 v.reset(OpAnd32)
5246 v.AddArg(i)
5247 v0 := b.NewValue0(v.Pos, OpAnd32, t)
5248 v0.AddArg(z)
5249 v0.AddArg(x)
5250 v.AddArg(v0)
5251 return true
5252 }
5253
5254
5255
5256 for {
5257 _ = v.Args[1]
5258 x := v.Args[0]
5259 v_1 := v.Args[1]
5260 if v_1.Op != OpAnd32 {
5261 break
5262 }
5263 z := v_1.Args[1]
5264 i := v_1.Args[0]
5265 if i.Op != OpConst32 {
5266 break
5267 }
5268 t := i.Type
5269 if !(z.Op != OpConst32 && x.Op != OpConst32) {
5270 break
5271 }
5272 v.reset(OpAnd32)
5273 v.AddArg(i)
5274 v0 := b.NewValue0(v.Pos, OpAnd32, t)
5275 v0.AddArg(z)
5276 v0.AddArg(x)
5277 v.AddArg(v0)
5278 return true
5279 }
5280
5281
5282
5283 for {
5284 _ = v.Args[1]
5285 x := v.Args[0]
5286 v_1 := v.Args[1]
5287 if v_1.Op != OpAnd32 {
5288 break
5289 }
5290 _ = v_1.Args[1]
5291 z := v_1.Args[0]
5292 i := v_1.Args[1]
5293 if i.Op != OpConst32 {
5294 break
5295 }
5296 t := i.Type
5297 if !(z.Op != OpConst32 && x.Op != OpConst32) {
5298 break
5299 }
5300 v.reset(OpAnd32)
5301 v.AddArg(i)
5302 v0 := b.NewValue0(v.Pos, OpAnd32, t)
5303 v0.AddArg(z)
5304 v0.AddArg(x)
5305 v.AddArg(v0)
5306 return true
5307 }
5308
5309
5310
5311 for {
5312 _ = v.Args[1]
5313 v_0 := v.Args[0]
5314 if v_0.Op != OpConst32 {
5315 break
5316 }
5317 t := v_0.Type
5318 c := v_0.AuxInt
5319 v_1 := v.Args[1]
5320 if v_1.Op != OpAnd32 {
5321 break
5322 }
5323 x := v_1.Args[1]
5324 v_1_0 := v_1.Args[0]
5325 if v_1_0.Op != OpConst32 {
5326 break
5327 }
5328 if v_1_0.Type != t {
5329 break
5330 }
5331 d := v_1_0.AuxInt
5332 v.reset(OpAnd32)
5333 v0 := b.NewValue0(v.Pos, OpConst32, t)
5334 v0.AuxInt = int64(int32(c & d))
5335 v.AddArg(v0)
5336 v.AddArg(x)
5337 return true
5338 }
5339 return false
5340 }
5341 func rewriteValuegeneric_OpAnd32_20(v *Value) bool {
5342 b := v.Block
5343
5344
5345
5346 for {
5347 _ = v.Args[1]
5348 v_0 := v.Args[0]
5349 if v_0.Op != OpConst32 {
5350 break
5351 }
5352 t := v_0.Type
5353 c := v_0.AuxInt
5354 v_1 := v.Args[1]
5355 if v_1.Op != OpAnd32 {
5356 break
5357 }
5358 _ = v_1.Args[1]
5359 x := v_1.Args[0]
5360 v_1_1 := v_1.Args[1]
5361 if v_1_1.Op != OpConst32 {
5362 break
5363 }
5364 if v_1_1.Type != t {
5365 break
5366 }
5367 d := v_1_1.AuxInt
5368 v.reset(OpAnd32)
5369 v0 := b.NewValue0(v.Pos, OpConst32, t)
5370 v0.AuxInt = int64(int32(c & d))
5371 v.AddArg(v0)
5372 v.AddArg(x)
5373 return true
5374 }
5375
5376
5377
5378 for {
5379 _ = v.Args[1]
5380 v_0 := v.Args[0]
5381 if v_0.Op != OpAnd32 {
5382 break
5383 }
5384 x := v_0.Args[1]
5385 v_0_0 := v_0.Args[0]
5386 if v_0_0.Op != OpConst32 {
5387 break
5388 }
5389 t := v_0_0.Type
5390 d := v_0_0.AuxInt
5391 v_1 := v.Args[1]
5392 if v_1.Op != OpConst32 {
5393 break
5394 }
5395 if v_1.Type != t {
5396 break
5397 }
5398 c := v_1.AuxInt
5399 v.reset(OpAnd32)
5400 v0 := b.NewValue0(v.Pos, OpConst32, t)
5401 v0.AuxInt = int64(int32(c & d))
5402 v.AddArg(v0)
5403 v.AddArg(x)
5404 return true
5405 }
5406
5407
5408
5409 for {
5410 _ = v.Args[1]
5411 v_0 := v.Args[0]
5412 if v_0.Op != OpAnd32 {
5413 break
5414 }
5415 _ = v_0.Args[1]
5416 x := v_0.Args[0]
5417 v_0_1 := v_0.Args[1]
5418 if v_0_1.Op != OpConst32 {
5419 break
5420 }
5421 t := v_0_1.Type
5422 d := v_0_1.AuxInt
5423 v_1 := v.Args[1]
5424 if v_1.Op != OpConst32 {
5425 break
5426 }
5427 if v_1.Type != t {
5428 break
5429 }
5430 c := v_1.AuxInt
5431 v.reset(OpAnd32)
5432 v0 := b.NewValue0(v.Pos, OpConst32, t)
5433 v0.AuxInt = int64(int32(c & d))
5434 v.AddArg(v0)
5435 v.AddArg(x)
5436 return true
5437 }
5438 return false
5439 }
5440 func rewriteValuegeneric_OpAnd64_0(v *Value) bool {
5441
5442
5443
5444 for {
5445 _ = v.Args[1]
5446 v_0 := v.Args[0]
5447 if v_0.Op != OpConst64 {
5448 break
5449 }
5450 c := v_0.AuxInt
5451 v_1 := v.Args[1]
5452 if v_1.Op != OpConst64 {
5453 break
5454 }
5455 d := v_1.AuxInt
5456 v.reset(OpConst64)
5457 v.AuxInt = c & d
5458 return true
5459 }
5460
5461
5462
5463 for {
5464 _ = v.Args[1]
5465 v_0 := v.Args[0]
5466 if v_0.Op != OpConst64 {
5467 break
5468 }
5469 d := v_0.AuxInt
5470 v_1 := v.Args[1]
5471 if v_1.Op != OpConst64 {
5472 break
5473 }
5474 c := v_1.AuxInt
5475 v.reset(OpConst64)
5476 v.AuxInt = c & d
5477 return true
5478 }
5479
5480
5481
5482 for {
5483 _ = v.Args[1]
5484 v_0 := v.Args[0]
5485 if v_0.Op != OpConst64 {
5486 break
5487 }
5488 m := v_0.AuxInt
5489 v_1 := v.Args[1]
5490 if v_1.Op != OpRsh64Ux64 {
5491 break
5492 }
5493 _ = v_1.Args[1]
5494 v_1_1 := v_1.Args[1]
5495 if v_1_1.Op != OpConst64 {
5496 break
5497 }
5498 c := v_1_1.AuxInt
5499 if !(c >= 64-ntz(m)) {
5500 break
5501 }
5502 v.reset(OpConst64)
5503 v.AuxInt = 0
5504 return true
5505 }
5506
5507
5508
5509 for {
5510 _ = v.Args[1]
5511 v_0 := v.Args[0]
5512 if v_0.Op != OpRsh64Ux64 {
5513 break
5514 }
5515 _ = v_0.Args[1]
5516 v_0_1 := v_0.Args[1]
5517 if v_0_1.Op != OpConst64 {
5518 break
5519 }
5520 c := v_0_1.AuxInt
5521 v_1 := v.Args[1]
5522 if v_1.Op != OpConst64 {
5523 break
5524 }
5525 m := v_1.AuxInt
5526 if !(c >= 64-ntz(m)) {
5527 break
5528 }
5529 v.reset(OpConst64)
5530 v.AuxInt = 0
5531 return true
5532 }
5533
5534
5535
5536 for {
5537 _ = v.Args[1]
5538 v_0 := v.Args[0]
5539 if v_0.Op != OpConst64 {
5540 break
5541 }
5542 m := v_0.AuxInt
5543 v_1 := v.Args[1]
5544 if v_1.Op != OpLsh64x64 {
5545 break
5546 }
5547 _ = v_1.Args[1]
5548 v_1_1 := v_1.Args[1]
5549 if v_1_1.Op != OpConst64 {
5550 break
5551 }
5552 c := v_1_1.AuxInt
5553 if !(c >= 64-nlz(m)) {
5554 break
5555 }
5556 v.reset(OpConst64)
5557 v.AuxInt = 0
5558 return true
5559 }
5560
5561
5562
5563 for {
5564 _ = v.Args[1]
5565 v_0 := v.Args[0]
5566 if v_0.Op != OpLsh64x64 {
5567 break
5568 }
5569 _ = v_0.Args[1]
5570 v_0_1 := v_0.Args[1]
5571 if v_0_1.Op != OpConst64 {
5572 break
5573 }
5574 c := v_0_1.AuxInt
5575 v_1 := v.Args[1]
5576 if v_1.Op != OpConst64 {
5577 break
5578 }
5579 m := v_1.AuxInt
5580 if !(c >= 64-nlz(m)) {
5581 break
5582 }
5583 v.reset(OpConst64)
5584 v.AuxInt = 0
5585 return true
5586 }
5587
5588
5589
5590 for {
5591 x := v.Args[1]
5592 if x != v.Args[0] {
5593 break
5594 }
5595 v.reset(OpCopy)
5596 v.Type = x.Type
5597 v.AddArg(x)
5598 return true
5599 }
5600
5601
5602
5603 for {
5604 x := v.Args[1]
5605 v_0 := v.Args[0]
5606 if v_0.Op != OpConst64 {
5607 break
5608 }
5609 if v_0.AuxInt != -1 {
5610 break
5611 }
5612 v.reset(OpCopy)
5613 v.Type = x.Type
5614 v.AddArg(x)
5615 return true
5616 }
5617
5618
5619
5620 for {
5621 _ = v.Args[1]
5622 x := v.Args[0]
5623 v_1 := v.Args[1]
5624 if v_1.Op != OpConst64 {
5625 break
5626 }
5627 if v_1.AuxInt != -1 {
5628 break
5629 }
5630 v.reset(OpCopy)
5631 v.Type = x.Type
5632 v.AddArg(x)
5633 return true
5634 }
5635
5636
5637
5638 for {
5639 _ = v.Args[1]
5640 v_0 := v.Args[0]
5641 if v_0.Op != OpConst64 {
5642 break
5643 }
5644 if v_0.AuxInt != 0 {
5645 break
5646 }
5647 v.reset(OpConst64)
5648 v.AuxInt = 0
5649 return true
5650 }
5651 return false
5652 }
5653 func rewriteValuegeneric_OpAnd64_10(v *Value) bool {
5654 b := v.Block
5655
5656
5657
5658 for {
5659 _ = v.Args[1]
5660 v_1 := v.Args[1]
5661 if v_1.Op != OpConst64 {
5662 break
5663 }
5664 if v_1.AuxInt != 0 {
5665 break
5666 }
5667 v.reset(OpConst64)
5668 v.AuxInt = 0
5669 return true
5670 }
5671
5672
5673
5674 for {
5675 _ = v.Args[1]
5676 x := v.Args[0]
5677 v_1 := v.Args[1]
5678 if v_1.Op != OpAnd64 {
5679 break
5680 }
5681 y := v_1.Args[1]
5682 if x != v_1.Args[0] {
5683 break
5684 }
5685 v.reset(OpAnd64)
5686 v.AddArg(x)
5687 v.AddArg(y)
5688 return true
5689 }
5690
5691
5692
5693 for {
5694 _ = v.Args[1]
5695 x := v.Args[0]
5696 v_1 := v.Args[1]
5697 if v_1.Op != OpAnd64 {
5698 break
5699 }
5700 _ = v_1.Args[1]
5701 y := v_1.Args[0]
5702 if x != v_1.Args[1] {
5703 break
5704 }
5705 v.reset(OpAnd64)
5706 v.AddArg(x)
5707 v.AddArg(y)
5708 return true
5709 }
5710
5711
5712
5713 for {
5714 x := v.Args[1]
5715 v_0 := v.Args[0]
5716 if v_0.Op != OpAnd64 {
5717 break
5718 }
5719 y := v_0.Args[1]
5720 if x != v_0.Args[0] {
5721 break
5722 }
5723 v.reset(OpAnd64)
5724 v.AddArg(x)
5725 v.AddArg(y)
5726 return true
5727 }
5728
5729
5730
5731 for {
5732 x := v.Args[1]
5733 v_0 := v.Args[0]
5734 if v_0.Op != OpAnd64 {
5735 break
5736 }
5737 _ = v_0.Args[1]
5738 y := v_0.Args[0]
5739 if x != v_0.Args[1] {
5740 break
5741 }
5742 v.reset(OpAnd64)
5743 v.AddArg(x)
5744 v.AddArg(y)
5745 return true
5746 }
5747
5748
5749
5750 for {
5751 t := v.Type
5752 x := v.Args[1]
5753 v_0 := v.Args[0]
5754 if v_0.Op != OpConst64 {
5755 break
5756 }
5757 y := v_0.AuxInt
5758 if !(nlz(y)+nto(y) == 64 && nto(y) >= 32) {
5759 break
5760 }
5761 v.reset(OpRsh64Ux64)
5762 v0 := b.NewValue0(v.Pos, OpLsh64x64, t)
5763 v0.AddArg(x)
5764 v1 := b.NewValue0(v.Pos, OpConst64, t)
5765 v1.AuxInt = nlz(y)
5766 v0.AddArg(v1)
5767 v.AddArg(v0)
5768 v2 := b.NewValue0(v.Pos, OpConst64, t)
5769 v2.AuxInt = nlz(y)
5770 v.AddArg(v2)
5771 return true
5772 }
5773
5774
5775
5776 for {
5777 t := v.Type
5778 _ = v.Args[1]
5779 x := v.Args[0]
5780 v_1 := v.Args[1]
5781 if v_1.Op != OpConst64 {
5782 break
5783 }
5784 y := v_1.AuxInt
5785 if !(nlz(y)+nto(y) == 64 && nto(y) >= 32) {
5786 break
5787 }
5788 v.reset(OpRsh64Ux64)
5789 v0 := b.NewValue0(v.Pos, OpLsh64x64, t)
5790 v0.AddArg(x)
5791 v1 := b.NewValue0(v.Pos, OpConst64, t)
5792 v1.AuxInt = nlz(y)
5793 v0.AddArg(v1)
5794 v.AddArg(v0)
5795 v2 := b.NewValue0(v.Pos, OpConst64, t)
5796 v2.AuxInt = nlz(y)
5797 v.AddArg(v2)
5798 return true
5799 }
5800
5801
5802
5803 for {
5804 t := v.Type
5805 x := v.Args[1]
5806 v_0 := v.Args[0]
5807 if v_0.Op != OpConst64 {
5808 break
5809 }
5810 y := v_0.AuxInt
5811 if !(nlo(y)+ntz(y) == 64 && ntz(y) >= 32) {
5812 break
5813 }
5814 v.reset(OpLsh64x64)
5815 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, t)
5816 v0.AddArg(x)
5817 v1 := b.NewValue0(v.Pos, OpConst64, t)
5818 v1.AuxInt = ntz(y)
5819 v0.AddArg(v1)
5820 v.AddArg(v0)
5821 v2 := b.NewValue0(v.Pos, OpConst64, t)
5822 v2.AuxInt = ntz(y)
5823 v.AddArg(v2)
5824 return true
5825 }
5826
5827
5828
5829 for {
5830 t := v.Type
5831 _ = v.Args[1]
5832 x := v.Args[0]
5833 v_1 := v.Args[1]
5834 if v_1.Op != OpConst64 {
5835 break
5836 }
5837 y := v_1.AuxInt
5838 if !(nlo(y)+ntz(y) == 64 && ntz(y) >= 32) {
5839 break
5840 }
5841 v.reset(OpLsh64x64)
5842 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, t)
5843 v0.AddArg(x)
5844 v1 := b.NewValue0(v.Pos, OpConst64, t)
5845 v1.AuxInt = ntz(y)
5846 v0.AddArg(v1)
5847 v.AddArg(v0)
5848 v2 := b.NewValue0(v.Pos, OpConst64, t)
5849 v2.AuxInt = ntz(y)
5850 v.AddArg(v2)
5851 return true
5852 }
5853
5854
5855
5856 for {
5857 x := v.Args[1]
5858 v_0 := v.Args[0]
5859 if v_0.Op != OpAnd64 {
5860 break
5861 }
5862 z := v_0.Args[1]
5863 i := v_0.Args[0]
5864 if i.Op != OpConst64 {
5865 break
5866 }
5867 t := i.Type
5868 if !(z.Op != OpConst64 && x.Op != OpConst64) {
5869 break
5870 }
5871 v.reset(OpAnd64)
5872 v.AddArg(i)
5873 v0 := b.NewValue0(v.Pos, OpAnd64, t)
5874 v0.AddArg(z)
5875 v0.AddArg(x)
5876 v.AddArg(v0)
5877 return true
5878 }
5879 return false
5880 }
5881 func rewriteValuegeneric_OpAnd64_20(v *Value) bool {
5882 b := v.Block
5883
5884
5885
5886 for {
5887 x := v.Args[1]
5888 v_0 := v.Args[0]
5889 if v_0.Op != OpAnd64 {
5890 break
5891 }
5892 _ = v_0.Args[1]
5893 z := v_0.Args[0]
5894 i := v_0.Args[1]
5895 if i.Op != OpConst64 {
5896 break
5897 }
5898 t := i.Type
5899 if !(z.Op != OpConst64 && x.Op != OpConst64) {
5900 break
5901 }
5902 v.reset(OpAnd64)
5903 v.AddArg(i)
5904 v0 := b.NewValue0(v.Pos, OpAnd64, t)
5905 v0.AddArg(z)
5906 v0.AddArg(x)
5907 v.AddArg(v0)
5908 return true
5909 }
5910
5911
5912
5913 for {
5914 _ = v.Args[1]
5915 x := v.Args[0]
5916 v_1 := v.Args[1]
5917 if v_1.Op != OpAnd64 {
5918 break
5919 }
5920 z := v_1.Args[1]
5921 i := v_1.Args[0]
5922 if i.Op != OpConst64 {
5923 break
5924 }
5925 t := i.Type
5926 if !(z.Op != OpConst64 && x.Op != OpConst64) {
5927 break
5928 }
5929 v.reset(OpAnd64)
5930 v.AddArg(i)
5931 v0 := b.NewValue0(v.Pos, OpAnd64, t)
5932 v0.AddArg(z)
5933 v0.AddArg(x)
5934 v.AddArg(v0)
5935 return true
5936 }
5937
5938
5939
5940 for {
5941 _ = v.Args[1]
5942 x := v.Args[0]
5943 v_1 := v.Args[1]
5944 if v_1.Op != OpAnd64 {
5945 break
5946 }
5947 _ = v_1.Args[1]
5948 z := v_1.Args[0]
5949 i := v_1.Args[1]
5950 if i.Op != OpConst64 {
5951 break
5952 }
5953 t := i.Type
5954 if !(z.Op != OpConst64 && x.Op != OpConst64) {
5955 break
5956 }
5957 v.reset(OpAnd64)
5958 v.AddArg(i)
5959 v0 := b.NewValue0(v.Pos, OpAnd64, t)
5960 v0.AddArg(z)
5961 v0.AddArg(x)
5962 v.AddArg(v0)
5963 return true
5964 }
5965
5966
5967
5968 for {
5969 _ = v.Args[1]
5970 v_0 := v.Args[0]
5971 if v_0.Op != OpConst64 {
5972 break
5973 }
5974 t := v_0.Type
5975 c := v_0.AuxInt
5976 v_1 := v.Args[1]
5977 if v_1.Op != OpAnd64 {
5978 break
5979 }
5980 x := v_1.Args[1]
5981 v_1_0 := v_1.Args[0]
5982 if v_1_0.Op != OpConst64 {
5983 break
5984 }
5985 if v_1_0.Type != t {
5986 break
5987 }
5988 d := v_1_0.AuxInt
5989 v.reset(OpAnd64)
5990 v0 := b.NewValue0(v.Pos, OpConst64, t)
5991 v0.AuxInt = c & d
5992 v.AddArg(v0)
5993 v.AddArg(x)
5994 return true
5995 }
5996
5997
5998
5999 for {
6000 _ = v.Args[1]
6001 v_0 := v.Args[0]
6002 if v_0.Op != OpConst64 {
6003 break
6004 }
6005 t := v_0.Type
6006 c := v_0.AuxInt
6007 v_1 := v.Args[1]
6008 if v_1.Op != OpAnd64 {
6009 break
6010 }
6011 _ = v_1.Args[1]
6012 x := v_1.Args[0]
6013 v_1_1 := v_1.Args[1]
6014 if v_1_1.Op != OpConst64 {
6015 break
6016 }
6017 if v_1_1.Type != t {
6018 break
6019 }
6020 d := v_1_1.AuxInt
6021 v.reset(OpAnd64)
6022 v0 := b.NewValue0(v.Pos, OpConst64, t)
6023 v0.AuxInt = c & d
6024 v.AddArg(v0)
6025 v.AddArg(x)
6026 return true
6027 }
6028
6029
6030
6031 for {
6032 _ = v.Args[1]
6033 v_0 := v.Args[0]
6034 if v_0.Op != OpAnd64 {
6035 break
6036 }
6037 x := v_0.Args[1]
6038 v_0_0 := v_0.Args[0]
6039 if v_0_0.Op != OpConst64 {
6040 break
6041 }
6042 t := v_0_0.Type
6043 d := v_0_0.AuxInt
6044 v_1 := v.Args[1]
6045 if v_1.Op != OpConst64 {
6046 break
6047 }
6048 if v_1.Type != t {
6049 break
6050 }
6051 c := v_1.AuxInt
6052 v.reset(OpAnd64)
6053 v0 := b.NewValue0(v.Pos, OpConst64, t)
6054 v0.AuxInt = c & d
6055 v.AddArg(v0)
6056 v.AddArg(x)
6057 return true
6058 }
6059
6060
6061
6062 for {
6063 _ = v.Args[1]
6064 v_0 := v.Args[0]
6065 if v_0.Op != OpAnd64 {
6066 break
6067 }
6068 _ = v_0.Args[1]
6069 x := v_0.Args[0]
6070 v_0_1 := v_0.Args[1]
6071 if v_0_1.Op != OpConst64 {
6072 break
6073 }
6074 t := v_0_1.Type
6075 d := v_0_1.AuxInt
6076 v_1 := v.Args[1]
6077 if v_1.Op != OpConst64 {
6078 break
6079 }
6080 if v_1.Type != t {
6081 break
6082 }
6083 c := v_1.AuxInt
6084 v.reset(OpAnd64)
6085 v0 := b.NewValue0(v.Pos, OpConst64, t)
6086 v0.AuxInt = c & d
6087 v.AddArg(v0)
6088 v.AddArg(x)
6089 return true
6090 }
6091 return false
6092 }
6093 func rewriteValuegeneric_OpAnd8_0(v *Value) bool {
6094
6095
6096
6097 for {
6098 _ = v.Args[1]
6099 v_0 := v.Args[0]
6100 if v_0.Op != OpConst8 {
6101 break
6102 }
6103 c := v_0.AuxInt
6104 v_1 := v.Args[1]
6105 if v_1.Op != OpConst8 {
6106 break
6107 }
6108 d := v_1.AuxInt
6109 v.reset(OpConst8)
6110 v.AuxInt = int64(int8(c & d))
6111 return true
6112 }
6113
6114
6115
6116 for {
6117 _ = v.Args[1]
6118 v_0 := v.Args[0]
6119 if v_0.Op != OpConst8 {
6120 break
6121 }
6122 d := v_0.AuxInt
6123 v_1 := v.Args[1]
6124 if v_1.Op != OpConst8 {
6125 break
6126 }
6127 c := v_1.AuxInt
6128 v.reset(OpConst8)
6129 v.AuxInt = int64(int8(c & d))
6130 return true
6131 }
6132
6133
6134
6135 for {
6136 _ = v.Args[1]
6137 v_0 := v.Args[0]
6138 if v_0.Op != OpConst8 {
6139 break
6140 }
6141 m := v_0.AuxInt
6142 v_1 := v.Args[1]
6143 if v_1.Op != OpRsh8Ux64 {
6144 break
6145 }
6146 _ = v_1.Args[1]
6147 v_1_1 := v_1.Args[1]
6148 if v_1_1.Op != OpConst64 {
6149 break
6150 }
6151 c := v_1_1.AuxInt
6152 if !(c >= 64-ntz(m)) {
6153 break
6154 }
6155 v.reset(OpConst8)
6156 v.AuxInt = 0
6157 return true
6158 }
6159
6160
6161
6162 for {
6163 _ = v.Args[1]
6164 v_0 := v.Args[0]
6165 if v_0.Op != OpRsh8Ux64 {
6166 break
6167 }
6168 _ = v_0.Args[1]
6169 v_0_1 := v_0.Args[1]
6170 if v_0_1.Op != OpConst64 {
6171 break
6172 }
6173 c := v_0_1.AuxInt
6174 v_1 := v.Args[1]
6175 if v_1.Op != OpConst8 {
6176 break
6177 }
6178 m := v_1.AuxInt
6179 if !(c >= 64-ntz(m)) {
6180 break
6181 }
6182 v.reset(OpConst8)
6183 v.AuxInt = 0
6184 return true
6185 }
6186
6187
6188
6189 for {
6190 _ = v.Args[1]
6191 v_0 := v.Args[0]
6192 if v_0.Op != OpConst8 {
6193 break
6194 }
6195 m := v_0.AuxInt
6196 v_1 := v.Args[1]
6197 if v_1.Op != OpLsh8x64 {
6198 break
6199 }
6200 _ = v_1.Args[1]
6201 v_1_1 := v_1.Args[1]
6202 if v_1_1.Op != OpConst64 {
6203 break
6204 }
6205 c := v_1_1.AuxInt
6206 if !(c >= 64-nlz(m)) {
6207 break
6208 }
6209 v.reset(OpConst8)
6210 v.AuxInt = 0
6211 return true
6212 }
6213
6214
6215
6216 for {
6217 _ = v.Args[1]
6218 v_0 := v.Args[0]
6219 if v_0.Op != OpLsh8x64 {
6220 break
6221 }
6222 _ = v_0.Args[1]
6223 v_0_1 := v_0.Args[1]
6224 if v_0_1.Op != OpConst64 {
6225 break
6226 }
6227 c := v_0_1.AuxInt
6228 v_1 := v.Args[1]
6229 if v_1.Op != OpConst8 {
6230 break
6231 }
6232 m := v_1.AuxInt
6233 if !(c >= 64-nlz(m)) {
6234 break
6235 }
6236 v.reset(OpConst8)
6237 v.AuxInt = 0
6238 return true
6239 }
6240
6241
6242
6243 for {
6244 x := v.Args[1]
6245 if x != v.Args[0] {
6246 break
6247 }
6248 v.reset(OpCopy)
6249 v.Type = x.Type
6250 v.AddArg(x)
6251 return true
6252 }
6253
6254
6255
6256 for {
6257 x := v.Args[1]
6258 v_0 := v.Args[0]
6259 if v_0.Op != OpConst8 {
6260 break
6261 }
6262 if v_0.AuxInt != -1 {
6263 break
6264 }
6265 v.reset(OpCopy)
6266 v.Type = x.Type
6267 v.AddArg(x)
6268 return true
6269 }
6270
6271
6272
6273 for {
6274 _ = v.Args[1]
6275 x := v.Args[0]
6276 v_1 := v.Args[1]
6277 if v_1.Op != OpConst8 {
6278 break
6279 }
6280 if v_1.AuxInt != -1 {
6281 break
6282 }
6283 v.reset(OpCopy)
6284 v.Type = x.Type
6285 v.AddArg(x)
6286 return true
6287 }
6288
6289
6290
6291 for {
6292 _ = v.Args[1]
6293 v_0 := v.Args[0]
6294 if v_0.Op != OpConst8 {
6295 break
6296 }
6297 if v_0.AuxInt != 0 {
6298 break
6299 }
6300 v.reset(OpConst8)
6301 v.AuxInt = 0
6302 return true
6303 }
6304 return false
6305 }
6306 func rewriteValuegeneric_OpAnd8_10(v *Value) bool {
6307 b := v.Block
6308
6309
6310
6311 for {
6312 _ = v.Args[1]
6313 v_1 := v.Args[1]
6314 if v_1.Op != OpConst8 {
6315 break
6316 }
6317 if v_1.AuxInt != 0 {
6318 break
6319 }
6320 v.reset(OpConst8)
6321 v.AuxInt = 0
6322 return true
6323 }
6324
6325
6326
6327 for {
6328 _ = v.Args[1]
6329 x := v.Args[0]
6330 v_1 := v.Args[1]
6331 if v_1.Op != OpAnd8 {
6332 break
6333 }
6334 y := v_1.Args[1]
6335 if x != v_1.Args[0] {
6336 break
6337 }
6338 v.reset(OpAnd8)
6339 v.AddArg(x)
6340 v.AddArg(y)
6341 return true
6342 }
6343
6344
6345
6346 for {
6347 _ = v.Args[1]
6348 x := v.Args[0]
6349 v_1 := v.Args[1]
6350 if v_1.Op != OpAnd8 {
6351 break
6352 }
6353 _ = v_1.Args[1]
6354 y := v_1.Args[0]
6355 if x != v_1.Args[1] {
6356 break
6357 }
6358 v.reset(OpAnd8)
6359 v.AddArg(x)
6360 v.AddArg(y)
6361 return true
6362 }
6363
6364
6365
6366 for {
6367 x := v.Args[1]
6368 v_0 := v.Args[0]
6369 if v_0.Op != OpAnd8 {
6370 break
6371 }
6372 y := v_0.Args[1]
6373 if x != v_0.Args[0] {
6374 break
6375 }
6376 v.reset(OpAnd8)
6377 v.AddArg(x)
6378 v.AddArg(y)
6379 return true
6380 }
6381
6382
6383
6384 for {
6385 x := v.Args[1]
6386 v_0 := v.Args[0]
6387 if v_0.Op != OpAnd8 {
6388 break
6389 }
6390 _ = v_0.Args[1]
6391 y := v_0.Args[0]
6392 if x != v_0.Args[1] {
6393 break
6394 }
6395 v.reset(OpAnd8)
6396 v.AddArg(x)
6397 v.AddArg(y)
6398 return true
6399 }
6400
6401
6402
6403 for {
6404 x := v.Args[1]
6405 v_0 := v.Args[0]
6406 if v_0.Op != OpAnd8 {
6407 break
6408 }
6409 z := v_0.Args[1]
6410 i := v_0.Args[0]
6411 if i.Op != OpConst8 {
6412 break
6413 }
6414 t := i.Type
6415 if !(z.Op != OpConst8 && x.Op != OpConst8) {
6416 break
6417 }
6418 v.reset(OpAnd8)
6419 v.AddArg(i)
6420 v0 := b.NewValue0(v.Pos, OpAnd8, t)
6421 v0.AddArg(z)
6422 v0.AddArg(x)
6423 v.AddArg(v0)
6424 return true
6425 }
6426
6427
6428
6429 for {
6430 x := v.Args[1]
6431 v_0 := v.Args[0]
6432 if v_0.Op != OpAnd8 {
6433 break
6434 }
6435 _ = v_0.Args[1]
6436 z := v_0.Args[0]
6437 i := v_0.Args[1]
6438 if i.Op != OpConst8 {
6439 break
6440 }
6441 t := i.Type
6442 if !(z.Op != OpConst8 && x.Op != OpConst8) {
6443 break
6444 }
6445 v.reset(OpAnd8)
6446 v.AddArg(i)
6447 v0 := b.NewValue0(v.Pos, OpAnd8, t)
6448 v0.AddArg(z)
6449 v0.AddArg(x)
6450 v.AddArg(v0)
6451 return true
6452 }
6453
6454
6455
6456 for {
6457 _ = v.Args[1]
6458 x := v.Args[0]
6459 v_1 := v.Args[1]
6460 if v_1.Op != OpAnd8 {
6461 break
6462 }
6463 z := v_1.Args[1]
6464 i := v_1.Args[0]
6465 if i.Op != OpConst8 {
6466 break
6467 }
6468 t := i.Type
6469 if !(z.Op != OpConst8 && x.Op != OpConst8) {
6470 break
6471 }
6472 v.reset(OpAnd8)
6473 v.AddArg(i)
6474 v0 := b.NewValue0(v.Pos, OpAnd8, t)
6475 v0.AddArg(z)
6476 v0.AddArg(x)
6477 v.AddArg(v0)
6478 return true
6479 }
6480
6481
6482
6483 for {
6484 _ = v.Args[1]
6485 x := v.Args[0]
6486 v_1 := v.Args[1]
6487 if v_1.Op != OpAnd8 {
6488 break
6489 }
6490 _ = v_1.Args[1]
6491 z := v_1.Args[0]
6492 i := v_1.Args[1]
6493 if i.Op != OpConst8 {
6494 break
6495 }
6496 t := i.Type
6497 if !(z.Op != OpConst8 && x.Op != OpConst8) {
6498 break
6499 }
6500 v.reset(OpAnd8)
6501 v.AddArg(i)
6502 v0 := b.NewValue0(v.Pos, OpAnd8, t)
6503 v0.AddArg(z)
6504 v0.AddArg(x)
6505 v.AddArg(v0)
6506 return true
6507 }
6508
6509
6510
6511 for {
6512 _ = v.Args[1]
6513 v_0 := v.Args[0]
6514 if v_0.Op != OpConst8 {
6515 break
6516 }
6517 t := v_0.Type
6518 c := v_0.AuxInt
6519 v_1 := v.Args[1]
6520 if v_1.Op != OpAnd8 {
6521 break
6522 }
6523 x := v_1.Args[1]
6524 v_1_0 := v_1.Args[0]
6525 if v_1_0.Op != OpConst8 {
6526 break
6527 }
6528 if v_1_0.Type != t {
6529 break
6530 }
6531 d := v_1_0.AuxInt
6532 v.reset(OpAnd8)
6533 v0 := b.NewValue0(v.Pos, OpConst8, t)
6534 v0.AuxInt = int64(int8(c & d))
6535 v.AddArg(v0)
6536 v.AddArg(x)
6537 return true
6538 }
6539 return false
6540 }
6541 func rewriteValuegeneric_OpAnd8_20(v *Value) bool {
6542 b := v.Block
6543
6544
6545
6546 for {
6547 _ = v.Args[1]
6548 v_0 := v.Args[0]
6549 if v_0.Op != OpConst8 {
6550 break
6551 }
6552 t := v_0.Type
6553 c := v_0.AuxInt
6554 v_1 := v.Args[1]
6555 if v_1.Op != OpAnd8 {
6556 break
6557 }
6558 _ = v_1.Args[1]
6559 x := v_1.Args[0]
6560 v_1_1 := v_1.Args[1]
6561 if v_1_1.Op != OpConst8 {
6562 break
6563 }
6564 if v_1_1.Type != t {
6565 break
6566 }
6567 d := v_1_1.AuxInt
6568 v.reset(OpAnd8)
6569 v0 := b.NewValue0(v.Pos, OpConst8, t)
6570 v0.AuxInt = int64(int8(c & d))
6571 v.AddArg(v0)
6572 v.AddArg(x)
6573 return true
6574 }
6575
6576
6577
6578 for {
6579 _ = v.Args[1]
6580 v_0 := v.Args[0]
6581 if v_0.Op != OpAnd8 {
6582 break
6583 }
6584 x := v_0.Args[1]
6585 v_0_0 := v_0.Args[0]
6586 if v_0_0.Op != OpConst8 {
6587 break
6588 }
6589 t := v_0_0.Type
6590 d := v_0_0.AuxInt
6591 v_1 := v.Args[1]
6592 if v_1.Op != OpConst8 {
6593 break
6594 }
6595 if v_1.Type != t {
6596 break
6597 }
6598 c := v_1.AuxInt
6599 v.reset(OpAnd8)
6600 v0 := b.NewValue0(v.Pos, OpConst8, t)
6601 v0.AuxInt = int64(int8(c & d))
6602 v.AddArg(v0)
6603 v.AddArg(x)
6604 return true
6605 }
6606
6607
6608
6609 for {
6610 _ = v.Args[1]
6611 v_0 := v.Args[0]
6612 if v_0.Op != OpAnd8 {
6613 break
6614 }
6615 _ = v_0.Args[1]
6616 x := v_0.Args[0]
6617 v_0_1 := v_0.Args[1]
6618 if v_0_1.Op != OpConst8 {
6619 break
6620 }
6621 t := v_0_1.Type
6622 d := v_0_1.AuxInt
6623 v_1 := v.Args[1]
6624 if v_1.Op != OpConst8 {
6625 break
6626 }
6627 if v_1.Type != t {
6628 break
6629 }
6630 c := v_1.AuxInt
6631 v.reset(OpAnd8)
6632 v0 := b.NewValue0(v.Pos, OpConst8, t)
6633 v0.AuxInt = int64(int8(c & d))
6634 v.AddArg(v0)
6635 v.AddArg(x)
6636 return true
6637 }
6638 return false
6639 }
6640 func rewriteValuegeneric_OpArraySelect_0(v *Value) bool {
6641
6642
6643
6644 for {
6645 v_0 := v.Args[0]
6646 if v_0.Op != OpArrayMake1 {
6647 break
6648 }
6649 x := v_0.Args[0]
6650 v.reset(OpCopy)
6651 v.Type = x.Type
6652 v.AddArg(x)
6653 return true
6654 }
6655
6656
6657
6658 for {
6659 if v.AuxInt != 0 {
6660 break
6661 }
6662 x := v.Args[0]
6663 if x.Op != OpIData {
6664 break
6665 }
6666 v.reset(OpCopy)
6667 v.Type = x.Type
6668 v.AddArg(x)
6669 return true
6670 }
6671 return false
6672 }
6673 func rewriteValuegeneric_OpCom16_0(v *Value) bool {
6674
6675
6676
6677 for {
6678 v_0 := v.Args[0]
6679 if v_0.Op != OpCom16 {
6680 break
6681 }
6682 x := v_0.Args[0]
6683 v.reset(OpCopy)
6684 v.Type = x.Type
6685 v.AddArg(x)
6686 return true
6687 }
6688
6689
6690
6691 for {
6692 v_0 := v.Args[0]
6693 if v_0.Op != OpConst16 {
6694 break
6695 }
6696 c := v_0.AuxInt
6697 v.reset(OpConst16)
6698 v.AuxInt = ^c
6699 return true
6700 }
6701 return false
6702 }
6703 func rewriteValuegeneric_OpCom32_0(v *Value) bool {
6704
6705
6706
6707 for {
6708 v_0 := v.Args[0]
6709 if v_0.Op != OpCom32 {
6710 break
6711 }
6712 x := v_0.Args[0]
6713 v.reset(OpCopy)
6714 v.Type = x.Type
6715 v.AddArg(x)
6716 return true
6717 }
6718
6719
6720
6721 for {
6722 v_0 := v.Args[0]
6723 if v_0.Op != OpConst32 {
6724 break
6725 }
6726 c := v_0.AuxInt
6727 v.reset(OpConst32)
6728 v.AuxInt = ^c
6729 return true
6730 }
6731 return false
6732 }
6733 func rewriteValuegeneric_OpCom64_0(v *Value) bool {
6734
6735
6736
6737 for {
6738 v_0 := v.Args[0]
6739 if v_0.Op != OpCom64 {
6740 break
6741 }
6742 x := v_0.Args[0]
6743 v.reset(OpCopy)
6744 v.Type = x.Type
6745 v.AddArg(x)
6746 return true
6747 }
6748
6749
6750
6751 for {
6752 v_0 := v.Args[0]
6753 if v_0.Op != OpConst64 {
6754 break
6755 }
6756 c := v_0.AuxInt
6757 v.reset(OpConst64)
6758 v.AuxInt = ^c
6759 return true
6760 }
6761 return false
6762 }
6763 func rewriteValuegeneric_OpCom8_0(v *Value) bool {
6764
6765
6766
6767 for {
6768 v_0 := v.Args[0]
6769 if v_0.Op != OpCom8 {
6770 break
6771 }
6772 x := v_0.Args[0]
6773 v.reset(OpCopy)
6774 v.Type = x.Type
6775 v.AddArg(x)
6776 return true
6777 }
6778
6779
6780
6781 for {
6782 v_0 := v.Args[0]
6783 if v_0.Op != OpConst8 {
6784 break
6785 }
6786 c := v_0.AuxInt
6787 v.reset(OpConst8)
6788 v.AuxInt = ^c
6789 return true
6790 }
6791 return false
6792 }
6793 func rewriteValuegeneric_OpConstInterface_0(v *Value) bool {
6794 b := v.Block
6795 typ := &b.Func.Config.Types
6796
6797
6798
6799 for {
6800 v.reset(OpIMake)
6801 v0 := b.NewValue0(v.Pos, OpConstNil, typ.Uintptr)
6802 v.AddArg(v0)
6803 v1 := b.NewValue0(v.Pos, OpConstNil, typ.BytePtr)
6804 v.AddArg(v1)
6805 return true
6806 }
6807 }
6808 func rewriteValuegeneric_OpConstSlice_0(v *Value) bool {
6809 b := v.Block
6810 config := b.Func.Config
6811 typ := &b.Func.Config.Types
6812
6813
6814
6815 for {
6816 if !(config.PtrSize == 4) {
6817 break
6818 }
6819 v.reset(OpSliceMake)
6820 v0 := b.NewValue0(v.Pos, OpConstNil, v.Type.Elem().PtrTo())
6821 v.AddArg(v0)
6822 v1 := b.NewValue0(v.Pos, OpConst32, typ.Int)
6823 v1.AuxInt = 0
6824 v.AddArg(v1)
6825 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int)
6826 v2.AuxInt = 0
6827 v.AddArg(v2)
6828 return true
6829 }
6830
6831
6832
6833 for {
6834 if !(config.PtrSize == 8) {
6835 break
6836 }
6837 v.reset(OpSliceMake)
6838 v0 := b.NewValue0(v.Pos, OpConstNil, v.Type.Elem().PtrTo())
6839 v.AddArg(v0)
6840 v1 := b.NewValue0(v.Pos, OpConst64, typ.Int)
6841 v1.AuxInt = 0
6842 v.AddArg(v1)
6843 v2 := b.NewValue0(v.Pos, OpConst64, typ.Int)
6844 v2.AuxInt = 0
6845 v.AddArg(v2)
6846 return true
6847 }
6848 return false
6849 }
6850 func rewriteValuegeneric_OpConstString_0(v *Value) bool {
6851 b := v.Block
6852 config := b.Func.Config
6853 fe := b.Func.fe
6854 typ := &b.Func.Config.Types
6855
6856
6857
6858 for {
6859 s := v.Aux
6860 if !(config.PtrSize == 4 && s.(string) == "") {
6861 break
6862 }
6863 v.reset(OpStringMake)
6864 v0 := b.NewValue0(v.Pos, OpConstNil, typ.BytePtr)
6865 v.AddArg(v0)
6866 v1 := b.NewValue0(v.Pos, OpConst32, typ.Int)
6867 v1.AuxInt = 0
6868 v.AddArg(v1)
6869 return true
6870 }
6871
6872
6873
6874 for {
6875 s := v.Aux
6876 if !(config.PtrSize == 8 && s.(string) == "") {
6877 break
6878 }
6879 v.reset(OpStringMake)
6880 v0 := b.NewValue0(v.Pos, OpConstNil, typ.BytePtr)
6881 v.AddArg(v0)
6882 v1 := b.NewValue0(v.Pos, OpConst64, typ.Int)
6883 v1.AuxInt = 0
6884 v.AddArg(v1)
6885 return true
6886 }
6887
6888
6889
6890 for {
6891 s := v.Aux
6892 if !(config.PtrSize == 4 && s.(string) != "") {
6893 break
6894 }
6895 v.reset(OpStringMake)
6896 v0 := b.NewValue0(v.Pos, OpAddr, typ.BytePtr)
6897 v0.Aux = fe.StringData(s.(string))
6898 v1 := b.NewValue0(v.Pos, OpSB, typ.Uintptr)
6899 v0.AddArg(v1)
6900 v.AddArg(v0)
6901 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int)
6902 v2.AuxInt = int64(len(s.(string)))
6903 v.AddArg(v2)
6904 return true
6905 }
6906
6907
6908
6909 for {
6910 s := v.Aux
6911 if !(config.PtrSize == 8 && s.(string) != "") {
6912 break
6913 }
6914 v.reset(OpStringMake)
6915 v0 := b.NewValue0(v.Pos, OpAddr, typ.BytePtr)
6916 v0.Aux = fe.StringData(s.(string))
6917 v1 := b.NewValue0(v.Pos, OpSB, typ.Uintptr)
6918 v0.AddArg(v1)
6919 v.AddArg(v0)
6920 v2 := b.NewValue0(v.Pos, OpConst64, typ.Int)
6921 v2.AuxInt = int64(len(s.(string)))
6922 v.AddArg(v2)
6923 return true
6924 }
6925 return false
6926 }
6927 func rewriteValuegeneric_OpConvert_0(v *Value) bool {
6928
6929
6930
6931 for {
6932 mem := v.Args[1]
6933 v_0 := v.Args[0]
6934 if v_0.Op != OpAdd64 {
6935 break
6936 }
6937 off := v_0.Args[1]
6938 v_0_0 := v_0.Args[0]
6939 if v_0_0.Op != OpConvert {
6940 break
6941 }
6942 _ = v_0_0.Args[1]
6943 ptr := v_0_0.Args[0]
6944 if mem != v_0_0.Args[1] {
6945 break
6946 }
6947 v.reset(OpAdd64)
6948 v.AddArg(ptr)
6949 v.AddArg(off)
6950 return true
6951 }
6952
6953
6954
6955 for {
6956 mem := v.Args[1]
6957 v_0 := v.Args[0]
6958 if v_0.Op != OpAdd64 {
6959 break
6960 }
6961 _ = v_0.Args[1]
6962 off := v_0.Args[0]
6963 v_0_1 := v_0.Args[1]
6964 if v_0_1.Op != OpConvert {
6965 break
6966 }
6967 _ = v_0_1.Args[1]
6968 ptr := v_0_1.Args[0]
6969 if mem != v_0_1.Args[1] {
6970 break
6971 }
6972 v.reset(OpAdd64)
6973 v.AddArg(ptr)
6974 v.AddArg(off)
6975 return true
6976 }
6977
6978
6979
6980 for {
6981 mem := v.Args[1]
6982 v_0 := v.Args[0]
6983 if v_0.Op != OpAdd32 {
6984 break
6985 }
6986 off := v_0.Args[1]
6987 v_0_0 := v_0.Args[0]
6988 if v_0_0.Op != OpConvert {
6989 break
6990 }
6991 _ = v_0_0.Args[1]
6992 ptr := v_0_0.Args[0]
6993 if mem != v_0_0.Args[1] {
6994 break
6995 }
6996 v.reset(OpAdd32)
6997 v.AddArg(ptr)
6998 v.AddArg(off)
6999 return true
7000 }
7001
7002
7003
7004 for {
7005 mem := v.Args[1]
7006 v_0 := v.Args[0]
7007 if v_0.Op != OpAdd32 {
7008 break
7009 }
7010 _ = v_0.Args[1]
7011 off := v_0.Args[0]
7012 v_0_1 := v_0.Args[1]
7013 if v_0_1.Op != OpConvert {
7014 break
7015 }
7016 _ = v_0_1.Args[1]
7017 ptr := v_0_1.Args[0]
7018 if mem != v_0_1.Args[1] {
7019 break
7020 }
7021 v.reset(OpAdd32)
7022 v.AddArg(ptr)
7023 v.AddArg(off)
7024 return true
7025 }
7026
7027
7028
7029 for {
7030 mem := v.Args[1]
7031 v_0 := v.Args[0]
7032 if v_0.Op != OpConvert {
7033 break
7034 }
7035 _ = v_0.Args[1]
7036 ptr := v_0.Args[0]
7037 if mem != v_0.Args[1] {
7038 break
7039 }
7040 v.reset(OpCopy)
7041 v.Type = ptr.Type
7042 v.AddArg(ptr)
7043 return true
7044 }
7045 return false
7046 }
7047 func rewriteValuegeneric_OpCvt32Fto32_0(v *Value) bool {
7048
7049
7050
7051 for {
7052 v_0 := v.Args[0]
7053 if v_0.Op != OpConst32F {
7054 break
7055 }
7056 c := v_0.AuxInt
7057 v.reset(OpConst32)
7058 v.AuxInt = int64(int32(auxTo32F(c)))
7059 return true
7060 }
7061 return false
7062 }
7063 func rewriteValuegeneric_OpCvt32Fto64_0(v *Value) bool {
7064
7065
7066
7067 for {
7068 v_0 := v.Args[0]
7069 if v_0.Op != OpConst32F {
7070 break
7071 }
7072 c := v_0.AuxInt
7073 v.reset(OpConst64)
7074 v.AuxInt = int64(auxTo32F(c))
7075 return true
7076 }
7077 return false
7078 }
7079 func rewriteValuegeneric_OpCvt32Fto64F_0(v *Value) bool {
7080
7081
7082
7083 for {
7084 v_0 := v.Args[0]
7085 if v_0.Op != OpConst32F {
7086 break
7087 }
7088 c := v_0.AuxInt
7089 v.reset(OpConst64F)
7090 v.AuxInt = c
7091 return true
7092 }
7093 return false
7094 }
7095 func rewriteValuegeneric_OpCvt32to32F_0(v *Value) bool {
7096
7097
7098
7099 for {
7100 v_0 := v.Args[0]
7101 if v_0.Op != OpConst32 {
7102 break
7103 }
7104 c := v_0.AuxInt
7105 v.reset(OpConst32F)
7106 v.AuxInt = auxFrom32F(float32(int32(c)))
7107 return true
7108 }
7109 return false
7110 }
7111 func rewriteValuegeneric_OpCvt32to64F_0(v *Value) bool {
7112
7113
7114
7115 for {
7116 v_0 := v.Args[0]
7117 if v_0.Op != OpConst32 {
7118 break
7119 }
7120 c := v_0.AuxInt
7121 v.reset(OpConst64F)
7122 v.AuxInt = auxFrom64F(float64(int32(c)))
7123 return true
7124 }
7125 return false
7126 }
7127 func rewriteValuegeneric_OpCvt64Fto32_0(v *Value) bool {
7128
7129
7130
7131 for {
7132 v_0 := v.Args[0]
7133 if v_0.Op != OpConst64F {
7134 break
7135 }
7136 c := v_0.AuxInt
7137 v.reset(OpConst32)
7138 v.AuxInt = int64(int32(auxTo64F(c)))
7139 return true
7140 }
7141 return false
7142 }
7143 func rewriteValuegeneric_OpCvt64Fto32F_0(v *Value) bool {
7144
7145
7146
7147 for {
7148 v_0 := v.Args[0]
7149 if v_0.Op != OpConst64F {
7150 break
7151 }
7152 c := v_0.AuxInt
7153 v.reset(OpConst32F)
7154 v.AuxInt = auxFrom32F(float32(auxTo64F(c)))
7155 return true
7156 }
7157 return false
7158 }
7159 func rewriteValuegeneric_OpCvt64Fto64_0(v *Value) bool {
7160
7161
7162
7163 for {
7164 v_0 := v.Args[0]
7165 if v_0.Op != OpConst64F {
7166 break
7167 }
7168 c := v_0.AuxInt
7169 v.reset(OpConst64)
7170 v.AuxInt = int64(auxTo64F(c))
7171 return true
7172 }
7173 return false
7174 }
7175 func rewriteValuegeneric_OpCvt64to32F_0(v *Value) bool {
7176
7177
7178
7179 for {
7180 v_0 := v.Args[0]
7181 if v_0.Op != OpConst64 {
7182 break
7183 }
7184 c := v_0.AuxInt
7185 v.reset(OpConst32F)
7186 v.AuxInt = auxFrom32F(float32(c))
7187 return true
7188 }
7189 return false
7190 }
7191 func rewriteValuegeneric_OpCvt64to64F_0(v *Value) bool {
7192
7193
7194
7195 for {
7196 v_0 := v.Args[0]
7197 if v_0.Op != OpConst64 {
7198 break
7199 }
7200 c := v_0.AuxInt
7201 v.reset(OpConst64F)
7202 v.AuxInt = auxFrom64F(float64(c))
7203 return true
7204 }
7205 return false
7206 }
7207 func rewriteValuegeneric_OpDiv16_0(v *Value) bool {
7208 b := v.Block
7209 typ := &b.Func.Config.Types
7210
7211
7212
7213 for {
7214 _ = v.Args[1]
7215 v_0 := v.Args[0]
7216 if v_0.Op != OpConst16 {
7217 break
7218 }
7219 c := v_0.AuxInt
7220 v_1 := v.Args[1]
7221 if v_1.Op != OpConst16 {
7222 break
7223 }
7224 d := v_1.AuxInt
7225 if !(d != 0) {
7226 break
7227 }
7228 v.reset(OpConst16)
7229 v.AuxInt = int64(int16(c) / int16(d))
7230 return true
7231 }
7232
7233
7234
7235 for {
7236 _ = v.Args[1]
7237 n := v.Args[0]
7238 v_1 := v.Args[1]
7239 if v_1.Op != OpConst16 {
7240 break
7241 }
7242 c := v_1.AuxInt
7243 if !(isNonNegative(n) && isPowerOfTwo(c&0xffff)) {
7244 break
7245 }
7246 v.reset(OpRsh16Ux64)
7247 v.AddArg(n)
7248 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7249 v0.AuxInt = log2(c & 0xffff)
7250 v.AddArg(v0)
7251 return true
7252 }
7253
7254
7255
7256 for {
7257 t := v.Type
7258 _ = v.Args[1]
7259 n := v.Args[0]
7260 v_1 := v.Args[1]
7261 if v_1.Op != OpConst16 {
7262 break
7263 }
7264 c := v_1.AuxInt
7265 if !(c < 0 && c != -1<<15) {
7266 break
7267 }
7268 v.reset(OpNeg16)
7269 v0 := b.NewValue0(v.Pos, OpDiv16, t)
7270 v0.AddArg(n)
7271 v1 := b.NewValue0(v.Pos, OpConst16, t)
7272 v1.AuxInt = -c
7273 v0.AddArg(v1)
7274 v.AddArg(v0)
7275 return true
7276 }
7277
7278
7279
7280 for {
7281 t := v.Type
7282 _ = v.Args[1]
7283 x := v.Args[0]
7284 v_1 := v.Args[1]
7285 if v_1.Op != OpConst16 {
7286 break
7287 }
7288 if v_1.AuxInt != -1<<15 {
7289 break
7290 }
7291 v.reset(OpRsh16Ux64)
7292 v0 := b.NewValue0(v.Pos, OpAnd16, t)
7293 v0.AddArg(x)
7294 v1 := b.NewValue0(v.Pos, OpNeg16, t)
7295 v1.AddArg(x)
7296 v0.AddArg(v1)
7297 v.AddArg(v0)
7298 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7299 v2.AuxInt = 15
7300 v.AddArg(v2)
7301 return true
7302 }
7303
7304
7305
7306 for {
7307 t := v.Type
7308 _ = v.Args[1]
7309 n := v.Args[0]
7310 v_1 := v.Args[1]
7311 if v_1.Op != OpConst16 {
7312 break
7313 }
7314 c := v_1.AuxInt
7315 if !(isPowerOfTwo(c)) {
7316 break
7317 }
7318 v.reset(OpRsh16x64)
7319 v0 := b.NewValue0(v.Pos, OpAdd16, t)
7320 v0.AddArg(n)
7321 v1 := b.NewValue0(v.Pos, OpRsh16Ux64, t)
7322 v2 := b.NewValue0(v.Pos, OpRsh16x64, t)
7323 v2.AddArg(n)
7324 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7325 v3.AuxInt = 15
7326 v2.AddArg(v3)
7327 v1.AddArg(v2)
7328 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7329 v4.AuxInt = 16 - log2(c)
7330 v1.AddArg(v4)
7331 v0.AddArg(v1)
7332 v.AddArg(v0)
7333 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7334 v5.AuxInt = log2(c)
7335 v.AddArg(v5)
7336 return true
7337 }
7338
7339
7340
7341 for {
7342 t := v.Type
7343 _ = v.Args[1]
7344 x := v.Args[0]
7345 v_1 := v.Args[1]
7346 if v_1.Op != OpConst16 {
7347 break
7348 }
7349 c := v_1.AuxInt
7350 if !(smagicOK(16, c)) {
7351 break
7352 }
7353 v.reset(OpSub16)
7354 v.Type = t
7355 v0 := b.NewValue0(v.Pos, OpRsh32x64, t)
7356 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
7357 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7358 v2.AuxInt = int64(smagic(16, c).m)
7359 v1.AddArg(v2)
7360 v3 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
7361 v3.AddArg(x)
7362 v1.AddArg(v3)
7363 v0.AddArg(v1)
7364 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7365 v4.AuxInt = 16 + smagic(16, c).s
7366 v0.AddArg(v4)
7367 v.AddArg(v0)
7368 v5 := b.NewValue0(v.Pos, OpRsh32x64, t)
7369 v6 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
7370 v6.AddArg(x)
7371 v5.AddArg(v6)
7372 v7 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7373 v7.AuxInt = 31
7374 v5.AddArg(v7)
7375 v.AddArg(v5)
7376 return true
7377 }
7378 return false
7379 }
7380 func rewriteValuegeneric_OpDiv16u_0(v *Value) bool {
7381 b := v.Block
7382 config := b.Func.Config
7383 typ := &b.Func.Config.Types
7384
7385
7386
7387 for {
7388 _ = v.Args[1]
7389 v_0 := v.Args[0]
7390 if v_0.Op != OpConst16 {
7391 break
7392 }
7393 c := v_0.AuxInt
7394 v_1 := v.Args[1]
7395 if v_1.Op != OpConst16 {
7396 break
7397 }
7398 d := v_1.AuxInt
7399 if !(d != 0) {
7400 break
7401 }
7402 v.reset(OpConst16)
7403 v.AuxInt = int64(int16(uint16(c) / uint16(d)))
7404 return true
7405 }
7406
7407
7408
7409 for {
7410 _ = v.Args[1]
7411 n := v.Args[0]
7412 v_1 := v.Args[1]
7413 if v_1.Op != OpConst16 {
7414 break
7415 }
7416 c := v_1.AuxInt
7417 if !(isPowerOfTwo(c & 0xffff)) {
7418 break
7419 }
7420 v.reset(OpRsh16Ux64)
7421 v.AddArg(n)
7422 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7423 v0.AuxInt = log2(c & 0xffff)
7424 v.AddArg(v0)
7425 return true
7426 }
7427
7428
7429
7430 for {
7431 _ = v.Args[1]
7432 x := v.Args[0]
7433 v_1 := v.Args[1]
7434 if v_1.Op != OpConst16 {
7435 break
7436 }
7437 c := v_1.AuxInt
7438 if !(umagicOK(16, c) && config.RegSize == 8) {
7439 break
7440 }
7441 v.reset(OpTrunc64to16)
7442 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
7443 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
7444 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7445 v2.AuxInt = int64(1<<16 + umagic(16, c).m)
7446 v1.AddArg(v2)
7447 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
7448 v3.AddArg(x)
7449 v1.AddArg(v3)
7450 v0.AddArg(v1)
7451 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7452 v4.AuxInt = 16 + umagic(16, c).s
7453 v0.AddArg(v4)
7454 v.AddArg(v0)
7455 return true
7456 }
7457
7458
7459
7460 for {
7461 _ = v.Args[1]
7462 x := v.Args[0]
7463 v_1 := v.Args[1]
7464 if v_1.Op != OpConst16 {
7465 break
7466 }
7467 c := v_1.AuxInt
7468 if !(umagicOK(16, c) && config.RegSize == 4 && umagic(16, c).m&1 == 0) {
7469 break
7470 }
7471 v.reset(OpTrunc32to16)
7472 v0 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
7473 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
7474 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7475 v2.AuxInt = int64(1<<15 + umagic(16, c).m/2)
7476 v1.AddArg(v2)
7477 v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
7478 v3.AddArg(x)
7479 v1.AddArg(v3)
7480 v0.AddArg(v1)
7481 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7482 v4.AuxInt = 16 + umagic(16, c).s - 1
7483 v0.AddArg(v4)
7484 v.AddArg(v0)
7485 return true
7486 }
7487
7488
7489
7490 for {
7491 _ = v.Args[1]
7492 x := v.Args[0]
7493 v_1 := v.Args[1]
7494 if v_1.Op != OpConst16 {
7495 break
7496 }
7497 c := v_1.AuxInt
7498 if !(umagicOK(16, c) && config.RegSize == 4 && c&1 == 0) {
7499 break
7500 }
7501 v.reset(OpTrunc32to16)
7502 v0 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
7503 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
7504 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7505 v2.AuxInt = int64(1<<15 + (umagic(16, c).m+1)/2)
7506 v1.AddArg(v2)
7507 v3 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
7508 v4 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
7509 v4.AddArg(x)
7510 v3.AddArg(v4)
7511 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7512 v5.AuxInt = 1
7513 v3.AddArg(v5)
7514 v1.AddArg(v3)
7515 v0.AddArg(v1)
7516 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7517 v6.AuxInt = 16 + umagic(16, c).s - 2
7518 v0.AddArg(v6)
7519 v.AddArg(v0)
7520 return true
7521 }
7522
7523
7524
7525 for {
7526 _ = v.Args[1]
7527 x := v.Args[0]
7528 v_1 := v.Args[1]
7529 if v_1.Op != OpConst16 {
7530 break
7531 }
7532 c := v_1.AuxInt
7533 if !(umagicOK(16, c) && config.RegSize == 4 && config.useAvg) {
7534 break
7535 }
7536 v.reset(OpTrunc32to16)
7537 v0 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
7538 v1 := b.NewValue0(v.Pos, OpAvg32u, typ.UInt32)
7539 v2 := b.NewValue0(v.Pos, OpLsh32x64, typ.UInt32)
7540 v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
7541 v3.AddArg(x)
7542 v2.AddArg(v3)
7543 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7544 v4.AuxInt = 16
7545 v2.AddArg(v4)
7546 v1.AddArg(v2)
7547 v5 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
7548 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7549 v6.AuxInt = int64(umagic(16, c).m)
7550 v5.AddArg(v6)
7551 v7 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
7552 v7.AddArg(x)
7553 v5.AddArg(v7)
7554 v1.AddArg(v5)
7555 v0.AddArg(v1)
7556 v8 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7557 v8.AuxInt = 16 + umagic(16, c).s - 1
7558 v0.AddArg(v8)
7559 v.AddArg(v0)
7560 return true
7561 }
7562 return false
7563 }
7564 func rewriteValuegeneric_OpDiv32_0(v *Value) bool {
7565 b := v.Block
7566 config := b.Func.Config
7567 typ := &b.Func.Config.Types
7568
7569
7570
7571 for {
7572 _ = v.Args[1]
7573 v_0 := v.Args[0]
7574 if v_0.Op != OpConst32 {
7575 break
7576 }
7577 c := v_0.AuxInt
7578 v_1 := v.Args[1]
7579 if v_1.Op != OpConst32 {
7580 break
7581 }
7582 d := v_1.AuxInt
7583 if !(d != 0) {
7584 break
7585 }
7586 v.reset(OpConst32)
7587 v.AuxInt = int64(int32(c) / int32(d))
7588 return true
7589 }
7590
7591
7592
7593 for {
7594 _ = v.Args[1]
7595 n := v.Args[0]
7596 v_1 := v.Args[1]
7597 if v_1.Op != OpConst32 {
7598 break
7599 }
7600 c := v_1.AuxInt
7601 if !(isNonNegative(n) && isPowerOfTwo(c&0xffffffff)) {
7602 break
7603 }
7604 v.reset(OpRsh32Ux64)
7605 v.AddArg(n)
7606 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7607 v0.AuxInt = log2(c & 0xffffffff)
7608 v.AddArg(v0)
7609 return true
7610 }
7611
7612
7613
7614 for {
7615 t := v.Type
7616 _ = v.Args[1]
7617 n := v.Args[0]
7618 v_1 := v.Args[1]
7619 if v_1.Op != OpConst32 {
7620 break
7621 }
7622 c := v_1.AuxInt
7623 if !(c < 0 && c != -1<<31) {
7624 break
7625 }
7626 v.reset(OpNeg32)
7627 v0 := b.NewValue0(v.Pos, OpDiv32, t)
7628 v0.AddArg(n)
7629 v1 := b.NewValue0(v.Pos, OpConst32, t)
7630 v1.AuxInt = -c
7631 v0.AddArg(v1)
7632 v.AddArg(v0)
7633 return true
7634 }
7635
7636
7637
7638 for {
7639 t := v.Type
7640 _ = v.Args[1]
7641 x := v.Args[0]
7642 v_1 := v.Args[1]
7643 if v_1.Op != OpConst32 {
7644 break
7645 }
7646 if v_1.AuxInt != -1<<31 {
7647 break
7648 }
7649 v.reset(OpRsh32Ux64)
7650 v0 := b.NewValue0(v.Pos, OpAnd32, t)
7651 v0.AddArg(x)
7652 v1 := b.NewValue0(v.Pos, OpNeg32, t)
7653 v1.AddArg(x)
7654 v0.AddArg(v1)
7655 v.AddArg(v0)
7656 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7657 v2.AuxInt = 31
7658 v.AddArg(v2)
7659 return true
7660 }
7661
7662
7663
7664 for {
7665 t := v.Type
7666 _ = v.Args[1]
7667 n := v.Args[0]
7668 v_1 := v.Args[1]
7669 if v_1.Op != OpConst32 {
7670 break
7671 }
7672 c := v_1.AuxInt
7673 if !(isPowerOfTwo(c)) {
7674 break
7675 }
7676 v.reset(OpRsh32x64)
7677 v0 := b.NewValue0(v.Pos, OpAdd32, t)
7678 v0.AddArg(n)
7679 v1 := b.NewValue0(v.Pos, OpRsh32Ux64, t)
7680 v2 := b.NewValue0(v.Pos, OpRsh32x64, t)
7681 v2.AddArg(n)
7682 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7683 v3.AuxInt = 31
7684 v2.AddArg(v3)
7685 v1.AddArg(v2)
7686 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7687 v4.AuxInt = 32 - log2(c)
7688 v1.AddArg(v4)
7689 v0.AddArg(v1)
7690 v.AddArg(v0)
7691 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7692 v5.AuxInt = log2(c)
7693 v.AddArg(v5)
7694 return true
7695 }
7696
7697
7698
7699 for {
7700 t := v.Type
7701 _ = v.Args[1]
7702 x := v.Args[0]
7703 v_1 := v.Args[1]
7704 if v_1.Op != OpConst32 {
7705 break
7706 }
7707 c := v_1.AuxInt
7708 if !(smagicOK(32, c) && config.RegSize == 8) {
7709 break
7710 }
7711 v.reset(OpSub32)
7712 v.Type = t
7713 v0 := b.NewValue0(v.Pos, OpRsh64x64, t)
7714 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
7715 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7716 v2.AuxInt = int64(smagic(32, c).m)
7717 v1.AddArg(v2)
7718 v3 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
7719 v3.AddArg(x)
7720 v1.AddArg(v3)
7721 v0.AddArg(v1)
7722 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7723 v4.AuxInt = 32 + smagic(32, c).s
7724 v0.AddArg(v4)
7725 v.AddArg(v0)
7726 v5 := b.NewValue0(v.Pos, OpRsh64x64, t)
7727 v6 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
7728 v6.AddArg(x)
7729 v5.AddArg(v6)
7730 v7 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7731 v7.AuxInt = 63
7732 v5.AddArg(v7)
7733 v.AddArg(v5)
7734 return true
7735 }
7736
7737
7738
7739 for {
7740 t := v.Type
7741 _ = v.Args[1]
7742 x := v.Args[0]
7743 v_1 := v.Args[1]
7744 if v_1.Op != OpConst32 {
7745 break
7746 }
7747 c := v_1.AuxInt
7748 if !(smagicOK(32, c) && config.RegSize == 4 && smagic(32, c).m&1 == 0 && config.useHmul) {
7749 break
7750 }
7751 v.reset(OpSub32)
7752 v.Type = t
7753 v0 := b.NewValue0(v.Pos, OpRsh32x64, t)
7754 v1 := b.NewValue0(v.Pos, OpHmul32, t)
7755 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7756 v2.AuxInt = int64(int32(smagic(32, c).m / 2))
7757 v1.AddArg(v2)
7758 v1.AddArg(x)
7759 v0.AddArg(v1)
7760 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7761 v3.AuxInt = smagic(32, c).s - 1
7762 v0.AddArg(v3)
7763 v.AddArg(v0)
7764 v4 := b.NewValue0(v.Pos, OpRsh32x64, t)
7765 v4.AddArg(x)
7766 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7767 v5.AuxInt = 31
7768 v4.AddArg(v5)
7769 v.AddArg(v4)
7770 return true
7771 }
7772
7773
7774
7775 for {
7776 t := v.Type
7777 _ = v.Args[1]
7778 x := v.Args[0]
7779 v_1 := v.Args[1]
7780 if v_1.Op != OpConst32 {
7781 break
7782 }
7783 c := v_1.AuxInt
7784 if !(smagicOK(32, c) && config.RegSize == 4 && smagic(32, c).m&1 != 0 && config.useHmul) {
7785 break
7786 }
7787 v.reset(OpSub32)
7788 v.Type = t
7789 v0 := b.NewValue0(v.Pos, OpRsh32x64, t)
7790 v1 := b.NewValue0(v.Pos, OpAdd32, t)
7791 v2 := b.NewValue0(v.Pos, OpHmul32, t)
7792 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7793 v3.AuxInt = int64(int32(smagic(32, c).m))
7794 v2.AddArg(v3)
7795 v2.AddArg(x)
7796 v1.AddArg(v2)
7797 v1.AddArg(x)
7798 v0.AddArg(v1)
7799 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7800 v4.AuxInt = smagic(32, c).s
7801 v0.AddArg(v4)
7802 v.AddArg(v0)
7803 v5 := b.NewValue0(v.Pos, OpRsh32x64, t)
7804 v5.AddArg(x)
7805 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7806 v6.AuxInt = 31
7807 v5.AddArg(v6)
7808 v.AddArg(v5)
7809 return true
7810 }
7811 return false
7812 }
7813 func rewriteValuegeneric_OpDiv32F_0(v *Value) bool {
7814 b := v.Block
7815
7816
7817
7818 for {
7819 _ = v.Args[1]
7820 v_0 := v.Args[0]
7821 if v_0.Op != OpConst32F {
7822 break
7823 }
7824 c := v_0.AuxInt
7825 v_1 := v.Args[1]
7826 if v_1.Op != OpConst32F {
7827 break
7828 }
7829 d := v_1.AuxInt
7830 v.reset(OpConst32F)
7831 v.AuxInt = auxFrom32F(auxTo32F(c) / auxTo32F(d))
7832 return true
7833 }
7834
7835
7836
7837 for {
7838 _ = v.Args[1]
7839 x := v.Args[0]
7840 v_1 := v.Args[1]
7841 if v_1.Op != OpConst32F {
7842 break
7843 }
7844 t := v_1.Type
7845 c := v_1.AuxInt
7846 if !(reciprocalExact32(auxTo32F(c))) {
7847 break
7848 }
7849 v.reset(OpMul32F)
7850 v.AddArg(x)
7851 v0 := b.NewValue0(v.Pos, OpConst32F, t)
7852 v0.AuxInt = auxFrom32F(1 / auxTo32F(c))
7853 v.AddArg(v0)
7854 return true
7855 }
7856 return false
7857 }
7858 func rewriteValuegeneric_OpDiv32u_0(v *Value) bool {
7859 b := v.Block
7860 config := b.Func.Config
7861 typ := &b.Func.Config.Types
7862
7863
7864
7865 for {
7866 _ = v.Args[1]
7867 v_0 := v.Args[0]
7868 if v_0.Op != OpConst32 {
7869 break
7870 }
7871 c := v_0.AuxInt
7872 v_1 := v.Args[1]
7873 if v_1.Op != OpConst32 {
7874 break
7875 }
7876 d := v_1.AuxInt
7877 if !(d != 0) {
7878 break
7879 }
7880 v.reset(OpConst32)
7881 v.AuxInt = int64(int32(uint32(c) / uint32(d)))
7882 return true
7883 }
7884
7885
7886
7887 for {
7888 _ = v.Args[1]
7889 n := v.Args[0]
7890 v_1 := v.Args[1]
7891 if v_1.Op != OpConst32 {
7892 break
7893 }
7894 c := v_1.AuxInt
7895 if !(isPowerOfTwo(c & 0xffffffff)) {
7896 break
7897 }
7898 v.reset(OpRsh32Ux64)
7899 v.AddArg(n)
7900 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7901 v0.AuxInt = log2(c & 0xffffffff)
7902 v.AddArg(v0)
7903 return true
7904 }
7905
7906
7907
7908 for {
7909 _ = v.Args[1]
7910 x := v.Args[0]
7911 v_1 := v.Args[1]
7912 if v_1.Op != OpConst32 {
7913 break
7914 }
7915 c := v_1.AuxInt
7916 if !(umagicOK(32, c) && config.RegSize == 4 && umagic(32, c).m&1 == 0 && config.useHmul) {
7917 break
7918 }
7919 v.reset(OpRsh32Ux64)
7920 v.Type = typ.UInt32
7921 v0 := b.NewValue0(v.Pos, OpHmul32u, typ.UInt32)
7922 v1 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7923 v1.AuxInt = int64(int32(1<<31 + umagic(32, c).m/2))
7924 v0.AddArg(v1)
7925 v0.AddArg(x)
7926 v.AddArg(v0)
7927 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7928 v2.AuxInt = umagic(32, c).s - 1
7929 v.AddArg(v2)
7930 return true
7931 }
7932
7933
7934
7935 for {
7936 _ = v.Args[1]
7937 x := v.Args[0]
7938 v_1 := v.Args[1]
7939 if v_1.Op != OpConst32 {
7940 break
7941 }
7942 c := v_1.AuxInt
7943 if !(umagicOK(32, c) && config.RegSize == 4 && c&1 == 0 && config.useHmul) {
7944 break
7945 }
7946 v.reset(OpRsh32Ux64)
7947 v.Type = typ.UInt32
7948 v0 := b.NewValue0(v.Pos, OpHmul32u, typ.UInt32)
7949 v1 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7950 v1.AuxInt = int64(int32(1<<31 + (umagic(32, c).m+1)/2))
7951 v0.AddArg(v1)
7952 v2 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
7953 v2.AddArg(x)
7954 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7955 v3.AuxInt = 1
7956 v2.AddArg(v3)
7957 v0.AddArg(v2)
7958 v.AddArg(v0)
7959 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7960 v4.AuxInt = umagic(32, c).s - 2
7961 v.AddArg(v4)
7962 return true
7963 }
7964
7965
7966
7967 for {
7968 _ = v.Args[1]
7969 x := v.Args[0]
7970 v_1 := v.Args[1]
7971 if v_1.Op != OpConst32 {
7972 break
7973 }
7974 c := v_1.AuxInt
7975 if !(umagicOK(32, c) && config.RegSize == 4 && config.useAvg && config.useHmul) {
7976 break
7977 }
7978 v.reset(OpRsh32Ux64)
7979 v.Type = typ.UInt32
7980 v0 := b.NewValue0(v.Pos, OpAvg32u, typ.UInt32)
7981 v0.AddArg(x)
7982 v1 := b.NewValue0(v.Pos, OpHmul32u, typ.UInt32)
7983 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
7984 v2.AuxInt = int64(int32(umagic(32, c).m))
7985 v1.AddArg(v2)
7986 v1.AddArg(x)
7987 v0.AddArg(v1)
7988 v.AddArg(v0)
7989 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
7990 v3.AuxInt = umagic(32, c).s - 1
7991 v.AddArg(v3)
7992 return true
7993 }
7994
7995
7996
7997 for {
7998 _ = v.Args[1]
7999 x := v.Args[0]
8000 v_1 := v.Args[1]
8001 if v_1.Op != OpConst32 {
8002 break
8003 }
8004 c := v_1.AuxInt
8005 if !(umagicOK(32, c) && config.RegSize == 8 && umagic(32, c).m&1 == 0) {
8006 break
8007 }
8008 v.reset(OpTrunc64to32)
8009 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
8010 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
8011 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8012 v2.AuxInt = int64(1<<31 + umagic(32, c).m/2)
8013 v1.AddArg(v2)
8014 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8015 v3.AddArg(x)
8016 v1.AddArg(v3)
8017 v0.AddArg(v1)
8018 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8019 v4.AuxInt = 32 + umagic(32, c).s - 1
8020 v0.AddArg(v4)
8021 v.AddArg(v0)
8022 return true
8023 }
8024
8025
8026
8027 for {
8028 _ = v.Args[1]
8029 x := v.Args[0]
8030 v_1 := v.Args[1]
8031 if v_1.Op != OpConst32 {
8032 break
8033 }
8034 c := v_1.AuxInt
8035 if !(umagicOK(32, c) && config.RegSize == 8 && c&1 == 0) {
8036 break
8037 }
8038 v.reset(OpTrunc64to32)
8039 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
8040 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
8041 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8042 v2.AuxInt = int64(1<<31 + (umagic(32, c).m+1)/2)
8043 v1.AddArg(v2)
8044 v3 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
8045 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8046 v4.AddArg(x)
8047 v3.AddArg(v4)
8048 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8049 v5.AuxInt = 1
8050 v3.AddArg(v5)
8051 v1.AddArg(v3)
8052 v0.AddArg(v1)
8053 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8054 v6.AuxInt = 32 + umagic(32, c).s - 2
8055 v0.AddArg(v6)
8056 v.AddArg(v0)
8057 return true
8058 }
8059
8060
8061
8062 for {
8063 _ = v.Args[1]
8064 x := v.Args[0]
8065 v_1 := v.Args[1]
8066 if v_1.Op != OpConst32 {
8067 break
8068 }
8069 c := v_1.AuxInt
8070 if !(umagicOK(32, c) && config.RegSize == 8 && config.useAvg) {
8071 break
8072 }
8073 v.reset(OpTrunc64to32)
8074 v0 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
8075 v1 := b.NewValue0(v.Pos, OpAvg64u, typ.UInt64)
8076 v2 := b.NewValue0(v.Pos, OpLsh64x64, typ.UInt64)
8077 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8078 v3.AddArg(x)
8079 v2.AddArg(v3)
8080 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8081 v4.AuxInt = 32
8082 v2.AddArg(v4)
8083 v1.AddArg(v2)
8084 v5 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
8085 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt32)
8086 v6.AuxInt = int64(umagic(32, c).m)
8087 v5.AddArg(v6)
8088 v7 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
8089 v7.AddArg(x)
8090 v5.AddArg(v7)
8091 v1.AddArg(v5)
8092 v0.AddArg(v1)
8093 v8 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8094 v8.AuxInt = 32 + umagic(32, c).s - 1
8095 v0.AddArg(v8)
8096 v.AddArg(v0)
8097 return true
8098 }
8099 return false
8100 }
8101 func rewriteValuegeneric_OpDiv64_0(v *Value) bool {
8102 b := v.Block
8103 config := b.Func.Config
8104 typ := &b.Func.Config.Types
8105
8106
8107
8108 for {
8109 _ = v.Args[1]
8110 v_0 := v.Args[0]
8111 if v_0.Op != OpConst64 {
8112 break
8113 }
8114 c := v_0.AuxInt
8115 v_1 := v.Args[1]
8116 if v_1.Op != OpConst64 {
8117 break
8118 }
8119 d := v_1.AuxInt
8120 if !(d != 0) {
8121 break
8122 }
8123 v.reset(OpConst64)
8124 v.AuxInt = c / d
8125 return true
8126 }
8127
8128
8129
8130 for {
8131 _ = v.Args[1]
8132 n := v.Args[0]
8133 v_1 := v.Args[1]
8134 if v_1.Op != OpConst64 {
8135 break
8136 }
8137 c := v_1.AuxInt
8138 if !(isNonNegative(n) && isPowerOfTwo(c)) {
8139 break
8140 }
8141 v.reset(OpRsh64Ux64)
8142 v.AddArg(n)
8143 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8144 v0.AuxInt = log2(c)
8145 v.AddArg(v0)
8146 return true
8147 }
8148
8149
8150
8151 for {
8152 _ = v.Args[1]
8153 n := v.Args[0]
8154 v_1 := v.Args[1]
8155 if v_1.Op != OpConst64 {
8156 break
8157 }
8158 if v_1.AuxInt != -1<<63 {
8159 break
8160 }
8161 if !(isNonNegative(n)) {
8162 break
8163 }
8164 v.reset(OpConst64)
8165 v.AuxInt = 0
8166 return true
8167 }
8168
8169
8170
8171 for {
8172 t := v.Type
8173 _ = v.Args[1]
8174 n := v.Args[0]
8175 v_1 := v.Args[1]
8176 if v_1.Op != OpConst64 {
8177 break
8178 }
8179 c := v_1.AuxInt
8180 if !(c < 0 && c != -1<<63) {
8181 break
8182 }
8183 v.reset(OpNeg64)
8184 v0 := b.NewValue0(v.Pos, OpDiv64, t)
8185 v0.AddArg(n)
8186 v1 := b.NewValue0(v.Pos, OpConst64, t)
8187 v1.AuxInt = -c
8188 v0.AddArg(v1)
8189 v.AddArg(v0)
8190 return true
8191 }
8192
8193
8194
8195 for {
8196 t := v.Type
8197 _ = v.Args[1]
8198 x := v.Args[0]
8199 v_1 := v.Args[1]
8200 if v_1.Op != OpConst64 {
8201 break
8202 }
8203 if v_1.AuxInt != -1<<63 {
8204 break
8205 }
8206 v.reset(OpRsh64Ux64)
8207 v0 := b.NewValue0(v.Pos, OpAnd64, t)
8208 v0.AddArg(x)
8209 v1 := b.NewValue0(v.Pos, OpNeg64, t)
8210 v1.AddArg(x)
8211 v0.AddArg(v1)
8212 v.AddArg(v0)
8213 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8214 v2.AuxInt = 63
8215 v.AddArg(v2)
8216 return true
8217 }
8218
8219
8220
8221 for {
8222 t := v.Type
8223 _ = v.Args[1]
8224 n := v.Args[0]
8225 v_1 := v.Args[1]
8226 if v_1.Op != OpConst64 {
8227 break
8228 }
8229 c := v_1.AuxInt
8230 if !(isPowerOfTwo(c)) {
8231 break
8232 }
8233 v.reset(OpRsh64x64)
8234 v0 := b.NewValue0(v.Pos, OpAdd64, t)
8235 v0.AddArg(n)
8236 v1 := b.NewValue0(v.Pos, OpRsh64Ux64, t)
8237 v2 := b.NewValue0(v.Pos, OpRsh64x64, t)
8238 v2.AddArg(n)
8239 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8240 v3.AuxInt = 63
8241 v2.AddArg(v3)
8242 v1.AddArg(v2)
8243 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8244 v4.AuxInt = 64 - log2(c)
8245 v1.AddArg(v4)
8246 v0.AddArg(v1)
8247 v.AddArg(v0)
8248 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8249 v5.AuxInt = log2(c)
8250 v.AddArg(v5)
8251 return true
8252 }
8253
8254
8255
8256 for {
8257 t := v.Type
8258 _ = v.Args[1]
8259 x := v.Args[0]
8260 v_1 := v.Args[1]
8261 if v_1.Op != OpConst64 {
8262 break
8263 }
8264 c := v_1.AuxInt
8265 if !(smagicOK(64, c) && smagic(64, c).m&1 == 0 && config.useHmul) {
8266 break
8267 }
8268 v.reset(OpSub64)
8269 v.Type = t
8270 v0 := b.NewValue0(v.Pos, OpRsh64x64, t)
8271 v1 := b.NewValue0(v.Pos, OpHmul64, t)
8272 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8273 v2.AuxInt = int64(smagic(64, c).m / 2)
8274 v1.AddArg(v2)
8275 v1.AddArg(x)
8276 v0.AddArg(v1)
8277 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8278 v3.AuxInt = smagic(64, c).s - 1
8279 v0.AddArg(v3)
8280 v.AddArg(v0)
8281 v4 := b.NewValue0(v.Pos, OpRsh64x64, t)
8282 v4.AddArg(x)
8283 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8284 v5.AuxInt = 63
8285 v4.AddArg(v5)
8286 v.AddArg(v4)
8287 return true
8288 }
8289
8290
8291
8292 for {
8293 t := v.Type
8294 _ = v.Args[1]
8295 x := v.Args[0]
8296 v_1 := v.Args[1]
8297 if v_1.Op != OpConst64 {
8298 break
8299 }
8300 c := v_1.AuxInt
8301 if !(smagicOK(64, c) && smagic(64, c).m&1 != 0 && config.useHmul) {
8302 break
8303 }
8304 v.reset(OpSub64)
8305 v.Type = t
8306 v0 := b.NewValue0(v.Pos, OpRsh64x64, t)
8307 v1 := b.NewValue0(v.Pos, OpAdd64, t)
8308 v2 := b.NewValue0(v.Pos, OpHmul64, t)
8309 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8310 v3.AuxInt = int64(smagic(64, c).m)
8311 v2.AddArg(v3)
8312 v2.AddArg(x)
8313 v1.AddArg(v2)
8314 v1.AddArg(x)
8315 v0.AddArg(v1)
8316 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8317 v4.AuxInt = smagic(64, c).s
8318 v0.AddArg(v4)
8319 v.AddArg(v0)
8320 v5 := b.NewValue0(v.Pos, OpRsh64x64, t)
8321 v5.AddArg(x)
8322 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8323 v6.AuxInt = 63
8324 v5.AddArg(v6)
8325 v.AddArg(v5)
8326 return true
8327 }
8328 return false
8329 }
8330 func rewriteValuegeneric_OpDiv64F_0(v *Value) bool {
8331 b := v.Block
8332
8333
8334
8335 for {
8336 _ = v.Args[1]
8337 v_0 := v.Args[0]
8338 if v_0.Op != OpConst64F {
8339 break
8340 }
8341 c := v_0.AuxInt
8342 v_1 := v.Args[1]
8343 if v_1.Op != OpConst64F {
8344 break
8345 }
8346 d := v_1.AuxInt
8347 v.reset(OpConst64F)
8348 v.AuxInt = auxFrom64F(auxTo64F(c) / auxTo64F(d))
8349 return true
8350 }
8351
8352
8353
8354 for {
8355 _ = v.Args[1]
8356 x := v.Args[0]
8357 v_1 := v.Args[1]
8358 if v_1.Op != OpConst64F {
8359 break
8360 }
8361 t := v_1.Type
8362 c := v_1.AuxInt
8363 if !(reciprocalExact64(auxTo64F(c))) {
8364 break
8365 }
8366 v.reset(OpMul64F)
8367 v.AddArg(x)
8368 v0 := b.NewValue0(v.Pos, OpConst64F, t)
8369 v0.AuxInt = auxFrom64F(1 / auxTo64F(c))
8370 v.AddArg(v0)
8371 return true
8372 }
8373 return false
8374 }
8375 func rewriteValuegeneric_OpDiv64u_0(v *Value) bool {
8376 b := v.Block
8377 config := b.Func.Config
8378 typ := &b.Func.Config.Types
8379
8380
8381
8382 for {
8383 _ = v.Args[1]
8384 v_0 := v.Args[0]
8385 if v_0.Op != OpConst64 {
8386 break
8387 }
8388 c := v_0.AuxInt
8389 v_1 := v.Args[1]
8390 if v_1.Op != OpConst64 {
8391 break
8392 }
8393 d := v_1.AuxInt
8394 if !(d != 0) {
8395 break
8396 }
8397 v.reset(OpConst64)
8398 v.AuxInt = int64(uint64(c) / uint64(d))
8399 return true
8400 }
8401
8402
8403
8404 for {
8405 _ = v.Args[1]
8406 n := v.Args[0]
8407 v_1 := v.Args[1]
8408 if v_1.Op != OpConst64 {
8409 break
8410 }
8411 c := v_1.AuxInt
8412 if !(isPowerOfTwo(c)) {
8413 break
8414 }
8415 v.reset(OpRsh64Ux64)
8416 v.AddArg(n)
8417 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8418 v0.AuxInt = log2(c)
8419 v.AddArg(v0)
8420 return true
8421 }
8422
8423
8424
8425 for {
8426 _ = v.Args[1]
8427 n := v.Args[0]
8428 v_1 := v.Args[1]
8429 if v_1.Op != OpConst64 {
8430 break
8431 }
8432 if v_1.AuxInt != -1<<63 {
8433 break
8434 }
8435 v.reset(OpRsh64Ux64)
8436 v.AddArg(n)
8437 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8438 v0.AuxInt = 63
8439 v.AddArg(v0)
8440 return true
8441 }
8442
8443
8444
8445 for {
8446 _ = v.Args[1]
8447 x := v.Args[0]
8448 v_1 := v.Args[1]
8449 if v_1.Op != OpConst64 {
8450 break
8451 }
8452 c := v_1.AuxInt
8453 if !(umagicOK(64, c) && config.RegSize == 8 && umagic(64, c).m&1 == 0 && config.useHmul) {
8454 break
8455 }
8456 v.reset(OpRsh64Ux64)
8457 v.Type = typ.UInt64
8458 v0 := b.NewValue0(v.Pos, OpHmul64u, typ.UInt64)
8459 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8460 v1.AuxInt = int64(1<<63 + umagic(64, c).m/2)
8461 v0.AddArg(v1)
8462 v0.AddArg(x)
8463 v.AddArg(v0)
8464 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8465 v2.AuxInt = umagic(64, c).s - 1
8466 v.AddArg(v2)
8467 return true
8468 }
8469
8470
8471
8472 for {
8473 _ = v.Args[1]
8474 x := v.Args[0]
8475 v_1 := v.Args[1]
8476 if v_1.Op != OpConst64 {
8477 break
8478 }
8479 c := v_1.AuxInt
8480 if !(umagicOK(64, c) && config.RegSize == 8 && c&1 == 0 && config.useHmul) {
8481 break
8482 }
8483 v.reset(OpRsh64Ux64)
8484 v.Type = typ.UInt64
8485 v0 := b.NewValue0(v.Pos, OpHmul64u, typ.UInt64)
8486 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8487 v1.AuxInt = int64(1<<63 + (umagic(64, c).m+1)/2)
8488 v0.AddArg(v1)
8489 v2 := b.NewValue0(v.Pos, OpRsh64Ux64, typ.UInt64)
8490 v2.AddArg(x)
8491 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8492 v3.AuxInt = 1
8493 v2.AddArg(v3)
8494 v0.AddArg(v2)
8495 v.AddArg(v0)
8496 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8497 v4.AuxInt = umagic(64, c).s - 2
8498 v.AddArg(v4)
8499 return true
8500 }
8501
8502
8503
8504 for {
8505 _ = v.Args[1]
8506 x := v.Args[0]
8507 v_1 := v.Args[1]
8508 if v_1.Op != OpConst64 {
8509 break
8510 }
8511 c := v_1.AuxInt
8512 if !(umagicOK(64, c) && config.RegSize == 8 && config.useAvg && config.useHmul) {
8513 break
8514 }
8515 v.reset(OpRsh64Ux64)
8516 v.Type = typ.UInt64
8517 v0 := b.NewValue0(v.Pos, OpAvg64u, typ.UInt64)
8518 v0.AddArg(x)
8519 v1 := b.NewValue0(v.Pos, OpHmul64u, typ.UInt64)
8520 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8521 v2.AuxInt = int64(umagic(64, c).m)
8522 v1.AddArg(v2)
8523 v1.AddArg(x)
8524 v0.AddArg(v1)
8525 v.AddArg(v0)
8526 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8527 v3.AuxInt = umagic(64, c).s - 1
8528 v.AddArg(v3)
8529 return true
8530 }
8531 return false
8532 }
8533 func rewriteValuegeneric_OpDiv8_0(v *Value) bool {
8534 b := v.Block
8535 typ := &b.Func.Config.Types
8536
8537
8538
8539 for {
8540 _ = v.Args[1]
8541 v_0 := v.Args[0]
8542 if v_0.Op != OpConst8 {
8543 break
8544 }
8545 c := v_0.AuxInt
8546 v_1 := v.Args[1]
8547 if v_1.Op != OpConst8 {
8548 break
8549 }
8550 d := v_1.AuxInt
8551 if !(d != 0) {
8552 break
8553 }
8554 v.reset(OpConst8)
8555 v.AuxInt = int64(int8(c) / int8(d))
8556 return true
8557 }
8558
8559
8560
8561 for {
8562 _ = v.Args[1]
8563 n := v.Args[0]
8564 v_1 := v.Args[1]
8565 if v_1.Op != OpConst8 {
8566 break
8567 }
8568 c := v_1.AuxInt
8569 if !(isNonNegative(n) && isPowerOfTwo(c&0xff)) {
8570 break
8571 }
8572 v.reset(OpRsh8Ux64)
8573 v.AddArg(n)
8574 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8575 v0.AuxInt = log2(c & 0xff)
8576 v.AddArg(v0)
8577 return true
8578 }
8579
8580
8581
8582 for {
8583 t := v.Type
8584 _ = v.Args[1]
8585 n := v.Args[0]
8586 v_1 := v.Args[1]
8587 if v_1.Op != OpConst8 {
8588 break
8589 }
8590 c := v_1.AuxInt
8591 if !(c < 0 && c != -1<<7) {
8592 break
8593 }
8594 v.reset(OpNeg8)
8595 v0 := b.NewValue0(v.Pos, OpDiv8, t)
8596 v0.AddArg(n)
8597 v1 := b.NewValue0(v.Pos, OpConst8, t)
8598 v1.AuxInt = -c
8599 v0.AddArg(v1)
8600 v.AddArg(v0)
8601 return true
8602 }
8603
8604
8605
8606 for {
8607 t := v.Type
8608 _ = v.Args[1]
8609 x := v.Args[0]
8610 v_1 := v.Args[1]
8611 if v_1.Op != OpConst8 {
8612 break
8613 }
8614 if v_1.AuxInt != -1<<7 {
8615 break
8616 }
8617 v.reset(OpRsh8Ux64)
8618 v0 := b.NewValue0(v.Pos, OpAnd8, t)
8619 v0.AddArg(x)
8620 v1 := b.NewValue0(v.Pos, OpNeg8, t)
8621 v1.AddArg(x)
8622 v0.AddArg(v1)
8623 v.AddArg(v0)
8624 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8625 v2.AuxInt = 7
8626 v.AddArg(v2)
8627 return true
8628 }
8629
8630
8631
8632 for {
8633 t := v.Type
8634 _ = v.Args[1]
8635 n := v.Args[0]
8636 v_1 := v.Args[1]
8637 if v_1.Op != OpConst8 {
8638 break
8639 }
8640 c := v_1.AuxInt
8641 if !(isPowerOfTwo(c)) {
8642 break
8643 }
8644 v.reset(OpRsh8x64)
8645 v0 := b.NewValue0(v.Pos, OpAdd8, t)
8646 v0.AddArg(n)
8647 v1 := b.NewValue0(v.Pos, OpRsh8Ux64, t)
8648 v2 := b.NewValue0(v.Pos, OpRsh8x64, t)
8649 v2.AddArg(n)
8650 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8651 v3.AuxInt = 7
8652 v2.AddArg(v3)
8653 v1.AddArg(v2)
8654 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8655 v4.AuxInt = 8 - log2(c)
8656 v1.AddArg(v4)
8657 v0.AddArg(v1)
8658 v.AddArg(v0)
8659 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8660 v5.AuxInt = log2(c)
8661 v.AddArg(v5)
8662 return true
8663 }
8664
8665
8666
8667 for {
8668 t := v.Type
8669 _ = v.Args[1]
8670 x := v.Args[0]
8671 v_1 := v.Args[1]
8672 if v_1.Op != OpConst8 {
8673 break
8674 }
8675 c := v_1.AuxInt
8676 if !(smagicOK(8, c)) {
8677 break
8678 }
8679 v.reset(OpSub8)
8680 v.Type = t
8681 v0 := b.NewValue0(v.Pos, OpRsh32x64, t)
8682 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
8683 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
8684 v2.AuxInt = int64(smagic(8, c).m)
8685 v1.AddArg(v2)
8686 v3 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
8687 v3.AddArg(x)
8688 v1.AddArg(v3)
8689 v0.AddArg(v1)
8690 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8691 v4.AuxInt = 8 + smagic(8, c).s
8692 v0.AddArg(v4)
8693 v.AddArg(v0)
8694 v5 := b.NewValue0(v.Pos, OpRsh32x64, t)
8695 v6 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
8696 v6.AddArg(x)
8697 v5.AddArg(v6)
8698 v7 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8699 v7.AuxInt = 31
8700 v5.AddArg(v7)
8701 v.AddArg(v5)
8702 return true
8703 }
8704 return false
8705 }
8706 func rewriteValuegeneric_OpDiv8u_0(v *Value) bool {
8707 b := v.Block
8708 typ := &b.Func.Config.Types
8709
8710
8711
8712 for {
8713 _ = v.Args[1]
8714 v_0 := v.Args[0]
8715 if v_0.Op != OpConst8 {
8716 break
8717 }
8718 c := v_0.AuxInt
8719 v_1 := v.Args[1]
8720 if v_1.Op != OpConst8 {
8721 break
8722 }
8723 d := v_1.AuxInt
8724 if !(d != 0) {
8725 break
8726 }
8727 v.reset(OpConst8)
8728 v.AuxInt = int64(int8(uint8(c) / uint8(d)))
8729 return true
8730 }
8731
8732
8733
8734 for {
8735 _ = v.Args[1]
8736 n := v.Args[0]
8737 v_1 := v.Args[1]
8738 if v_1.Op != OpConst8 {
8739 break
8740 }
8741 c := v_1.AuxInt
8742 if !(isPowerOfTwo(c & 0xff)) {
8743 break
8744 }
8745 v.reset(OpRsh8Ux64)
8746 v.AddArg(n)
8747 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8748 v0.AuxInt = log2(c & 0xff)
8749 v.AddArg(v0)
8750 return true
8751 }
8752
8753
8754
8755 for {
8756 _ = v.Args[1]
8757 x := v.Args[0]
8758 v_1 := v.Args[1]
8759 if v_1.Op != OpConst8 {
8760 break
8761 }
8762 c := v_1.AuxInt
8763 if !(umagicOK(8, c)) {
8764 break
8765 }
8766 v.reset(OpTrunc32to8)
8767 v0 := b.NewValue0(v.Pos, OpRsh32Ux64, typ.UInt32)
8768 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
8769 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
8770 v2.AuxInt = int64(1<<8 + umagic(8, c).m)
8771 v1.AddArg(v2)
8772 v3 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
8773 v3.AddArg(x)
8774 v1.AddArg(v3)
8775 v0.AddArg(v1)
8776 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
8777 v4.AuxInt = 8 + umagic(8, c).s
8778 v0.AddArg(v4)
8779 v.AddArg(v0)
8780 return true
8781 }
8782 return false
8783 }
8784 func rewriteValuegeneric_OpEq16_0(v *Value) bool {
8785 b := v.Block
8786 config := b.Func.Config
8787 typ := &b.Func.Config.Types
8788
8789
8790
8791 for {
8792 x := v.Args[1]
8793 if x != v.Args[0] {
8794 break
8795 }
8796 v.reset(OpConstBool)
8797 v.AuxInt = 1
8798 return true
8799 }
8800
8801
8802
8803 for {
8804 _ = v.Args[1]
8805 v_0 := v.Args[0]
8806 if v_0.Op != OpConst16 {
8807 break
8808 }
8809 t := v_0.Type
8810 c := v_0.AuxInt
8811 v_1 := v.Args[1]
8812 if v_1.Op != OpAdd16 {
8813 break
8814 }
8815 x := v_1.Args[1]
8816 v_1_0 := v_1.Args[0]
8817 if v_1_0.Op != OpConst16 {
8818 break
8819 }
8820 if v_1_0.Type != t {
8821 break
8822 }
8823 d := v_1_0.AuxInt
8824 v.reset(OpEq16)
8825 v0 := b.NewValue0(v.Pos, OpConst16, t)
8826 v0.AuxInt = int64(int16(c - d))
8827 v.AddArg(v0)
8828 v.AddArg(x)
8829 return true
8830 }
8831
8832
8833
8834 for {
8835 _ = v.Args[1]
8836 v_0 := v.Args[0]
8837 if v_0.Op != OpConst16 {
8838 break
8839 }
8840 t := v_0.Type
8841 c := v_0.AuxInt
8842 v_1 := v.Args[1]
8843 if v_1.Op != OpAdd16 {
8844 break
8845 }
8846 _ = v_1.Args[1]
8847 x := v_1.Args[0]
8848 v_1_1 := v_1.Args[1]
8849 if v_1_1.Op != OpConst16 {
8850 break
8851 }
8852 if v_1_1.Type != t {
8853 break
8854 }
8855 d := v_1_1.AuxInt
8856 v.reset(OpEq16)
8857 v0 := b.NewValue0(v.Pos, OpConst16, t)
8858 v0.AuxInt = int64(int16(c - d))
8859 v.AddArg(v0)
8860 v.AddArg(x)
8861 return true
8862 }
8863
8864
8865
8866 for {
8867 _ = v.Args[1]
8868 v_0 := v.Args[0]
8869 if v_0.Op != OpAdd16 {
8870 break
8871 }
8872 x := v_0.Args[1]
8873 v_0_0 := v_0.Args[0]
8874 if v_0_0.Op != OpConst16 {
8875 break
8876 }
8877 t := v_0_0.Type
8878 d := v_0_0.AuxInt
8879 v_1 := v.Args[1]
8880 if v_1.Op != OpConst16 {
8881 break
8882 }
8883 if v_1.Type != t {
8884 break
8885 }
8886 c := v_1.AuxInt
8887 v.reset(OpEq16)
8888 v0 := b.NewValue0(v.Pos, OpConst16, t)
8889 v0.AuxInt = int64(int16(c - d))
8890 v.AddArg(v0)
8891 v.AddArg(x)
8892 return true
8893 }
8894
8895
8896
8897 for {
8898 _ = v.Args[1]
8899 v_0 := v.Args[0]
8900 if v_0.Op != OpAdd16 {
8901 break
8902 }
8903 _ = v_0.Args[1]
8904 x := v_0.Args[0]
8905 v_0_1 := v_0.Args[1]
8906 if v_0_1.Op != OpConst16 {
8907 break
8908 }
8909 t := v_0_1.Type
8910 d := v_0_1.AuxInt
8911 v_1 := v.Args[1]
8912 if v_1.Op != OpConst16 {
8913 break
8914 }
8915 if v_1.Type != t {
8916 break
8917 }
8918 c := v_1.AuxInt
8919 v.reset(OpEq16)
8920 v0 := b.NewValue0(v.Pos, OpConst16, t)
8921 v0.AuxInt = int64(int16(c - d))
8922 v.AddArg(v0)
8923 v.AddArg(x)
8924 return true
8925 }
8926
8927
8928
8929 for {
8930 _ = v.Args[1]
8931 v_0 := v.Args[0]
8932 if v_0.Op != OpConst16 {
8933 break
8934 }
8935 c := v_0.AuxInt
8936 v_1 := v.Args[1]
8937 if v_1.Op != OpConst16 {
8938 break
8939 }
8940 d := v_1.AuxInt
8941 v.reset(OpConstBool)
8942 v.AuxInt = b2i(c == d)
8943 return true
8944 }
8945
8946
8947
8948 for {
8949 _ = v.Args[1]
8950 v_0 := v.Args[0]
8951 if v_0.Op != OpConst16 {
8952 break
8953 }
8954 d := v_0.AuxInt
8955 v_1 := v.Args[1]
8956 if v_1.Op != OpConst16 {
8957 break
8958 }
8959 c := v_1.AuxInt
8960 v.reset(OpConstBool)
8961 v.AuxInt = b2i(c == d)
8962 return true
8963 }
8964
8965
8966
8967 for {
8968 _ = v.Args[1]
8969 v_0 := v.Args[0]
8970 if v_0.Op != OpMod16u {
8971 break
8972 }
8973 _ = v_0.Args[1]
8974 x := v_0.Args[0]
8975 v_0_1 := v_0.Args[1]
8976 if v_0_1.Op != OpConst16 {
8977 break
8978 }
8979 c := v_0_1.AuxInt
8980 v_1 := v.Args[1]
8981 if v_1.Op != OpConst16 {
8982 break
8983 }
8984 if v_1.AuxInt != 0 {
8985 break
8986 }
8987 if !(x.Op != OpConst16 && udivisibleOK(16, c) && !hasSmallRotate(config)) {
8988 break
8989 }
8990 v.reset(OpEq32)
8991 v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32)
8992 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
8993 v1.AddArg(x)
8994 v0.AddArg(v1)
8995 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
8996 v2.AuxInt = c & 0xffff
8997 v0.AddArg(v2)
8998 v.AddArg(v0)
8999 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
9000 v3.AuxInt = 0
9001 v.AddArg(v3)
9002 return true
9003 }
9004
9005
9006
9007 for {
9008 _ = v.Args[1]
9009 v_0 := v.Args[0]
9010 if v_0.Op != OpConst16 {
9011 break
9012 }
9013 if v_0.AuxInt != 0 {
9014 break
9015 }
9016 v_1 := v.Args[1]
9017 if v_1.Op != OpMod16u {
9018 break
9019 }
9020 _ = v_1.Args[1]
9021 x := v_1.Args[0]
9022 v_1_1 := v_1.Args[1]
9023 if v_1_1.Op != OpConst16 {
9024 break
9025 }
9026 c := v_1_1.AuxInt
9027 if !(x.Op != OpConst16 && udivisibleOK(16, c) && !hasSmallRotate(config)) {
9028 break
9029 }
9030 v.reset(OpEq32)
9031 v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32)
9032 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
9033 v1.AddArg(x)
9034 v0.AddArg(v1)
9035 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
9036 v2.AuxInt = c & 0xffff
9037 v0.AddArg(v2)
9038 v.AddArg(v0)
9039 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
9040 v3.AuxInt = 0
9041 v.AddArg(v3)
9042 return true
9043 }
9044
9045
9046
9047 for {
9048 _ = v.Args[1]
9049 v_0 := v.Args[0]
9050 if v_0.Op != OpMod16 {
9051 break
9052 }
9053 _ = v_0.Args[1]
9054 x := v_0.Args[0]
9055 v_0_1 := v_0.Args[1]
9056 if v_0_1.Op != OpConst16 {
9057 break
9058 }
9059 c := v_0_1.AuxInt
9060 v_1 := v.Args[1]
9061 if v_1.Op != OpConst16 {
9062 break
9063 }
9064 if v_1.AuxInt != 0 {
9065 break
9066 }
9067 if !(x.Op != OpConst16 && sdivisibleOK(16, c) && !hasSmallRotate(config)) {
9068 break
9069 }
9070 v.reset(OpEq32)
9071 v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32)
9072 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
9073 v1.AddArg(x)
9074 v0.AddArg(v1)
9075 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
9076 v2.AuxInt = c
9077 v0.AddArg(v2)
9078 v.AddArg(v0)
9079 v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
9080 v3.AuxInt = 0
9081 v.AddArg(v3)
9082 return true
9083 }
9084 return false
9085 }
9086 func rewriteValuegeneric_OpEq16_10(v *Value) bool {
9087 b := v.Block
9088 config := b.Func.Config
9089 typ := &b.Func.Config.Types
9090
9091
9092
9093 for {
9094 _ = v.Args[1]
9095 v_0 := v.Args[0]
9096 if v_0.Op != OpConst16 {
9097 break
9098 }
9099 if v_0.AuxInt != 0 {
9100 break
9101 }
9102 v_1 := v.Args[1]
9103 if v_1.Op != OpMod16 {
9104 break
9105 }
9106 _ = v_1.Args[1]
9107 x := v_1.Args[0]
9108 v_1_1 := v_1.Args[1]
9109 if v_1_1.Op != OpConst16 {
9110 break
9111 }
9112 c := v_1_1.AuxInt
9113 if !(x.Op != OpConst16 && sdivisibleOK(16, c) && !hasSmallRotate(config)) {
9114 break
9115 }
9116 v.reset(OpEq32)
9117 v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32)
9118 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
9119 v1.AddArg(x)
9120 v0.AddArg(v1)
9121 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
9122 v2.AuxInt = c
9123 v0.AddArg(v2)
9124 v.AddArg(v0)
9125 v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
9126 v3.AuxInt = 0
9127 v.AddArg(v3)
9128 return true
9129 }
9130
9131
9132
9133 for {
9134 _ = v.Args[1]
9135 x := v.Args[0]
9136 v_1 := v.Args[1]
9137 if v_1.Op != OpMul16 {
9138 break
9139 }
9140 _ = v_1.Args[1]
9141 v_1_0 := v_1.Args[0]
9142 if v_1_0.Op != OpConst16 {
9143 break
9144 }
9145 c := v_1_0.AuxInt
9146 v_1_1 := v_1.Args[1]
9147 if v_1_1.Op != OpTrunc64to16 {
9148 break
9149 }
9150 v_1_1_0 := v_1_1.Args[0]
9151 if v_1_1_0.Op != OpRsh64Ux64 {
9152 break
9153 }
9154 _ = v_1_1_0.Args[1]
9155 mul := v_1_1_0.Args[0]
9156 if mul.Op != OpMul64 {
9157 break
9158 }
9159 _ = mul.Args[1]
9160 mul_0 := mul.Args[0]
9161 if mul_0.Op != OpConst64 {
9162 break
9163 }
9164 m := mul_0.AuxInt
9165 mul_1 := mul.Args[1]
9166 if mul_1.Op != OpZeroExt16to64 {
9167 break
9168 }
9169 if x != mul_1.Args[0] {
9170 break
9171 }
9172 v_1_1_0_1 := v_1_1_0.Args[1]
9173 if v_1_1_0_1.Op != OpConst64 {
9174 break
9175 }
9176 s := v_1_1_0_1.AuxInt
9177 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9178 break
9179 }
9180 v.reset(OpLeq16U)
9181 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9182 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9183 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9184 v2.AuxInt = int64(int16(udivisible(16, c).m))
9185 v1.AddArg(v2)
9186 v1.AddArg(x)
9187 v0.AddArg(v1)
9188 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9189 v3.AuxInt = int64(16 - udivisible(16, c).k)
9190 v0.AddArg(v3)
9191 v.AddArg(v0)
9192 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9193 v4.AuxInt = int64(int16(udivisible(16, c).max))
9194 v.AddArg(v4)
9195 return true
9196 }
9197
9198
9199
9200 for {
9201 _ = v.Args[1]
9202 x := v.Args[0]
9203 v_1 := v.Args[1]
9204 if v_1.Op != OpMul16 {
9205 break
9206 }
9207 _ = v_1.Args[1]
9208 v_1_0 := v_1.Args[0]
9209 if v_1_0.Op != OpConst16 {
9210 break
9211 }
9212 c := v_1_0.AuxInt
9213 v_1_1 := v_1.Args[1]
9214 if v_1_1.Op != OpTrunc64to16 {
9215 break
9216 }
9217 v_1_1_0 := v_1_1.Args[0]
9218 if v_1_1_0.Op != OpRsh64Ux64 {
9219 break
9220 }
9221 _ = v_1_1_0.Args[1]
9222 mul := v_1_1_0.Args[0]
9223 if mul.Op != OpMul64 {
9224 break
9225 }
9226 _ = mul.Args[1]
9227 mul_0 := mul.Args[0]
9228 if mul_0.Op != OpZeroExt16to64 {
9229 break
9230 }
9231 if x != mul_0.Args[0] {
9232 break
9233 }
9234 mul_1 := mul.Args[1]
9235 if mul_1.Op != OpConst64 {
9236 break
9237 }
9238 m := mul_1.AuxInt
9239 v_1_1_0_1 := v_1_1_0.Args[1]
9240 if v_1_1_0_1.Op != OpConst64 {
9241 break
9242 }
9243 s := v_1_1_0_1.AuxInt
9244 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9245 break
9246 }
9247 v.reset(OpLeq16U)
9248 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9249 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9250 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9251 v2.AuxInt = int64(int16(udivisible(16, c).m))
9252 v1.AddArg(v2)
9253 v1.AddArg(x)
9254 v0.AddArg(v1)
9255 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9256 v3.AuxInt = int64(16 - udivisible(16, c).k)
9257 v0.AddArg(v3)
9258 v.AddArg(v0)
9259 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9260 v4.AuxInt = int64(int16(udivisible(16, c).max))
9261 v.AddArg(v4)
9262 return true
9263 }
9264
9265
9266
9267 for {
9268 _ = v.Args[1]
9269 x := v.Args[0]
9270 v_1 := v.Args[1]
9271 if v_1.Op != OpMul16 {
9272 break
9273 }
9274 _ = v_1.Args[1]
9275 v_1_0 := v_1.Args[0]
9276 if v_1_0.Op != OpTrunc64to16 {
9277 break
9278 }
9279 v_1_0_0 := v_1_0.Args[0]
9280 if v_1_0_0.Op != OpRsh64Ux64 {
9281 break
9282 }
9283 _ = v_1_0_0.Args[1]
9284 mul := v_1_0_0.Args[0]
9285 if mul.Op != OpMul64 {
9286 break
9287 }
9288 _ = mul.Args[1]
9289 mul_0 := mul.Args[0]
9290 if mul_0.Op != OpConst64 {
9291 break
9292 }
9293 m := mul_0.AuxInt
9294 mul_1 := mul.Args[1]
9295 if mul_1.Op != OpZeroExt16to64 {
9296 break
9297 }
9298 if x != mul_1.Args[0] {
9299 break
9300 }
9301 v_1_0_0_1 := v_1_0_0.Args[1]
9302 if v_1_0_0_1.Op != OpConst64 {
9303 break
9304 }
9305 s := v_1_0_0_1.AuxInt
9306 v_1_1 := v_1.Args[1]
9307 if v_1_1.Op != OpConst16 {
9308 break
9309 }
9310 c := v_1_1.AuxInt
9311 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9312 break
9313 }
9314 v.reset(OpLeq16U)
9315 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9316 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9317 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9318 v2.AuxInt = int64(int16(udivisible(16, c).m))
9319 v1.AddArg(v2)
9320 v1.AddArg(x)
9321 v0.AddArg(v1)
9322 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9323 v3.AuxInt = int64(16 - udivisible(16, c).k)
9324 v0.AddArg(v3)
9325 v.AddArg(v0)
9326 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9327 v4.AuxInt = int64(int16(udivisible(16, c).max))
9328 v.AddArg(v4)
9329 return true
9330 }
9331
9332
9333
9334 for {
9335 _ = v.Args[1]
9336 x := v.Args[0]
9337 v_1 := v.Args[1]
9338 if v_1.Op != OpMul16 {
9339 break
9340 }
9341 _ = v_1.Args[1]
9342 v_1_0 := v_1.Args[0]
9343 if v_1_0.Op != OpTrunc64to16 {
9344 break
9345 }
9346 v_1_0_0 := v_1_0.Args[0]
9347 if v_1_0_0.Op != OpRsh64Ux64 {
9348 break
9349 }
9350 _ = v_1_0_0.Args[1]
9351 mul := v_1_0_0.Args[0]
9352 if mul.Op != OpMul64 {
9353 break
9354 }
9355 _ = mul.Args[1]
9356 mul_0 := mul.Args[0]
9357 if mul_0.Op != OpZeroExt16to64 {
9358 break
9359 }
9360 if x != mul_0.Args[0] {
9361 break
9362 }
9363 mul_1 := mul.Args[1]
9364 if mul_1.Op != OpConst64 {
9365 break
9366 }
9367 m := mul_1.AuxInt
9368 v_1_0_0_1 := v_1_0_0.Args[1]
9369 if v_1_0_0_1.Op != OpConst64 {
9370 break
9371 }
9372 s := v_1_0_0_1.AuxInt
9373 v_1_1 := v_1.Args[1]
9374 if v_1_1.Op != OpConst16 {
9375 break
9376 }
9377 c := v_1_1.AuxInt
9378 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9379 break
9380 }
9381 v.reset(OpLeq16U)
9382 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9383 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9384 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9385 v2.AuxInt = int64(int16(udivisible(16, c).m))
9386 v1.AddArg(v2)
9387 v1.AddArg(x)
9388 v0.AddArg(v1)
9389 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9390 v3.AuxInt = int64(16 - udivisible(16, c).k)
9391 v0.AddArg(v3)
9392 v.AddArg(v0)
9393 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9394 v4.AuxInt = int64(int16(udivisible(16, c).max))
9395 v.AddArg(v4)
9396 return true
9397 }
9398
9399
9400
9401 for {
9402 x := v.Args[1]
9403 v_0 := v.Args[0]
9404 if v_0.Op != OpMul16 {
9405 break
9406 }
9407 _ = v_0.Args[1]
9408 v_0_0 := v_0.Args[0]
9409 if v_0_0.Op != OpConst16 {
9410 break
9411 }
9412 c := v_0_0.AuxInt
9413 v_0_1 := v_0.Args[1]
9414 if v_0_1.Op != OpTrunc64to16 {
9415 break
9416 }
9417 v_0_1_0 := v_0_1.Args[0]
9418 if v_0_1_0.Op != OpRsh64Ux64 {
9419 break
9420 }
9421 _ = v_0_1_0.Args[1]
9422 mul := v_0_1_0.Args[0]
9423 if mul.Op != OpMul64 {
9424 break
9425 }
9426 _ = mul.Args[1]
9427 mul_0 := mul.Args[0]
9428 if mul_0.Op != OpConst64 {
9429 break
9430 }
9431 m := mul_0.AuxInt
9432 mul_1 := mul.Args[1]
9433 if mul_1.Op != OpZeroExt16to64 {
9434 break
9435 }
9436 if x != mul_1.Args[0] {
9437 break
9438 }
9439 v_0_1_0_1 := v_0_1_0.Args[1]
9440 if v_0_1_0_1.Op != OpConst64 {
9441 break
9442 }
9443 s := v_0_1_0_1.AuxInt
9444 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9445 break
9446 }
9447 v.reset(OpLeq16U)
9448 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9449 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9450 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9451 v2.AuxInt = int64(int16(udivisible(16, c).m))
9452 v1.AddArg(v2)
9453 v1.AddArg(x)
9454 v0.AddArg(v1)
9455 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9456 v3.AuxInt = int64(16 - udivisible(16, c).k)
9457 v0.AddArg(v3)
9458 v.AddArg(v0)
9459 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9460 v4.AuxInt = int64(int16(udivisible(16, c).max))
9461 v.AddArg(v4)
9462 return true
9463 }
9464
9465
9466
9467 for {
9468 x := v.Args[1]
9469 v_0 := v.Args[0]
9470 if v_0.Op != OpMul16 {
9471 break
9472 }
9473 _ = v_0.Args[1]
9474 v_0_0 := v_0.Args[0]
9475 if v_0_0.Op != OpConst16 {
9476 break
9477 }
9478 c := v_0_0.AuxInt
9479 v_0_1 := v_0.Args[1]
9480 if v_0_1.Op != OpTrunc64to16 {
9481 break
9482 }
9483 v_0_1_0 := v_0_1.Args[0]
9484 if v_0_1_0.Op != OpRsh64Ux64 {
9485 break
9486 }
9487 _ = v_0_1_0.Args[1]
9488 mul := v_0_1_0.Args[0]
9489 if mul.Op != OpMul64 {
9490 break
9491 }
9492 _ = mul.Args[1]
9493 mul_0 := mul.Args[0]
9494 if mul_0.Op != OpZeroExt16to64 {
9495 break
9496 }
9497 if x != mul_0.Args[0] {
9498 break
9499 }
9500 mul_1 := mul.Args[1]
9501 if mul_1.Op != OpConst64 {
9502 break
9503 }
9504 m := mul_1.AuxInt
9505 v_0_1_0_1 := v_0_1_0.Args[1]
9506 if v_0_1_0_1.Op != OpConst64 {
9507 break
9508 }
9509 s := v_0_1_0_1.AuxInt
9510 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9511 break
9512 }
9513 v.reset(OpLeq16U)
9514 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9515 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9516 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9517 v2.AuxInt = int64(int16(udivisible(16, c).m))
9518 v1.AddArg(v2)
9519 v1.AddArg(x)
9520 v0.AddArg(v1)
9521 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9522 v3.AuxInt = int64(16 - udivisible(16, c).k)
9523 v0.AddArg(v3)
9524 v.AddArg(v0)
9525 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9526 v4.AuxInt = int64(int16(udivisible(16, c).max))
9527 v.AddArg(v4)
9528 return true
9529 }
9530
9531
9532
9533 for {
9534 x := v.Args[1]
9535 v_0 := v.Args[0]
9536 if v_0.Op != OpMul16 {
9537 break
9538 }
9539 _ = v_0.Args[1]
9540 v_0_0 := v_0.Args[0]
9541 if v_0_0.Op != OpTrunc64to16 {
9542 break
9543 }
9544 v_0_0_0 := v_0_0.Args[0]
9545 if v_0_0_0.Op != OpRsh64Ux64 {
9546 break
9547 }
9548 _ = v_0_0_0.Args[1]
9549 mul := v_0_0_0.Args[0]
9550 if mul.Op != OpMul64 {
9551 break
9552 }
9553 _ = mul.Args[1]
9554 mul_0 := mul.Args[0]
9555 if mul_0.Op != OpConst64 {
9556 break
9557 }
9558 m := mul_0.AuxInt
9559 mul_1 := mul.Args[1]
9560 if mul_1.Op != OpZeroExt16to64 {
9561 break
9562 }
9563 if x != mul_1.Args[0] {
9564 break
9565 }
9566 v_0_0_0_1 := v_0_0_0.Args[1]
9567 if v_0_0_0_1.Op != OpConst64 {
9568 break
9569 }
9570 s := v_0_0_0_1.AuxInt
9571 v_0_1 := v_0.Args[1]
9572 if v_0_1.Op != OpConst16 {
9573 break
9574 }
9575 c := v_0_1.AuxInt
9576 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9577 break
9578 }
9579 v.reset(OpLeq16U)
9580 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9581 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9582 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9583 v2.AuxInt = int64(int16(udivisible(16, c).m))
9584 v1.AddArg(v2)
9585 v1.AddArg(x)
9586 v0.AddArg(v1)
9587 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9588 v3.AuxInt = int64(16 - udivisible(16, c).k)
9589 v0.AddArg(v3)
9590 v.AddArg(v0)
9591 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9592 v4.AuxInt = int64(int16(udivisible(16, c).max))
9593 v.AddArg(v4)
9594 return true
9595 }
9596
9597
9598
9599 for {
9600 x := v.Args[1]
9601 v_0 := v.Args[0]
9602 if v_0.Op != OpMul16 {
9603 break
9604 }
9605 _ = v_0.Args[1]
9606 v_0_0 := v_0.Args[0]
9607 if v_0_0.Op != OpTrunc64to16 {
9608 break
9609 }
9610 v_0_0_0 := v_0_0.Args[0]
9611 if v_0_0_0.Op != OpRsh64Ux64 {
9612 break
9613 }
9614 _ = v_0_0_0.Args[1]
9615 mul := v_0_0_0.Args[0]
9616 if mul.Op != OpMul64 {
9617 break
9618 }
9619 _ = mul.Args[1]
9620 mul_0 := mul.Args[0]
9621 if mul_0.Op != OpZeroExt16to64 {
9622 break
9623 }
9624 if x != mul_0.Args[0] {
9625 break
9626 }
9627 mul_1 := mul.Args[1]
9628 if mul_1.Op != OpConst64 {
9629 break
9630 }
9631 m := mul_1.AuxInt
9632 v_0_0_0_1 := v_0_0_0.Args[1]
9633 if v_0_0_0_1.Op != OpConst64 {
9634 break
9635 }
9636 s := v_0_0_0_1.AuxInt
9637 v_0_1 := v_0.Args[1]
9638 if v_0_1.Op != OpConst16 {
9639 break
9640 }
9641 c := v_0_1.AuxInt
9642 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) {
9643 break
9644 }
9645 v.reset(OpLeq16U)
9646 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9647 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9648 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9649 v2.AuxInt = int64(int16(udivisible(16, c).m))
9650 v1.AddArg(v2)
9651 v1.AddArg(x)
9652 v0.AddArg(v1)
9653 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9654 v3.AuxInt = int64(16 - udivisible(16, c).k)
9655 v0.AddArg(v3)
9656 v.AddArg(v0)
9657 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9658 v4.AuxInt = int64(int16(udivisible(16, c).max))
9659 v.AddArg(v4)
9660 return true
9661 }
9662
9663
9664
9665 for {
9666 _ = v.Args[1]
9667 x := v.Args[0]
9668 v_1 := v.Args[1]
9669 if v_1.Op != OpMul16 {
9670 break
9671 }
9672 _ = v_1.Args[1]
9673 v_1_0 := v_1.Args[0]
9674 if v_1_0.Op != OpConst16 {
9675 break
9676 }
9677 c := v_1_0.AuxInt
9678 v_1_1 := v_1.Args[1]
9679 if v_1_1.Op != OpTrunc32to16 {
9680 break
9681 }
9682 v_1_1_0 := v_1_1.Args[0]
9683 if v_1_1_0.Op != OpRsh32Ux64 {
9684 break
9685 }
9686 _ = v_1_1_0.Args[1]
9687 mul := v_1_1_0.Args[0]
9688 if mul.Op != OpMul32 {
9689 break
9690 }
9691 _ = mul.Args[1]
9692 mul_0 := mul.Args[0]
9693 if mul_0.Op != OpConst32 {
9694 break
9695 }
9696 m := mul_0.AuxInt
9697 mul_1 := mul.Args[1]
9698 if mul_1.Op != OpZeroExt16to32 {
9699 break
9700 }
9701 if x != mul_1.Args[0] {
9702 break
9703 }
9704 v_1_1_0_1 := v_1_1_0.Args[1]
9705 if v_1_1_0_1.Op != OpConst64 {
9706 break
9707 }
9708 s := v_1_1_0_1.AuxInt
9709 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
9710 break
9711 }
9712 v.reset(OpLeq16U)
9713 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9714 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9715 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9716 v2.AuxInt = int64(int16(udivisible(16, c).m))
9717 v1.AddArg(v2)
9718 v1.AddArg(x)
9719 v0.AddArg(v1)
9720 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9721 v3.AuxInt = int64(16 - udivisible(16, c).k)
9722 v0.AddArg(v3)
9723 v.AddArg(v0)
9724 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9725 v4.AuxInt = int64(int16(udivisible(16, c).max))
9726 v.AddArg(v4)
9727 return true
9728 }
9729 return false
9730 }
9731 func rewriteValuegeneric_OpEq16_20(v *Value) bool {
9732 b := v.Block
9733 typ := &b.Func.Config.Types
9734
9735
9736
9737 for {
9738 _ = v.Args[1]
9739 x := v.Args[0]
9740 v_1 := v.Args[1]
9741 if v_1.Op != OpMul16 {
9742 break
9743 }
9744 _ = v_1.Args[1]
9745 v_1_0 := v_1.Args[0]
9746 if v_1_0.Op != OpConst16 {
9747 break
9748 }
9749 c := v_1_0.AuxInt
9750 v_1_1 := v_1.Args[1]
9751 if v_1_1.Op != OpTrunc32to16 {
9752 break
9753 }
9754 v_1_1_0 := v_1_1.Args[0]
9755 if v_1_1_0.Op != OpRsh32Ux64 {
9756 break
9757 }
9758 _ = v_1_1_0.Args[1]
9759 mul := v_1_1_0.Args[0]
9760 if mul.Op != OpMul32 {
9761 break
9762 }
9763 _ = mul.Args[1]
9764 mul_0 := mul.Args[0]
9765 if mul_0.Op != OpZeroExt16to32 {
9766 break
9767 }
9768 if x != mul_0.Args[0] {
9769 break
9770 }
9771 mul_1 := mul.Args[1]
9772 if mul_1.Op != OpConst32 {
9773 break
9774 }
9775 m := mul_1.AuxInt
9776 v_1_1_0_1 := v_1_1_0.Args[1]
9777 if v_1_1_0_1.Op != OpConst64 {
9778 break
9779 }
9780 s := v_1_1_0_1.AuxInt
9781 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
9782 break
9783 }
9784 v.reset(OpLeq16U)
9785 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9786 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9787 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9788 v2.AuxInt = int64(int16(udivisible(16, c).m))
9789 v1.AddArg(v2)
9790 v1.AddArg(x)
9791 v0.AddArg(v1)
9792 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9793 v3.AuxInt = int64(16 - udivisible(16, c).k)
9794 v0.AddArg(v3)
9795 v.AddArg(v0)
9796 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9797 v4.AuxInt = int64(int16(udivisible(16, c).max))
9798 v.AddArg(v4)
9799 return true
9800 }
9801
9802
9803
9804 for {
9805 _ = v.Args[1]
9806 x := v.Args[0]
9807 v_1 := v.Args[1]
9808 if v_1.Op != OpMul16 {
9809 break
9810 }
9811 _ = v_1.Args[1]
9812 v_1_0 := v_1.Args[0]
9813 if v_1_0.Op != OpTrunc32to16 {
9814 break
9815 }
9816 v_1_0_0 := v_1_0.Args[0]
9817 if v_1_0_0.Op != OpRsh32Ux64 {
9818 break
9819 }
9820 _ = v_1_0_0.Args[1]
9821 mul := v_1_0_0.Args[0]
9822 if mul.Op != OpMul32 {
9823 break
9824 }
9825 _ = mul.Args[1]
9826 mul_0 := mul.Args[0]
9827 if mul_0.Op != OpConst32 {
9828 break
9829 }
9830 m := mul_0.AuxInt
9831 mul_1 := mul.Args[1]
9832 if mul_1.Op != OpZeroExt16to32 {
9833 break
9834 }
9835 if x != mul_1.Args[0] {
9836 break
9837 }
9838 v_1_0_0_1 := v_1_0_0.Args[1]
9839 if v_1_0_0_1.Op != OpConst64 {
9840 break
9841 }
9842 s := v_1_0_0_1.AuxInt
9843 v_1_1 := v_1.Args[1]
9844 if v_1_1.Op != OpConst16 {
9845 break
9846 }
9847 c := v_1_1.AuxInt
9848 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
9849 break
9850 }
9851 v.reset(OpLeq16U)
9852 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9853 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9854 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9855 v2.AuxInt = int64(int16(udivisible(16, c).m))
9856 v1.AddArg(v2)
9857 v1.AddArg(x)
9858 v0.AddArg(v1)
9859 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9860 v3.AuxInt = int64(16 - udivisible(16, c).k)
9861 v0.AddArg(v3)
9862 v.AddArg(v0)
9863 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9864 v4.AuxInt = int64(int16(udivisible(16, c).max))
9865 v.AddArg(v4)
9866 return true
9867 }
9868
9869
9870
9871 for {
9872 _ = v.Args[1]
9873 x := v.Args[0]
9874 v_1 := v.Args[1]
9875 if v_1.Op != OpMul16 {
9876 break
9877 }
9878 _ = v_1.Args[1]
9879 v_1_0 := v_1.Args[0]
9880 if v_1_0.Op != OpTrunc32to16 {
9881 break
9882 }
9883 v_1_0_0 := v_1_0.Args[0]
9884 if v_1_0_0.Op != OpRsh32Ux64 {
9885 break
9886 }
9887 _ = v_1_0_0.Args[1]
9888 mul := v_1_0_0.Args[0]
9889 if mul.Op != OpMul32 {
9890 break
9891 }
9892 _ = mul.Args[1]
9893 mul_0 := mul.Args[0]
9894 if mul_0.Op != OpZeroExt16to32 {
9895 break
9896 }
9897 if x != mul_0.Args[0] {
9898 break
9899 }
9900 mul_1 := mul.Args[1]
9901 if mul_1.Op != OpConst32 {
9902 break
9903 }
9904 m := mul_1.AuxInt
9905 v_1_0_0_1 := v_1_0_0.Args[1]
9906 if v_1_0_0_1.Op != OpConst64 {
9907 break
9908 }
9909 s := v_1_0_0_1.AuxInt
9910 v_1_1 := v_1.Args[1]
9911 if v_1_1.Op != OpConst16 {
9912 break
9913 }
9914 c := v_1_1.AuxInt
9915 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
9916 break
9917 }
9918 v.reset(OpLeq16U)
9919 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9920 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9921 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9922 v2.AuxInt = int64(int16(udivisible(16, c).m))
9923 v1.AddArg(v2)
9924 v1.AddArg(x)
9925 v0.AddArg(v1)
9926 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9927 v3.AuxInt = int64(16 - udivisible(16, c).k)
9928 v0.AddArg(v3)
9929 v.AddArg(v0)
9930 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9931 v4.AuxInt = int64(int16(udivisible(16, c).max))
9932 v.AddArg(v4)
9933 return true
9934 }
9935
9936
9937
9938 for {
9939 x := v.Args[1]
9940 v_0 := v.Args[0]
9941 if v_0.Op != OpMul16 {
9942 break
9943 }
9944 _ = v_0.Args[1]
9945 v_0_0 := v_0.Args[0]
9946 if v_0_0.Op != OpConst16 {
9947 break
9948 }
9949 c := v_0_0.AuxInt
9950 v_0_1 := v_0.Args[1]
9951 if v_0_1.Op != OpTrunc32to16 {
9952 break
9953 }
9954 v_0_1_0 := v_0_1.Args[0]
9955 if v_0_1_0.Op != OpRsh32Ux64 {
9956 break
9957 }
9958 _ = v_0_1_0.Args[1]
9959 mul := v_0_1_0.Args[0]
9960 if mul.Op != OpMul32 {
9961 break
9962 }
9963 _ = mul.Args[1]
9964 mul_0 := mul.Args[0]
9965 if mul_0.Op != OpConst32 {
9966 break
9967 }
9968 m := mul_0.AuxInt
9969 mul_1 := mul.Args[1]
9970 if mul_1.Op != OpZeroExt16to32 {
9971 break
9972 }
9973 if x != mul_1.Args[0] {
9974 break
9975 }
9976 v_0_1_0_1 := v_0_1_0.Args[1]
9977 if v_0_1_0_1.Op != OpConst64 {
9978 break
9979 }
9980 s := v_0_1_0_1.AuxInt
9981 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
9982 break
9983 }
9984 v.reset(OpLeq16U)
9985 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
9986 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
9987 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9988 v2.AuxInt = int64(int16(udivisible(16, c).m))
9989 v1.AddArg(v2)
9990 v1.AddArg(x)
9991 v0.AddArg(v1)
9992 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9993 v3.AuxInt = int64(16 - udivisible(16, c).k)
9994 v0.AddArg(v3)
9995 v.AddArg(v0)
9996 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
9997 v4.AuxInt = int64(int16(udivisible(16, c).max))
9998 v.AddArg(v4)
9999 return true
10000 }
10001
10002
10003
10004 for {
10005 x := v.Args[1]
10006 v_0 := v.Args[0]
10007 if v_0.Op != OpMul16 {
10008 break
10009 }
10010 _ = v_0.Args[1]
10011 v_0_0 := v_0.Args[0]
10012 if v_0_0.Op != OpConst16 {
10013 break
10014 }
10015 c := v_0_0.AuxInt
10016 v_0_1 := v_0.Args[1]
10017 if v_0_1.Op != OpTrunc32to16 {
10018 break
10019 }
10020 v_0_1_0 := v_0_1.Args[0]
10021 if v_0_1_0.Op != OpRsh32Ux64 {
10022 break
10023 }
10024 _ = v_0_1_0.Args[1]
10025 mul := v_0_1_0.Args[0]
10026 if mul.Op != OpMul32 {
10027 break
10028 }
10029 _ = mul.Args[1]
10030 mul_0 := mul.Args[0]
10031 if mul_0.Op != OpZeroExt16to32 {
10032 break
10033 }
10034 if x != mul_0.Args[0] {
10035 break
10036 }
10037 mul_1 := mul.Args[1]
10038 if mul_1.Op != OpConst32 {
10039 break
10040 }
10041 m := mul_1.AuxInt
10042 v_0_1_0_1 := v_0_1_0.Args[1]
10043 if v_0_1_0_1.Op != OpConst64 {
10044 break
10045 }
10046 s := v_0_1_0_1.AuxInt
10047 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10048 break
10049 }
10050 v.reset(OpLeq16U)
10051 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10052 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10053 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10054 v2.AuxInt = int64(int16(udivisible(16, c).m))
10055 v1.AddArg(v2)
10056 v1.AddArg(x)
10057 v0.AddArg(v1)
10058 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10059 v3.AuxInt = int64(16 - udivisible(16, c).k)
10060 v0.AddArg(v3)
10061 v.AddArg(v0)
10062 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10063 v4.AuxInt = int64(int16(udivisible(16, c).max))
10064 v.AddArg(v4)
10065 return true
10066 }
10067
10068
10069
10070 for {
10071 x := v.Args[1]
10072 v_0 := v.Args[0]
10073 if v_0.Op != OpMul16 {
10074 break
10075 }
10076 _ = v_0.Args[1]
10077 v_0_0 := v_0.Args[0]
10078 if v_0_0.Op != OpTrunc32to16 {
10079 break
10080 }
10081 v_0_0_0 := v_0_0.Args[0]
10082 if v_0_0_0.Op != OpRsh32Ux64 {
10083 break
10084 }
10085 _ = v_0_0_0.Args[1]
10086 mul := v_0_0_0.Args[0]
10087 if mul.Op != OpMul32 {
10088 break
10089 }
10090 _ = mul.Args[1]
10091 mul_0 := mul.Args[0]
10092 if mul_0.Op != OpConst32 {
10093 break
10094 }
10095 m := mul_0.AuxInt
10096 mul_1 := mul.Args[1]
10097 if mul_1.Op != OpZeroExt16to32 {
10098 break
10099 }
10100 if x != mul_1.Args[0] {
10101 break
10102 }
10103 v_0_0_0_1 := v_0_0_0.Args[1]
10104 if v_0_0_0_1.Op != OpConst64 {
10105 break
10106 }
10107 s := v_0_0_0_1.AuxInt
10108 v_0_1 := v_0.Args[1]
10109 if v_0_1.Op != OpConst16 {
10110 break
10111 }
10112 c := v_0_1.AuxInt
10113 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10114 break
10115 }
10116 v.reset(OpLeq16U)
10117 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10118 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10119 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10120 v2.AuxInt = int64(int16(udivisible(16, c).m))
10121 v1.AddArg(v2)
10122 v1.AddArg(x)
10123 v0.AddArg(v1)
10124 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10125 v3.AuxInt = int64(16 - udivisible(16, c).k)
10126 v0.AddArg(v3)
10127 v.AddArg(v0)
10128 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10129 v4.AuxInt = int64(int16(udivisible(16, c).max))
10130 v.AddArg(v4)
10131 return true
10132 }
10133
10134
10135
10136 for {
10137 x := v.Args[1]
10138 v_0 := v.Args[0]
10139 if v_0.Op != OpMul16 {
10140 break
10141 }
10142 _ = v_0.Args[1]
10143 v_0_0 := v_0.Args[0]
10144 if v_0_0.Op != OpTrunc32to16 {
10145 break
10146 }
10147 v_0_0_0 := v_0_0.Args[0]
10148 if v_0_0_0.Op != OpRsh32Ux64 {
10149 break
10150 }
10151 _ = v_0_0_0.Args[1]
10152 mul := v_0_0_0.Args[0]
10153 if mul.Op != OpMul32 {
10154 break
10155 }
10156 _ = mul.Args[1]
10157 mul_0 := mul.Args[0]
10158 if mul_0.Op != OpZeroExt16to32 {
10159 break
10160 }
10161 if x != mul_0.Args[0] {
10162 break
10163 }
10164 mul_1 := mul.Args[1]
10165 if mul_1.Op != OpConst32 {
10166 break
10167 }
10168 m := mul_1.AuxInt
10169 v_0_0_0_1 := v_0_0_0.Args[1]
10170 if v_0_0_0_1.Op != OpConst64 {
10171 break
10172 }
10173 s := v_0_0_0_1.AuxInt
10174 v_0_1 := v_0.Args[1]
10175 if v_0_1.Op != OpConst16 {
10176 break
10177 }
10178 c := v_0_1.AuxInt
10179 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10180 break
10181 }
10182 v.reset(OpLeq16U)
10183 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10184 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10185 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10186 v2.AuxInt = int64(int16(udivisible(16, c).m))
10187 v1.AddArg(v2)
10188 v1.AddArg(x)
10189 v0.AddArg(v1)
10190 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10191 v3.AuxInt = int64(16 - udivisible(16, c).k)
10192 v0.AddArg(v3)
10193 v.AddArg(v0)
10194 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10195 v4.AuxInt = int64(int16(udivisible(16, c).max))
10196 v.AddArg(v4)
10197 return true
10198 }
10199
10200
10201
10202 for {
10203 _ = v.Args[1]
10204 x := v.Args[0]
10205 v_1 := v.Args[1]
10206 if v_1.Op != OpMul16 {
10207 break
10208 }
10209 _ = v_1.Args[1]
10210 v_1_0 := v_1.Args[0]
10211 if v_1_0.Op != OpConst16 {
10212 break
10213 }
10214 c := v_1_0.AuxInt
10215 v_1_1 := v_1.Args[1]
10216 if v_1_1.Op != OpTrunc32to16 {
10217 break
10218 }
10219 v_1_1_0 := v_1_1.Args[0]
10220 if v_1_1_0.Op != OpRsh32Ux64 {
10221 break
10222 }
10223 _ = v_1_1_0.Args[1]
10224 mul := v_1_1_0.Args[0]
10225 if mul.Op != OpMul32 {
10226 break
10227 }
10228 _ = mul.Args[1]
10229 mul_0 := mul.Args[0]
10230 if mul_0.Op != OpConst32 {
10231 break
10232 }
10233 m := mul_0.AuxInt
10234 mul_1 := mul.Args[1]
10235 if mul_1.Op != OpRsh32Ux64 {
10236 break
10237 }
10238 _ = mul_1.Args[1]
10239 mul_1_0 := mul_1.Args[0]
10240 if mul_1_0.Op != OpZeroExt16to32 {
10241 break
10242 }
10243 if x != mul_1_0.Args[0] {
10244 break
10245 }
10246 mul_1_1 := mul_1.Args[1]
10247 if mul_1_1.Op != OpConst64 {
10248 break
10249 }
10250 if mul_1_1.AuxInt != 1 {
10251 break
10252 }
10253 v_1_1_0_1 := v_1_1_0.Args[1]
10254 if v_1_1_0_1.Op != OpConst64 {
10255 break
10256 }
10257 s := v_1_1_0_1.AuxInt
10258 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10259 break
10260 }
10261 v.reset(OpLeq16U)
10262 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10263 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10264 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10265 v2.AuxInt = int64(int16(udivisible(16, c).m))
10266 v1.AddArg(v2)
10267 v1.AddArg(x)
10268 v0.AddArg(v1)
10269 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10270 v3.AuxInt = int64(16 - udivisible(16, c).k)
10271 v0.AddArg(v3)
10272 v.AddArg(v0)
10273 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10274 v4.AuxInt = int64(int16(udivisible(16, c).max))
10275 v.AddArg(v4)
10276 return true
10277 }
10278
10279
10280
10281 for {
10282 _ = v.Args[1]
10283 x := v.Args[0]
10284 v_1 := v.Args[1]
10285 if v_1.Op != OpMul16 {
10286 break
10287 }
10288 _ = v_1.Args[1]
10289 v_1_0 := v_1.Args[0]
10290 if v_1_0.Op != OpConst16 {
10291 break
10292 }
10293 c := v_1_0.AuxInt
10294 v_1_1 := v_1.Args[1]
10295 if v_1_1.Op != OpTrunc32to16 {
10296 break
10297 }
10298 v_1_1_0 := v_1_1.Args[0]
10299 if v_1_1_0.Op != OpRsh32Ux64 {
10300 break
10301 }
10302 _ = v_1_1_0.Args[1]
10303 mul := v_1_1_0.Args[0]
10304 if mul.Op != OpMul32 {
10305 break
10306 }
10307 _ = mul.Args[1]
10308 mul_0 := mul.Args[0]
10309 if mul_0.Op != OpRsh32Ux64 {
10310 break
10311 }
10312 _ = mul_0.Args[1]
10313 mul_0_0 := mul_0.Args[0]
10314 if mul_0_0.Op != OpZeroExt16to32 {
10315 break
10316 }
10317 if x != mul_0_0.Args[0] {
10318 break
10319 }
10320 mul_0_1 := mul_0.Args[1]
10321 if mul_0_1.Op != OpConst64 {
10322 break
10323 }
10324 if mul_0_1.AuxInt != 1 {
10325 break
10326 }
10327 mul_1 := mul.Args[1]
10328 if mul_1.Op != OpConst32 {
10329 break
10330 }
10331 m := mul_1.AuxInt
10332 v_1_1_0_1 := v_1_1_0.Args[1]
10333 if v_1_1_0_1.Op != OpConst64 {
10334 break
10335 }
10336 s := v_1_1_0_1.AuxInt
10337 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10338 break
10339 }
10340 v.reset(OpLeq16U)
10341 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10342 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10343 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10344 v2.AuxInt = int64(int16(udivisible(16, c).m))
10345 v1.AddArg(v2)
10346 v1.AddArg(x)
10347 v0.AddArg(v1)
10348 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10349 v3.AuxInt = int64(16 - udivisible(16, c).k)
10350 v0.AddArg(v3)
10351 v.AddArg(v0)
10352 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10353 v4.AuxInt = int64(int16(udivisible(16, c).max))
10354 v.AddArg(v4)
10355 return true
10356 }
10357
10358
10359
10360 for {
10361 _ = v.Args[1]
10362 x := v.Args[0]
10363 v_1 := v.Args[1]
10364 if v_1.Op != OpMul16 {
10365 break
10366 }
10367 _ = v_1.Args[1]
10368 v_1_0 := v_1.Args[0]
10369 if v_1_0.Op != OpTrunc32to16 {
10370 break
10371 }
10372 v_1_0_0 := v_1_0.Args[0]
10373 if v_1_0_0.Op != OpRsh32Ux64 {
10374 break
10375 }
10376 _ = v_1_0_0.Args[1]
10377 mul := v_1_0_0.Args[0]
10378 if mul.Op != OpMul32 {
10379 break
10380 }
10381 _ = mul.Args[1]
10382 mul_0 := mul.Args[0]
10383 if mul_0.Op != OpConst32 {
10384 break
10385 }
10386 m := mul_0.AuxInt
10387 mul_1 := mul.Args[1]
10388 if mul_1.Op != OpRsh32Ux64 {
10389 break
10390 }
10391 _ = mul_1.Args[1]
10392 mul_1_0 := mul_1.Args[0]
10393 if mul_1_0.Op != OpZeroExt16to32 {
10394 break
10395 }
10396 if x != mul_1_0.Args[0] {
10397 break
10398 }
10399 mul_1_1 := mul_1.Args[1]
10400 if mul_1_1.Op != OpConst64 {
10401 break
10402 }
10403 if mul_1_1.AuxInt != 1 {
10404 break
10405 }
10406 v_1_0_0_1 := v_1_0_0.Args[1]
10407 if v_1_0_0_1.Op != OpConst64 {
10408 break
10409 }
10410 s := v_1_0_0_1.AuxInt
10411 v_1_1 := v_1.Args[1]
10412 if v_1_1.Op != OpConst16 {
10413 break
10414 }
10415 c := v_1_1.AuxInt
10416 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10417 break
10418 }
10419 v.reset(OpLeq16U)
10420 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10421 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10422 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10423 v2.AuxInt = int64(int16(udivisible(16, c).m))
10424 v1.AddArg(v2)
10425 v1.AddArg(x)
10426 v0.AddArg(v1)
10427 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10428 v3.AuxInt = int64(16 - udivisible(16, c).k)
10429 v0.AddArg(v3)
10430 v.AddArg(v0)
10431 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10432 v4.AuxInt = int64(int16(udivisible(16, c).max))
10433 v.AddArg(v4)
10434 return true
10435 }
10436 return false
10437 }
10438 func rewriteValuegeneric_OpEq16_30(v *Value) bool {
10439 b := v.Block
10440 typ := &b.Func.Config.Types
10441
10442
10443
10444 for {
10445 _ = v.Args[1]
10446 x := v.Args[0]
10447 v_1 := v.Args[1]
10448 if v_1.Op != OpMul16 {
10449 break
10450 }
10451 _ = v_1.Args[1]
10452 v_1_0 := v_1.Args[0]
10453 if v_1_0.Op != OpTrunc32to16 {
10454 break
10455 }
10456 v_1_0_0 := v_1_0.Args[0]
10457 if v_1_0_0.Op != OpRsh32Ux64 {
10458 break
10459 }
10460 _ = v_1_0_0.Args[1]
10461 mul := v_1_0_0.Args[0]
10462 if mul.Op != OpMul32 {
10463 break
10464 }
10465 _ = mul.Args[1]
10466 mul_0 := mul.Args[0]
10467 if mul_0.Op != OpRsh32Ux64 {
10468 break
10469 }
10470 _ = mul_0.Args[1]
10471 mul_0_0 := mul_0.Args[0]
10472 if mul_0_0.Op != OpZeroExt16to32 {
10473 break
10474 }
10475 if x != mul_0_0.Args[0] {
10476 break
10477 }
10478 mul_0_1 := mul_0.Args[1]
10479 if mul_0_1.Op != OpConst64 {
10480 break
10481 }
10482 if mul_0_1.AuxInt != 1 {
10483 break
10484 }
10485 mul_1 := mul.Args[1]
10486 if mul_1.Op != OpConst32 {
10487 break
10488 }
10489 m := mul_1.AuxInt
10490 v_1_0_0_1 := v_1_0_0.Args[1]
10491 if v_1_0_0_1.Op != OpConst64 {
10492 break
10493 }
10494 s := v_1_0_0_1.AuxInt
10495 v_1_1 := v_1.Args[1]
10496 if v_1_1.Op != OpConst16 {
10497 break
10498 }
10499 c := v_1_1.AuxInt
10500 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10501 break
10502 }
10503 v.reset(OpLeq16U)
10504 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10505 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10506 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10507 v2.AuxInt = int64(int16(udivisible(16, c).m))
10508 v1.AddArg(v2)
10509 v1.AddArg(x)
10510 v0.AddArg(v1)
10511 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10512 v3.AuxInt = int64(16 - udivisible(16, c).k)
10513 v0.AddArg(v3)
10514 v.AddArg(v0)
10515 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10516 v4.AuxInt = int64(int16(udivisible(16, c).max))
10517 v.AddArg(v4)
10518 return true
10519 }
10520
10521
10522
10523 for {
10524 x := v.Args[1]
10525 v_0 := v.Args[0]
10526 if v_0.Op != OpMul16 {
10527 break
10528 }
10529 _ = v_0.Args[1]
10530 v_0_0 := v_0.Args[0]
10531 if v_0_0.Op != OpConst16 {
10532 break
10533 }
10534 c := v_0_0.AuxInt
10535 v_0_1 := v_0.Args[1]
10536 if v_0_1.Op != OpTrunc32to16 {
10537 break
10538 }
10539 v_0_1_0 := v_0_1.Args[0]
10540 if v_0_1_0.Op != OpRsh32Ux64 {
10541 break
10542 }
10543 _ = v_0_1_0.Args[1]
10544 mul := v_0_1_0.Args[0]
10545 if mul.Op != OpMul32 {
10546 break
10547 }
10548 _ = mul.Args[1]
10549 mul_0 := mul.Args[0]
10550 if mul_0.Op != OpConst32 {
10551 break
10552 }
10553 m := mul_0.AuxInt
10554 mul_1 := mul.Args[1]
10555 if mul_1.Op != OpRsh32Ux64 {
10556 break
10557 }
10558 _ = mul_1.Args[1]
10559 mul_1_0 := mul_1.Args[0]
10560 if mul_1_0.Op != OpZeroExt16to32 {
10561 break
10562 }
10563 if x != mul_1_0.Args[0] {
10564 break
10565 }
10566 mul_1_1 := mul_1.Args[1]
10567 if mul_1_1.Op != OpConst64 {
10568 break
10569 }
10570 if mul_1_1.AuxInt != 1 {
10571 break
10572 }
10573 v_0_1_0_1 := v_0_1_0.Args[1]
10574 if v_0_1_0_1.Op != OpConst64 {
10575 break
10576 }
10577 s := v_0_1_0_1.AuxInt
10578 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10579 break
10580 }
10581 v.reset(OpLeq16U)
10582 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10583 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10584 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10585 v2.AuxInt = int64(int16(udivisible(16, c).m))
10586 v1.AddArg(v2)
10587 v1.AddArg(x)
10588 v0.AddArg(v1)
10589 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10590 v3.AuxInt = int64(16 - udivisible(16, c).k)
10591 v0.AddArg(v3)
10592 v.AddArg(v0)
10593 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10594 v4.AuxInt = int64(int16(udivisible(16, c).max))
10595 v.AddArg(v4)
10596 return true
10597 }
10598
10599
10600
10601 for {
10602 x := v.Args[1]
10603 v_0 := v.Args[0]
10604 if v_0.Op != OpMul16 {
10605 break
10606 }
10607 _ = v_0.Args[1]
10608 v_0_0 := v_0.Args[0]
10609 if v_0_0.Op != OpConst16 {
10610 break
10611 }
10612 c := v_0_0.AuxInt
10613 v_0_1 := v_0.Args[1]
10614 if v_0_1.Op != OpTrunc32to16 {
10615 break
10616 }
10617 v_0_1_0 := v_0_1.Args[0]
10618 if v_0_1_0.Op != OpRsh32Ux64 {
10619 break
10620 }
10621 _ = v_0_1_0.Args[1]
10622 mul := v_0_1_0.Args[0]
10623 if mul.Op != OpMul32 {
10624 break
10625 }
10626 _ = mul.Args[1]
10627 mul_0 := mul.Args[0]
10628 if mul_0.Op != OpRsh32Ux64 {
10629 break
10630 }
10631 _ = mul_0.Args[1]
10632 mul_0_0 := mul_0.Args[0]
10633 if mul_0_0.Op != OpZeroExt16to32 {
10634 break
10635 }
10636 if x != mul_0_0.Args[0] {
10637 break
10638 }
10639 mul_0_1 := mul_0.Args[1]
10640 if mul_0_1.Op != OpConst64 {
10641 break
10642 }
10643 if mul_0_1.AuxInt != 1 {
10644 break
10645 }
10646 mul_1 := mul.Args[1]
10647 if mul_1.Op != OpConst32 {
10648 break
10649 }
10650 m := mul_1.AuxInt
10651 v_0_1_0_1 := v_0_1_0.Args[1]
10652 if v_0_1_0_1.Op != OpConst64 {
10653 break
10654 }
10655 s := v_0_1_0_1.AuxInt
10656 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10657 break
10658 }
10659 v.reset(OpLeq16U)
10660 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10661 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10662 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10663 v2.AuxInt = int64(int16(udivisible(16, c).m))
10664 v1.AddArg(v2)
10665 v1.AddArg(x)
10666 v0.AddArg(v1)
10667 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10668 v3.AuxInt = int64(16 - udivisible(16, c).k)
10669 v0.AddArg(v3)
10670 v.AddArg(v0)
10671 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10672 v4.AuxInt = int64(int16(udivisible(16, c).max))
10673 v.AddArg(v4)
10674 return true
10675 }
10676
10677
10678
10679 for {
10680 x := v.Args[1]
10681 v_0 := v.Args[0]
10682 if v_0.Op != OpMul16 {
10683 break
10684 }
10685 _ = v_0.Args[1]
10686 v_0_0 := v_0.Args[0]
10687 if v_0_0.Op != OpTrunc32to16 {
10688 break
10689 }
10690 v_0_0_0 := v_0_0.Args[0]
10691 if v_0_0_0.Op != OpRsh32Ux64 {
10692 break
10693 }
10694 _ = v_0_0_0.Args[1]
10695 mul := v_0_0_0.Args[0]
10696 if mul.Op != OpMul32 {
10697 break
10698 }
10699 _ = mul.Args[1]
10700 mul_0 := mul.Args[0]
10701 if mul_0.Op != OpConst32 {
10702 break
10703 }
10704 m := mul_0.AuxInt
10705 mul_1 := mul.Args[1]
10706 if mul_1.Op != OpRsh32Ux64 {
10707 break
10708 }
10709 _ = mul_1.Args[1]
10710 mul_1_0 := mul_1.Args[0]
10711 if mul_1_0.Op != OpZeroExt16to32 {
10712 break
10713 }
10714 if x != mul_1_0.Args[0] {
10715 break
10716 }
10717 mul_1_1 := mul_1.Args[1]
10718 if mul_1_1.Op != OpConst64 {
10719 break
10720 }
10721 if mul_1_1.AuxInt != 1 {
10722 break
10723 }
10724 v_0_0_0_1 := v_0_0_0.Args[1]
10725 if v_0_0_0_1.Op != OpConst64 {
10726 break
10727 }
10728 s := v_0_0_0_1.AuxInt
10729 v_0_1 := v_0.Args[1]
10730 if v_0_1.Op != OpConst16 {
10731 break
10732 }
10733 c := v_0_1.AuxInt
10734 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10735 break
10736 }
10737 v.reset(OpLeq16U)
10738 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10739 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10740 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10741 v2.AuxInt = int64(int16(udivisible(16, c).m))
10742 v1.AddArg(v2)
10743 v1.AddArg(x)
10744 v0.AddArg(v1)
10745 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10746 v3.AuxInt = int64(16 - udivisible(16, c).k)
10747 v0.AddArg(v3)
10748 v.AddArg(v0)
10749 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10750 v4.AuxInt = int64(int16(udivisible(16, c).max))
10751 v.AddArg(v4)
10752 return true
10753 }
10754
10755
10756
10757 for {
10758 x := v.Args[1]
10759 v_0 := v.Args[0]
10760 if v_0.Op != OpMul16 {
10761 break
10762 }
10763 _ = v_0.Args[1]
10764 v_0_0 := v_0.Args[0]
10765 if v_0_0.Op != OpTrunc32to16 {
10766 break
10767 }
10768 v_0_0_0 := v_0_0.Args[0]
10769 if v_0_0_0.Op != OpRsh32Ux64 {
10770 break
10771 }
10772 _ = v_0_0_0.Args[1]
10773 mul := v_0_0_0.Args[0]
10774 if mul.Op != OpMul32 {
10775 break
10776 }
10777 _ = mul.Args[1]
10778 mul_0 := mul.Args[0]
10779 if mul_0.Op != OpRsh32Ux64 {
10780 break
10781 }
10782 _ = mul_0.Args[1]
10783 mul_0_0 := mul_0.Args[0]
10784 if mul_0_0.Op != OpZeroExt16to32 {
10785 break
10786 }
10787 if x != mul_0_0.Args[0] {
10788 break
10789 }
10790 mul_0_1 := mul_0.Args[1]
10791 if mul_0_1.Op != OpConst64 {
10792 break
10793 }
10794 if mul_0_1.AuxInt != 1 {
10795 break
10796 }
10797 mul_1 := mul.Args[1]
10798 if mul_1.Op != OpConst32 {
10799 break
10800 }
10801 m := mul_1.AuxInt
10802 v_0_0_0_1 := v_0_0_0.Args[1]
10803 if v_0_0_0_1.Op != OpConst64 {
10804 break
10805 }
10806 s := v_0_0_0_1.AuxInt
10807 v_0_1 := v_0.Args[1]
10808 if v_0_1.Op != OpConst16 {
10809 break
10810 }
10811 c := v_0_1.AuxInt
10812 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10813 break
10814 }
10815 v.reset(OpLeq16U)
10816 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10817 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10818 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10819 v2.AuxInt = int64(int16(udivisible(16, c).m))
10820 v1.AddArg(v2)
10821 v1.AddArg(x)
10822 v0.AddArg(v1)
10823 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10824 v3.AuxInt = int64(16 - udivisible(16, c).k)
10825 v0.AddArg(v3)
10826 v.AddArg(v0)
10827 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10828 v4.AuxInt = int64(int16(udivisible(16, c).max))
10829 v.AddArg(v4)
10830 return true
10831 }
10832
10833
10834
10835 for {
10836 _ = v.Args[1]
10837 x := v.Args[0]
10838 v_1 := v.Args[1]
10839 if v_1.Op != OpMul16 {
10840 break
10841 }
10842 _ = v_1.Args[1]
10843 v_1_0 := v_1.Args[0]
10844 if v_1_0.Op != OpConst16 {
10845 break
10846 }
10847 c := v_1_0.AuxInt
10848 v_1_1 := v_1.Args[1]
10849 if v_1_1.Op != OpTrunc32to16 {
10850 break
10851 }
10852 v_1_1_0 := v_1_1.Args[0]
10853 if v_1_1_0.Op != OpRsh32Ux64 {
10854 break
10855 }
10856 _ = v_1_1_0.Args[1]
10857 v_1_1_0_0 := v_1_1_0.Args[0]
10858 if v_1_1_0_0.Op != OpAvg32u {
10859 break
10860 }
10861 _ = v_1_1_0_0.Args[1]
10862 v_1_1_0_0_0 := v_1_1_0_0.Args[0]
10863 if v_1_1_0_0_0.Op != OpLsh32x64 {
10864 break
10865 }
10866 _ = v_1_1_0_0_0.Args[1]
10867 v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0]
10868 if v_1_1_0_0_0_0.Op != OpZeroExt16to32 {
10869 break
10870 }
10871 if x != v_1_1_0_0_0_0.Args[0] {
10872 break
10873 }
10874 v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1]
10875 if v_1_1_0_0_0_1.Op != OpConst64 {
10876 break
10877 }
10878 if v_1_1_0_0_0_1.AuxInt != 16 {
10879 break
10880 }
10881 mul := v_1_1_0_0.Args[1]
10882 if mul.Op != OpMul32 {
10883 break
10884 }
10885 _ = mul.Args[1]
10886 mul_0 := mul.Args[0]
10887 if mul_0.Op != OpConst32 {
10888 break
10889 }
10890 m := mul_0.AuxInt
10891 mul_1 := mul.Args[1]
10892 if mul_1.Op != OpZeroExt16to32 {
10893 break
10894 }
10895 if x != mul_1.Args[0] {
10896 break
10897 }
10898 v_1_1_0_1 := v_1_1_0.Args[1]
10899 if v_1_1_0_1.Op != OpConst64 {
10900 break
10901 }
10902 s := v_1_1_0_1.AuxInt
10903 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10904 break
10905 }
10906 v.reset(OpLeq16U)
10907 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10908 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
10909 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10910 v2.AuxInt = int64(int16(udivisible(16, c).m))
10911 v1.AddArg(v2)
10912 v1.AddArg(x)
10913 v0.AddArg(v1)
10914 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10915 v3.AuxInt = int64(16 - udivisible(16, c).k)
10916 v0.AddArg(v3)
10917 v.AddArg(v0)
10918 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
10919 v4.AuxInt = int64(int16(udivisible(16, c).max))
10920 v.AddArg(v4)
10921 return true
10922 }
10923
10924
10925
10926 for {
10927 _ = v.Args[1]
10928 x := v.Args[0]
10929 v_1 := v.Args[1]
10930 if v_1.Op != OpMul16 {
10931 break
10932 }
10933 _ = v_1.Args[1]
10934 v_1_0 := v_1.Args[0]
10935 if v_1_0.Op != OpConst16 {
10936 break
10937 }
10938 c := v_1_0.AuxInt
10939 v_1_1 := v_1.Args[1]
10940 if v_1_1.Op != OpTrunc32to16 {
10941 break
10942 }
10943 v_1_1_0 := v_1_1.Args[0]
10944 if v_1_1_0.Op != OpRsh32Ux64 {
10945 break
10946 }
10947 _ = v_1_1_0.Args[1]
10948 v_1_1_0_0 := v_1_1_0.Args[0]
10949 if v_1_1_0_0.Op != OpAvg32u {
10950 break
10951 }
10952 _ = v_1_1_0_0.Args[1]
10953 v_1_1_0_0_0 := v_1_1_0_0.Args[0]
10954 if v_1_1_0_0_0.Op != OpLsh32x64 {
10955 break
10956 }
10957 _ = v_1_1_0_0_0.Args[1]
10958 v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0]
10959 if v_1_1_0_0_0_0.Op != OpZeroExt16to32 {
10960 break
10961 }
10962 if x != v_1_1_0_0_0_0.Args[0] {
10963 break
10964 }
10965 v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1]
10966 if v_1_1_0_0_0_1.Op != OpConst64 {
10967 break
10968 }
10969 if v_1_1_0_0_0_1.AuxInt != 16 {
10970 break
10971 }
10972 mul := v_1_1_0_0.Args[1]
10973 if mul.Op != OpMul32 {
10974 break
10975 }
10976 _ = mul.Args[1]
10977 mul_0 := mul.Args[0]
10978 if mul_0.Op != OpZeroExt16to32 {
10979 break
10980 }
10981 if x != mul_0.Args[0] {
10982 break
10983 }
10984 mul_1 := mul.Args[1]
10985 if mul_1.Op != OpConst32 {
10986 break
10987 }
10988 m := mul_1.AuxInt
10989 v_1_1_0_1 := v_1_1_0.Args[1]
10990 if v_1_1_0_1.Op != OpConst64 {
10991 break
10992 }
10993 s := v_1_1_0_1.AuxInt
10994 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
10995 break
10996 }
10997 v.reset(OpLeq16U)
10998 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
10999 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11000 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11001 v2.AuxInt = int64(int16(udivisible(16, c).m))
11002 v1.AddArg(v2)
11003 v1.AddArg(x)
11004 v0.AddArg(v1)
11005 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11006 v3.AuxInt = int64(16 - udivisible(16, c).k)
11007 v0.AddArg(v3)
11008 v.AddArg(v0)
11009 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11010 v4.AuxInt = int64(int16(udivisible(16, c).max))
11011 v.AddArg(v4)
11012 return true
11013 }
11014
11015
11016
11017 for {
11018 _ = v.Args[1]
11019 x := v.Args[0]
11020 v_1 := v.Args[1]
11021 if v_1.Op != OpMul16 {
11022 break
11023 }
11024 _ = v_1.Args[1]
11025 v_1_0 := v_1.Args[0]
11026 if v_1_0.Op != OpTrunc32to16 {
11027 break
11028 }
11029 v_1_0_0 := v_1_0.Args[0]
11030 if v_1_0_0.Op != OpRsh32Ux64 {
11031 break
11032 }
11033 _ = v_1_0_0.Args[1]
11034 v_1_0_0_0 := v_1_0_0.Args[0]
11035 if v_1_0_0_0.Op != OpAvg32u {
11036 break
11037 }
11038 _ = v_1_0_0_0.Args[1]
11039 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
11040 if v_1_0_0_0_0.Op != OpLsh32x64 {
11041 break
11042 }
11043 _ = v_1_0_0_0_0.Args[1]
11044 v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0]
11045 if v_1_0_0_0_0_0.Op != OpZeroExt16to32 {
11046 break
11047 }
11048 if x != v_1_0_0_0_0_0.Args[0] {
11049 break
11050 }
11051 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
11052 if v_1_0_0_0_0_1.Op != OpConst64 {
11053 break
11054 }
11055 if v_1_0_0_0_0_1.AuxInt != 16 {
11056 break
11057 }
11058 mul := v_1_0_0_0.Args[1]
11059 if mul.Op != OpMul32 {
11060 break
11061 }
11062 _ = mul.Args[1]
11063 mul_0 := mul.Args[0]
11064 if mul_0.Op != OpConst32 {
11065 break
11066 }
11067 m := mul_0.AuxInt
11068 mul_1 := mul.Args[1]
11069 if mul_1.Op != OpZeroExt16to32 {
11070 break
11071 }
11072 if x != mul_1.Args[0] {
11073 break
11074 }
11075 v_1_0_0_1 := v_1_0_0.Args[1]
11076 if v_1_0_0_1.Op != OpConst64 {
11077 break
11078 }
11079 s := v_1_0_0_1.AuxInt
11080 v_1_1 := v_1.Args[1]
11081 if v_1_1.Op != OpConst16 {
11082 break
11083 }
11084 c := v_1_1.AuxInt
11085 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11086 break
11087 }
11088 v.reset(OpLeq16U)
11089 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11090 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11091 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11092 v2.AuxInt = int64(int16(udivisible(16, c).m))
11093 v1.AddArg(v2)
11094 v1.AddArg(x)
11095 v0.AddArg(v1)
11096 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11097 v3.AuxInt = int64(16 - udivisible(16, c).k)
11098 v0.AddArg(v3)
11099 v.AddArg(v0)
11100 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11101 v4.AuxInt = int64(int16(udivisible(16, c).max))
11102 v.AddArg(v4)
11103 return true
11104 }
11105
11106
11107
11108 for {
11109 _ = v.Args[1]
11110 x := v.Args[0]
11111 v_1 := v.Args[1]
11112 if v_1.Op != OpMul16 {
11113 break
11114 }
11115 _ = v_1.Args[1]
11116 v_1_0 := v_1.Args[0]
11117 if v_1_0.Op != OpTrunc32to16 {
11118 break
11119 }
11120 v_1_0_0 := v_1_0.Args[0]
11121 if v_1_0_0.Op != OpRsh32Ux64 {
11122 break
11123 }
11124 _ = v_1_0_0.Args[1]
11125 v_1_0_0_0 := v_1_0_0.Args[0]
11126 if v_1_0_0_0.Op != OpAvg32u {
11127 break
11128 }
11129 _ = v_1_0_0_0.Args[1]
11130 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
11131 if v_1_0_0_0_0.Op != OpLsh32x64 {
11132 break
11133 }
11134 _ = v_1_0_0_0_0.Args[1]
11135 v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0]
11136 if v_1_0_0_0_0_0.Op != OpZeroExt16to32 {
11137 break
11138 }
11139 if x != v_1_0_0_0_0_0.Args[0] {
11140 break
11141 }
11142 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
11143 if v_1_0_0_0_0_1.Op != OpConst64 {
11144 break
11145 }
11146 if v_1_0_0_0_0_1.AuxInt != 16 {
11147 break
11148 }
11149 mul := v_1_0_0_0.Args[1]
11150 if mul.Op != OpMul32 {
11151 break
11152 }
11153 _ = mul.Args[1]
11154 mul_0 := mul.Args[0]
11155 if mul_0.Op != OpZeroExt16to32 {
11156 break
11157 }
11158 if x != mul_0.Args[0] {
11159 break
11160 }
11161 mul_1 := mul.Args[1]
11162 if mul_1.Op != OpConst32 {
11163 break
11164 }
11165 m := mul_1.AuxInt
11166 v_1_0_0_1 := v_1_0_0.Args[1]
11167 if v_1_0_0_1.Op != OpConst64 {
11168 break
11169 }
11170 s := v_1_0_0_1.AuxInt
11171 v_1_1 := v_1.Args[1]
11172 if v_1_1.Op != OpConst16 {
11173 break
11174 }
11175 c := v_1_1.AuxInt
11176 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11177 break
11178 }
11179 v.reset(OpLeq16U)
11180 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11181 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11182 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11183 v2.AuxInt = int64(int16(udivisible(16, c).m))
11184 v1.AddArg(v2)
11185 v1.AddArg(x)
11186 v0.AddArg(v1)
11187 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11188 v3.AuxInt = int64(16 - udivisible(16, c).k)
11189 v0.AddArg(v3)
11190 v.AddArg(v0)
11191 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11192 v4.AuxInt = int64(int16(udivisible(16, c).max))
11193 v.AddArg(v4)
11194 return true
11195 }
11196
11197
11198
11199 for {
11200 x := v.Args[1]
11201 v_0 := v.Args[0]
11202 if v_0.Op != OpMul16 {
11203 break
11204 }
11205 _ = v_0.Args[1]
11206 v_0_0 := v_0.Args[0]
11207 if v_0_0.Op != OpConst16 {
11208 break
11209 }
11210 c := v_0_0.AuxInt
11211 v_0_1 := v_0.Args[1]
11212 if v_0_1.Op != OpTrunc32to16 {
11213 break
11214 }
11215 v_0_1_0 := v_0_1.Args[0]
11216 if v_0_1_0.Op != OpRsh32Ux64 {
11217 break
11218 }
11219 _ = v_0_1_0.Args[1]
11220 v_0_1_0_0 := v_0_1_0.Args[0]
11221 if v_0_1_0_0.Op != OpAvg32u {
11222 break
11223 }
11224 _ = v_0_1_0_0.Args[1]
11225 v_0_1_0_0_0 := v_0_1_0_0.Args[0]
11226 if v_0_1_0_0_0.Op != OpLsh32x64 {
11227 break
11228 }
11229 _ = v_0_1_0_0_0.Args[1]
11230 v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0]
11231 if v_0_1_0_0_0_0.Op != OpZeroExt16to32 {
11232 break
11233 }
11234 if x != v_0_1_0_0_0_0.Args[0] {
11235 break
11236 }
11237 v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1]
11238 if v_0_1_0_0_0_1.Op != OpConst64 {
11239 break
11240 }
11241 if v_0_1_0_0_0_1.AuxInt != 16 {
11242 break
11243 }
11244 mul := v_0_1_0_0.Args[1]
11245 if mul.Op != OpMul32 {
11246 break
11247 }
11248 _ = mul.Args[1]
11249 mul_0 := mul.Args[0]
11250 if mul_0.Op != OpConst32 {
11251 break
11252 }
11253 m := mul_0.AuxInt
11254 mul_1 := mul.Args[1]
11255 if mul_1.Op != OpZeroExt16to32 {
11256 break
11257 }
11258 if x != mul_1.Args[0] {
11259 break
11260 }
11261 v_0_1_0_1 := v_0_1_0.Args[1]
11262 if v_0_1_0_1.Op != OpConst64 {
11263 break
11264 }
11265 s := v_0_1_0_1.AuxInt
11266 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11267 break
11268 }
11269 v.reset(OpLeq16U)
11270 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11271 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11272 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11273 v2.AuxInt = int64(int16(udivisible(16, c).m))
11274 v1.AddArg(v2)
11275 v1.AddArg(x)
11276 v0.AddArg(v1)
11277 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11278 v3.AuxInt = int64(16 - udivisible(16, c).k)
11279 v0.AddArg(v3)
11280 v.AddArg(v0)
11281 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11282 v4.AuxInt = int64(int16(udivisible(16, c).max))
11283 v.AddArg(v4)
11284 return true
11285 }
11286 return false
11287 }
11288 func rewriteValuegeneric_OpEq16_40(v *Value) bool {
11289 b := v.Block
11290 typ := &b.Func.Config.Types
11291
11292
11293
11294 for {
11295 x := v.Args[1]
11296 v_0 := v.Args[0]
11297 if v_0.Op != OpMul16 {
11298 break
11299 }
11300 _ = v_0.Args[1]
11301 v_0_0 := v_0.Args[0]
11302 if v_0_0.Op != OpConst16 {
11303 break
11304 }
11305 c := v_0_0.AuxInt
11306 v_0_1 := v_0.Args[1]
11307 if v_0_1.Op != OpTrunc32to16 {
11308 break
11309 }
11310 v_0_1_0 := v_0_1.Args[0]
11311 if v_0_1_0.Op != OpRsh32Ux64 {
11312 break
11313 }
11314 _ = v_0_1_0.Args[1]
11315 v_0_1_0_0 := v_0_1_0.Args[0]
11316 if v_0_1_0_0.Op != OpAvg32u {
11317 break
11318 }
11319 _ = v_0_1_0_0.Args[1]
11320 v_0_1_0_0_0 := v_0_1_0_0.Args[0]
11321 if v_0_1_0_0_0.Op != OpLsh32x64 {
11322 break
11323 }
11324 _ = v_0_1_0_0_0.Args[1]
11325 v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0]
11326 if v_0_1_0_0_0_0.Op != OpZeroExt16to32 {
11327 break
11328 }
11329 if x != v_0_1_0_0_0_0.Args[0] {
11330 break
11331 }
11332 v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1]
11333 if v_0_1_0_0_0_1.Op != OpConst64 {
11334 break
11335 }
11336 if v_0_1_0_0_0_1.AuxInt != 16 {
11337 break
11338 }
11339 mul := v_0_1_0_0.Args[1]
11340 if mul.Op != OpMul32 {
11341 break
11342 }
11343 _ = mul.Args[1]
11344 mul_0 := mul.Args[0]
11345 if mul_0.Op != OpZeroExt16to32 {
11346 break
11347 }
11348 if x != mul_0.Args[0] {
11349 break
11350 }
11351 mul_1 := mul.Args[1]
11352 if mul_1.Op != OpConst32 {
11353 break
11354 }
11355 m := mul_1.AuxInt
11356 v_0_1_0_1 := v_0_1_0.Args[1]
11357 if v_0_1_0_1.Op != OpConst64 {
11358 break
11359 }
11360 s := v_0_1_0_1.AuxInt
11361 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11362 break
11363 }
11364 v.reset(OpLeq16U)
11365 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11366 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11367 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11368 v2.AuxInt = int64(int16(udivisible(16, c).m))
11369 v1.AddArg(v2)
11370 v1.AddArg(x)
11371 v0.AddArg(v1)
11372 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11373 v3.AuxInt = int64(16 - udivisible(16, c).k)
11374 v0.AddArg(v3)
11375 v.AddArg(v0)
11376 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11377 v4.AuxInt = int64(int16(udivisible(16, c).max))
11378 v.AddArg(v4)
11379 return true
11380 }
11381
11382
11383
11384 for {
11385 x := v.Args[1]
11386 v_0 := v.Args[0]
11387 if v_0.Op != OpMul16 {
11388 break
11389 }
11390 _ = v_0.Args[1]
11391 v_0_0 := v_0.Args[0]
11392 if v_0_0.Op != OpTrunc32to16 {
11393 break
11394 }
11395 v_0_0_0 := v_0_0.Args[0]
11396 if v_0_0_0.Op != OpRsh32Ux64 {
11397 break
11398 }
11399 _ = v_0_0_0.Args[1]
11400 v_0_0_0_0 := v_0_0_0.Args[0]
11401 if v_0_0_0_0.Op != OpAvg32u {
11402 break
11403 }
11404 _ = v_0_0_0_0.Args[1]
11405 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
11406 if v_0_0_0_0_0.Op != OpLsh32x64 {
11407 break
11408 }
11409 _ = v_0_0_0_0_0.Args[1]
11410 v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0]
11411 if v_0_0_0_0_0_0.Op != OpZeroExt16to32 {
11412 break
11413 }
11414 if x != v_0_0_0_0_0_0.Args[0] {
11415 break
11416 }
11417 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
11418 if v_0_0_0_0_0_1.Op != OpConst64 {
11419 break
11420 }
11421 if v_0_0_0_0_0_1.AuxInt != 16 {
11422 break
11423 }
11424 mul := v_0_0_0_0.Args[1]
11425 if mul.Op != OpMul32 {
11426 break
11427 }
11428 _ = mul.Args[1]
11429 mul_0 := mul.Args[0]
11430 if mul_0.Op != OpConst32 {
11431 break
11432 }
11433 m := mul_0.AuxInt
11434 mul_1 := mul.Args[1]
11435 if mul_1.Op != OpZeroExt16to32 {
11436 break
11437 }
11438 if x != mul_1.Args[0] {
11439 break
11440 }
11441 v_0_0_0_1 := v_0_0_0.Args[1]
11442 if v_0_0_0_1.Op != OpConst64 {
11443 break
11444 }
11445 s := v_0_0_0_1.AuxInt
11446 v_0_1 := v_0.Args[1]
11447 if v_0_1.Op != OpConst16 {
11448 break
11449 }
11450 c := v_0_1.AuxInt
11451 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11452 break
11453 }
11454 v.reset(OpLeq16U)
11455 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11456 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11457 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11458 v2.AuxInt = int64(int16(udivisible(16, c).m))
11459 v1.AddArg(v2)
11460 v1.AddArg(x)
11461 v0.AddArg(v1)
11462 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11463 v3.AuxInt = int64(16 - udivisible(16, c).k)
11464 v0.AddArg(v3)
11465 v.AddArg(v0)
11466 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11467 v4.AuxInt = int64(int16(udivisible(16, c).max))
11468 v.AddArg(v4)
11469 return true
11470 }
11471
11472
11473
11474 for {
11475 x := v.Args[1]
11476 v_0 := v.Args[0]
11477 if v_0.Op != OpMul16 {
11478 break
11479 }
11480 _ = v_0.Args[1]
11481 v_0_0 := v_0.Args[0]
11482 if v_0_0.Op != OpTrunc32to16 {
11483 break
11484 }
11485 v_0_0_0 := v_0_0.Args[0]
11486 if v_0_0_0.Op != OpRsh32Ux64 {
11487 break
11488 }
11489 _ = v_0_0_0.Args[1]
11490 v_0_0_0_0 := v_0_0_0.Args[0]
11491 if v_0_0_0_0.Op != OpAvg32u {
11492 break
11493 }
11494 _ = v_0_0_0_0.Args[1]
11495 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
11496 if v_0_0_0_0_0.Op != OpLsh32x64 {
11497 break
11498 }
11499 _ = v_0_0_0_0_0.Args[1]
11500 v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0]
11501 if v_0_0_0_0_0_0.Op != OpZeroExt16to32 {
11502 break
11503 }
11504 if x != v_0_0_0_0_0_0.Args[0] {
11505 break
11506 }
11507 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
11508 if v_0_0_0_0_0_1.Op != OpConst64 {
11509 break
11510 }
11511 if v_0_0_0_0_0_1.AuxInt != 16 {
11512 break
11513 }
11514 mul := v_0_0_0_0.Args[1]
11515 if mul.Op != OpMul32 {
11516 break
11517 }
11518 _ = mul.Args[1]
11519 mul_0 := mul.Args[0]
11520 if mul_0.Op != OpZeroExt16to32 {
11521 break
11522 }
11523 if x != mul_0.Args[0] {
11524 break
11525 }
11526 mul_1 := mul.Args[1]
11527 if mul_1.Op != OpConst32 {
11528 break
11529 }
11530 m := mul_1.AuxInt
11531 v_0_0_0_1 := v_0_0_0.Args[1]
11532 if v_0_0_0_1.Op != OpConst64 {
11533 break
11534 }
11535 s := v_0_0_0_1.AuxInt
11536 v_0_1 := v_0.Args[1]
11537 if v_0_1.Op != OpConst16 {
11538 break
11539 }
11540 c := v_0_1.AuxInt
11541 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) {
11542 break
11543 }
11544 v.reset(OpLeq16U)
11545 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11546 v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11547 v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11548 v2.AuxInt = int64(int16(udivisible(16, c).m))
11549 v1.AddArg(v2)
11550 v1.AddArg(x)
11551 v0.AddArg(v1)
11552 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11553 v3.AuxInt = int64(16 - udivisible(16, c).k)
11554 v0.AddArg(v3)
11555 v.AddArg(v0)
11556 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11557 v4.AuxInt = int64(int16(udivisible(16, c).max))
11558 v.AddArg(v4)
11559 return true
11560 }
11561
11562
11563
11564 for {
11565 _ = v.Args[1]
11566 x := v.Args[0]
11567 v_1 := v.Args[1]
11568 if v_1.Op != OpMul16 {
11569 break
11570 }
11571 _ = v_1.Args[1]
11572 v_1_0 := v_1.Args[0]
11573 if v_1_0.Op != OpConst16 {
11574 break
11575 }
11576 c := v_1_0.AuxInt
11577 v_1_1 := v_1.Args[1]
11578 if v_1_1.Op != OpSub16 {
11579 break
11580 }
11581 _ = v_1_1.Args[1]
11582 v_1_1_0 := v_1_1.Args[0]
11583 if v_1_1_0.Op != OpRsh32x64 {
11584 break
11585 }
11586 _ = v_1_1_0.Args[1]
11587 mul := v_1_1_0.Args[0]
11588 if mul.Op != OpMul32 {
11589 break
11590 }
11591 _ = mul.Args[1]
11592 mul_0 := mul.Args[0]
11593 if mul_0.Op != OpConst32 {
11594 break
11595 }
11596 m := mul_0.AuxInt
11597 mul_1 := mul.Args[1]
11598 if mul_1.Op != OpSignExt16to32 {
11599 break
11600 }
11601 if x != mul_1.Args[0] {
11602 break
11603 }
11604 v_1_1_0_1 := v_1_1_0.Args[1]
11605 if v_1_1_0_1.Op != OpConst64 {
11606 break
11607 }
11608 s := v_1_1_0_1.AuxInt
11609 v_1_1_1 := v_1_1.Args[1]
11610 if v_1_1_1.Op != OpRsh32x64 {
11611 break
11612 }
11613 _ = v_1_1_1.Args[1]
11614 v_1_1_1_0 := v_1_1_1.Args[0]
11615 if v_1_1_1_0.Op != OpSignExt16to32 {
11616 break
11617 }
11618 if x != v_1_1_1_0.Args[0] {
11619 break
11620 }
11621 v_1_1_1_1 := v_1_1_1.Args[1]
11622 if v_1_1_1_1.Op != OpConst64 {
11623 break
11624 }
11625 if v_1_1_1_1.AuxInt != 31 {
11626 break
11627 }
11628 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
11629 break
11630 }
11631 v.reset(OpLeq16U)
11632 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11633 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
11634 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11635 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11636 v3.AuxInt = int64(int16(sdivisible(16, c).m))
11637 v2.AddArg(v3)
11638 v2.AddArg(x)
11639 v1.AddArg(v2)
11640 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11641 v4.AuxInt = int64(int16(sdivisible(16, c).a))
11642 v1.AddArg(v4)
11643 v0.AddArg(v1)
11644 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11645 v5.AuxInt = int64(16 - sdivisible(16, c).k)
11646 v0.AddArg(v5)
11647 v.AddArg(v0)
11648 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11649 v6.AuxInt = int64(int16(sdivisible(16, c).max))
11650 v.AddArg(v6)
11651 return true
11652 }
11653
11654
11655
11656 for {
11657 _ = v.Args[1]
11658 x := v.Args[0]
11659 v_1 := v.Args[1]
11660 if v_1.Op != OpMul16 {
11661 break
11662 }
11663 _ = v_1.Args[1]
11664 v_1_0 := v_1.Args[0]
11665 if v_1_0.Op != OpConst16 {
11666 break
11667 }
11668 c := v_1_0.AuxInt
11669 v_1_1 := v_1.Args[1]
11670 if v_1_1.Op != OpSub16 {
11671 break
11672 }
11673 _ = v_1_1.Args[1]
11674 v_1_1_0 := v_1_1.Args[0]
11675 if v_1_1_0.Op != OpRsh32x64 {
11676 break
11677 }
11678 _ = v_1_1_0.Args[1]
11679 mul := v_1_1_0.Args[0]
11680 if mul.Op != OpMul32 {
11681 break
11682 }
11683 _ = mul.Args[1]
11684 mul_0 := mul.Args[0]
11685 if mul_0.Op != OpSignExt16to32 {
11686 break
11687 }
11688 if x != mul_0.Args[0] {
11689 break
11690 }
11691 mul_1 := mul.Args[1]
11692 if mul_1.Op != OpConst32 {
11693 break
11694 }
11695 m := mul_1.AuxInt
11696 v_1_1_0_1 := v_1_1_0.Args[1]
11697 if v_1_1_0_1.Op != OpConst64 {
11698 break
11699 }
11700 s := v_1_1_0_1.AuxInt
11701 v_1_1_1 := v_1_1.Args[1]
11702 if v_1_1_1.Op != OpRsh32x64 {
11703 break
11704 }
11705 _ = v_1_1_1.Args[1]
11706 v_1_1_1_0 := v_1_1_1.Args[0]
11707 if v_1_1_1_0.Op != OpSignExt16to32 {
11708 break
11709 }
11710 if x != v_1_1_1_0.Args[0] {
11711 break
11712 }
11713 v_1_1_1_1 := v_1_1_1.Args[1]
11714 if v_1_1_1_1.Op != OpConst64 {
11715 break
11716 }
11717 if v_1_1_1_1.AuxInt != 31 {
11718 break
11719 }
11720 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
11721 break
11722 }
11723 v.reset(OpLeq16U)
11724 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11725 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
11726 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11727 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11728 v3.AuxInt = int64(int16(sdivisible(16, c).m))
11729 v2.AddArg(v3)
11730 v2.AddArg(x)
11731 v1.AddArg(v2)
11732 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11733 v4.AuxInt = int64(int16(sdivisible(16, c).a))
11734 v1.AddArg(v4)
11735 v0.AddArg(v1)
11736 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11737 v5.AuxInt = int64(16 - sdivisible(16, c).k)
11738 v0.AddArg(v5)
11739 v.AddArg(v0)
11740 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11741 v6.AuxInt = int64(int16(sdivisible(16, c).max))
11742 v.AddArg(v6)
11743 return true
11744 }
11745
11746
11747
11748 for {
11749 _ = v.Args[1]
11750 x := v.Args[0]
11751 v_1 := v.Args[1]
11752 if v_1.Op != OpMul16 {
11753 break
11754 }
11755 _ = v_1.Args[1]
11756 v_1_0 := v_1.Args[0]
11757 if v_1_0.Op != OpSub16 {
11758 break
11759 }
11760 _ = v_1_0.Args[1]
11761 v_1_0_0 := v_1_0.Args[0]
11762 if v_1_0_0.Op != OpRsh32x64 {
11763 break
11764 }
11765 _ = v_1_0_0.Args[1]
11766 mul := v_1_0_0.Args[0]
11767 if mul.Op != OpMul32 {
11768 break
11769 }
11770 _ = mul.Args[1]
11771 mul_0 := mul.Args[0]
11772 if mul_0.Op != OpConst32 {
11773 break
11774 }
11775 m := mul_0.AuxInt
11776 mul_1 := mul.Args[1]
11777 if mul_1.Op != OpSignExt16to32 {
11778 break
11779 }
11780 if x != mul_1.Args[0] {
11781 break
11782 }
11783 v_1_0_0_1 := v_1_0_0.Args[1]
11784 if v_1_0_0_1.Op != OpConst64 {
11785 break
11786 }
11787 s := v_1_0_0_1.AuxInt
11788 v_1_0_1 := v_1_0.Args[1]
11789 if v_1_0_1.Op != OpRsh32x64 {
11790 break
11791 }
11792 _ = v_1_0_1.Args[1]
11793 v_1_0_1_0 := v_1_0_1.Args[0]
11794 if v_1_0_1_0.Op != OpSignExt16to32 {
11795 break
11796 }
11797 if x != v_1_0_1_0.Args[0] {
11798 break
11799 }
11800 v_1_0_1_1 := v_1_0_1.Args[1]
11801 if v_1_0_1_1.Op != OpConst64 {
11802 break
11803 }
11804 if v_1_0_1_1.AuxInt != 31 {
11805 break
11806 }
11807 v_1_1 := v_1.Args[1]
11808 if v_1_1.Op != OpConst16 {
11809 break
11810 }
11811 c := v_1_1.AuxInt
11812 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
11813 break
11814 }
11815 v.reset(OpLeq16U)
11816 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11817 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
11818 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11819 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11820 v3.AuxInt = int64(int16(sdivisible(16, c).m))
11821 v2.AddArg(v3)
11822 v2.AddArg(x)
11823 v1.AddArg(v2)
11824 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11825 v4.AuxInt = int64(int16(sdivisible(16, c).a))
11826 v1.AddArg(v4)
11827 v0.AddArg(v1)
11828 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11829 v5.AuxInt = int64(16 - sdivisible(16, c).k)
11830 v0.AddArg(v5)
11831 v.AddArg(v0)
11832 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11833 v6.AuxInt = int64(int16(sdivisible(16, c).max))
11834 v.AddArg(v6)
11835 return true
11836 }
11837
11838
11839
11840 for {
11841 _ = v.Args[1]
11842 x := v.Args[0]
11843 v_1 := v.Args[1]
11844 if v_1.Op != OpMul16 {
11845 break
11846 }
11847 _ = v_1.Args[1]
11848 v_1_0 := v_1.Args[0]
11849 if v_1_0.Op != OpSub16 {
11850 break
11851 }
11852 _ = v_1_0.Args[1]
11853 v_1_0_0 := v_1_0.Args[0]
11854 if v_1_0_0.Op != OpRsh32x64 {
11855 break
11856 }
11857 _ = v_1_0_0.Args[1]
11858 mul := v_1_0_0.Args[0]
11859 if mul.Op != OpMul32 {
11860 break
11861 }
11862 _ = mul.Args[1]
11863 mul_0 := mul.Args[0]
11864 if mul_0.Op != OpSignExt16to32 {
11865 break
11866 }
11867 if x != mul_0.Args[0] {
11868 break
11869 }
11870 mul_1 := mul.Args[1]
11871 if mul_1.Op != OpConst32 {
11872 break
11873 }
11874 m := mul_1.AuxInt
11875 v_1_0_0_1 := v_1_0_0.Args[1]
11876 if v_1_0_0_1.Op != OpConst64 {
11877 break
11878 }
11879 s := v_1_0_0_1.AuxInt
11880 v_1_0_1 := v_1_0.Args[1]
11881 if v_1_0_1.Op != OpRsh32x64 {
11882 break
11883 }
11884 _ = v_1_0_1.Args[1]
11885 v_1_0_1_0 := v_1_0_1.Args[0]
11886 if v_1_0_1_0.Op != OpSignExt16to32 {
11887 break
11888 }
11889 if x != v_1_0_1_0.Args[0] {
11890 break
11891 }
11892 v_1_0_1_1 := v_1_0_1.Args[1]
11893 if v_1_0_1_1.Op != OpConst64 {
11894 break
11895 }
11896 if v_1_0_1_1.AuxInt != 31 {
11897 break
11898 }
11899 v_1_1 := v_1.Args[1]
11900 if v_1_1.Op != OpConst16 {
11901 break
11902 }
11903 c := v_1_1.AuxInt
11904 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
11905 break
11906 }
11907 v.reset(OpLeq16U)
11908 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
11909 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
11910 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
11911 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11912 v3.AuxInt = int64(int16(sdivisible(16, c).m))
11913 v2.AddArg(v3)
11914 v2.AddArg(x)
11915 v1.AddArg(v2)
11916 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11917 v4.AuxInt = int64(int16(sdivisible(16, c).a))
11918 v1.AddArg(v4)
11919 v0.AddArg(v1)
11920 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11921 v5.AuxInt = int64(16 - sdivisible(16, c).k)
11922 v0.AddArg(v5)
11923 v.AddArg(v0)
11924 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
11925 v6.AuxInt = int64(int16(sdivisible(16, c).max))
11926 v.AddArg(v6)
11927 return true
11928 }
11929
11930
11931
11932 for {
11933 x := v.Args[1]
11934 v_0 := v.Args[0]
11935 if v_0.Op != OpMul16 {
11936 break
11937 }
11938 _ = v_0.Args[1]
11939 v_0_0 := v_0.Args[0]
11940 if v_0_0.Op != OpConst16 {
11941 break
11942 }
11943 c := v_0_0.AuxInt
11944 v_0_1 := v_0.Args[1]
11945 if v_0_1.Op != OpSub16 {
11946 break
11947 }
11948 _ = v_0_1.Args[1]
11949 v_0_1_0 := v_0_1.Args[0]
11950 if v_0_1_0.Op != OpRsh32x64 {
11951 break
11952 }
11953 _ = v_0_1_0.Args[1]
11954 mul := v_0_1_0.Args[0]
11955 if mul.Op != OpMul32 {
11956 break
11957 }
11958 _ = mul.Args[1]
11959 mul_0 := mul.Args[0]
11960 if mul_0.Op != OpConst32 {
11961 break
11962 }
11963 m := mul_0.AuxInt
11964 mul_1 := mul.Args[1]
11965 if mul_1.Op != OpSignExt16to32 {
11966 break
11967 }
11968 if x != mul_1.Args[0] {
11969 break
11970 }
11971 v_0_1_0_1 := v_0_1_0.Args[1]
11972 if v_0_1_0_1.Op != OpConst64 {
11973 break
11974 }
11975 s := v_0_1_0_1.AuxInt
11976 v_0_1_1 := v_0_1.Args[1]
11977 if v_0_1_1.Op != OpRsh32x64 {
11978 break
11979 }
11980 _ = v_0_1_1.Args[1]
11981 v_0_1_1_0 := v_0_1_1.Args[0]
11982 if v_0_1_1_0.Op != OpSignExt16to32 {
11983 break
11984 }
11985 if x != v_0_1_1_0.Args[0] {
11986 break
11987 }
11988 v_0_1_1_1 := v_0_1_1.Args[1]
11989 if v_0_1_1_1.Op != OpConst64 {
11990 break
11991 }
11992 if v_0_1_1_1.AuxInt != 31 {
11993 break
11994 }
11995 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
11996 break
11997 }
11998 v.reset(OpLeq16U)
11999 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
12000 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
12001 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
12002 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12003 v3.AuxInt = int64(int16(sdivisible(16, c).m))
12004 v2.AddArg(v3)
12005 v2.AddArg(x)
12006 v1.AddArg(v2)
12007 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12008 v4.AuxInt = int64(int16(sdivisible(16, c).a))
12009 v1.AddArg(v4)
12010 v0.AddArg(v1)
12011 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12012 v5.AuxInt = int64(16 - sdivisible(16, c).k)
12013 v0.AddArg(v5)
12014 v.AddArg(v0)
12015 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12016 v6.AuxInt = int64(int16(sdivisible(16, c).max))
12017 v.AddArg(v6)
12018 return true
12019 }
12020
12021
12022
12023 for {
12024 x := v.Args[1]
12025 v_0 := v.Args[0]
12026 if v_0.Op != OpMul16 {
12027 break
12028 }
12029 _ = v_0.Args[1]
12030 v_0_0 := v_0.Args[0]
12031 if v_0_0.Op != OpConst16 {
12032 break
12033 }
12034 c := v_0_0.AuxInt
12035 v_0_1 := v_0.Args[1]
12036 if v_0_1.Op != OpSub16 {
12037 break
12038 }
12039 _ = v_0_1.Args[1]
12040 v_0_1_0 := v_0_1.Args[0]
12041 if v_0_1_0.Op != OpRsh32x64 {
12042 break
12043 }
12044 _ = v_0_1_0.Args[1]
12045 mul := v_0_1_0.Args[0]
12046 if mul.Op != OpMul32 {
12047 break
12048 }
12049 _ = mul.Args[1]
12050 mul_0 := mul.Args[0]
12051 if mul_0.Op != OpSignExt16to32 {
12052 break
12053 }
12054 if x != mul_0.Args[0] {
12055 break
12056 }
12057 mul_1 := mul.Args[1]
12058 if mul_1.Op != OpConst32 {
12059 break
12060 }
12061 m := mul_1.AuxInt
12062 v_0_1_0_1 := v_0_1_0.Args[1]
12063 if v_0_1_0_1.Op != OpConst64 {
12064 break
12065 }
12066 s := v_0_1_0_1.AuxInt
12067 v_0_1_1 := v_0_1.Args[1]
12068 if v_0_1_1.Op != OpRsh32x64 {
12069 break
12070 }
12071 _ = v_0_1_1.Args[1]
12072 v_0_1_1_0 := v_0_1_1.Args[0]
12073 if v_0_1_1_0.Op != OpSignExt16to32 {
12074 break
12075 }
12076 if x != v_0_1_1_0.Args[0] {
12077 break
12078 }
12079 v_0_1_1_1 := v_0_1_1.Args[1]
12080 if v_0_1_1_1.Op != OpConst64 {
12081 break
12082 }
12083 if v_0_1_1_1.AuxInt != 31 {
12084 break
12085 }
12086 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
12087 break
12088 }
12089 v.reset(OpLeq16U)
12090 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
12091 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
12092 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
12093 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12094 v3.AuxInt = int64(int16(sdivisible(16, c).m))
12095 v2.AddArg(v3)
12096 v2.AddArg(x)
12097 v1.AddArg(v2)
12098 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12099 v4.AuxInt = int64(int16(sdivisible(16, c).a))
12100 v1.AddArg(v4)
12101 v0.AddArg(v1)
12102 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12103 v5.AuxInt = int64(16 - sdivisible(16, c).k)
12104 v0.AddArg(v5)
12105 v.AddArg(v0)
12106 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12107 v6.AuxInt = int64(int16(sdivisible(16, c).max))
12108 v.AddArg(v6)
12109 return true
12110 }
12111
12112
12113
12114 for {
12115 x := v.Args[1]
12116 v_0 := v.Args[0]
12117 if v_0.Op != OpMul16 {
12118 break
12119 }
12120 _ = v_0.Args[1]
12121 v_0_0 := v_0.Args[0]
12122 if v_0_0.Op != OpSub16 {
12123 break
12124 }
12125 _ = v_0_0.Args[1]
12126 v_0_0_0 := v_0_0.Args[0]
12127 if v_0_0_0.Op != OpRsh32x64 {
12128 break
12129 }
12130 _ = v_0_0_0.Args[1]
12131 mul := v_0_0_0.Args[0]
12132 if mul.Op != OpMul32 {
12133 break
12134 }
12135 _ = mul.Args[1]
12136 mul_0 := mul.Args[0]
12137 if mul_0.Op != OpConst32 {
12138 break
12139 }
12140 m := mul_0.AuxInt
12141 mul_1 := mul.Args[1]
12142 if mul_1.Op != OpSignExt16to32 {
12143 break
12144 }
12145 if x != mul_1.Args[0] {
12146 break
12147 }
12148 v_0_0_0_1 := v_0_0_0.Args[1]
12149 if v_0_0_0_1.Op != OpConst64 {
12150 break
12151 }
12152 s := v_0_0_0_1.AuxInt
12153 v_0_0_1 := v_0_0.Args[1]
12154 if v_0_0_1.Op != OpRsh32x64 {
12155 break
12156 }
12157 _ = v_0_0_1.Args[1]
12158 v_0_0_1_0 := v_0_0_1.Args[0]
12159 if v_0_0_1_0.Op != OpSignExt16to32 {
12160 break
12161 }
12162 if x != v_0_0_1_0.Args[0] {
12163 break
12164 }
12165 v_0_0_1_1 := v_0_0_1.Args[1]
12166 if v_0_0_1_1.Op != OpConst64 {
12167 break
12168 }
12169 if v_0_0_1_1.AuxInt != 31 {
12170 break
12171 }
12172 v_0_1 := v_0.Args[1]
12173 if v_0_1.Op != OpConst16 {
12174 break
12175 }
12176 c := v_0_1.AuxInt
12177 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
12178 break
12179 }
12180 v.reset(OpLeq16U)
12181 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
12182 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
12183 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
12184 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12185 v3.AuxInt = int64(int16(sdivisible(16, c).m))
12186 v2.AddArg(v3)
12187 v2.AddArg(x)
12188 v1.AddArg(v2)
12189 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12190 v4.AuxInt = int64(int16(sdivisible(16, c).a))
12191 v1.AddArg(v4)
12192 v0.AddArg(v1)
12193 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12194 v5.AuxInt = int64(16 - sdivisible(16, c).k)
12195 v0.AddArg(v5)
12196 v.AddArg(v0)
12197 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12198 v6.AuxInt = int64(int16(sdivisible(16, c).max))
12199 v.AddArg(v6)
12200 return true
12201 }
12202 return false
12203 }
12204 func rewriteValuegeneric_OpEq16_50(v *Value) bool {
12205 b := v.Block
12206 typ := &b.Func.Config.Types
12207
12208
12209
12210 for {
12211 x := v.Args[1]
12212 v_0 := v.Args[0]
12213 if v_0.Op != OpMul16 {
12214 break
12215 }
12216 _ = v_0.Args[1]
12217 v_0_0 := v_0.Args[0]
12218 if v_0_0.Op != OpSub16 {
12219 break
12220 }
12221 _ = v_0_0.Args[1]
12222 v_0_0_0 := v_0_0.Args[0]
12223 if v_0_0_0.Op != OpRsh32x64 {
12224 break
12225 }
12226 _ = v_0_0_0.Args[1]
12227 mul := v_0_0_0.Args[0]
12228 if mul.Op != OpMul32 {
12229 break
12230 }
12231 _ = mul.Args[1]
12232 mul_0 := mul.Args[0]
12233 if mul_0.Op != OpSignExt16to32 {
12234 break
12235 }
12236 if x != mul_0.Args[0] {
12237 break
12238 }
12239 mul_1 := mul.Args[1]
12240 if mul_1.Op != OpConst32 {
12241 break
12242 }
12243 m := mul_1.AuxInt
12244 v_0_0_0_1 := v_0_0_0.Args[1]
12245 if v_0_0_0_1.Op != OpConst64 {
12246 break
12247 }
12248 s := v_0_0_0_1.AuxInt
12249 v_0_0_1 := v_0_0.Args[1]
12250 if v_0_0_1.Op != OpRsh32x64 {
12251 break
12252 }
12253 _ = v_0_0_1.Args[1]
12254 v_0_0_1_0 := v_0_0_1.Args[0]
12255 if v_0_0_1_0.Op != OpSignExt16to32 {
12256 break
12257 }
12258 if x != v_0_0_1_0.Args[0] {
12259 break
12260 }
12261 v_0_0_1_1 := v_0_0_1.Args[1]
12262 if v_0_0_1_1.Op != OpConst64 {
12263 break
12264 }
12265 if v_0_0_1_1.AuxInt != 31 {
12266 break
12267 }
12268 v_0_1 := v_0.Args[1]
12269 if v_0_1.Op != OpConst16 {
12270 break
12271 }
12272 c := v_0_1.AuxInt
12273 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) {
12274 break
12275 }
12276 v.reset(OpLeq16U)
12277 v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16)
12278 v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16)
12279 v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16)
12280 v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12281 v3.AuxInt = int64(int16(sdivisible(16, c).m))
12282 v2.AddArg(v3)
12283 v2.AddArg(x)
12284 v1.AddArg(v2)
12285 v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12286 v4.AuxInt = int64(int16(sdivisible(16, c).a))
12287 v1.AddArg(v4)
12288 v0.AddArg(v1)
12289 v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12290 v5.AuxInt = int64(16 - sdivisible(16, c).k)
12291 v0.AddArg(v5)
12292 v.AddArg(v0)
12293 v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16)
12294 v6.AuxInt = int64(int16(sdivisible(16, c).max))
12295 v.AddArg(v6)
12296 return true
12297 }
12298
12299
12300
12301 for {
12302 _ = v.Args[1]
12303 n := v.Args[0]
12304 v_1 := v.Args[1]
12305 if v_1.Op != OpLsh16x64 {
12306 break
12307 }
12308 _ = v_1.Args[1]
12309 v_1_0 := v_1.Args[0]
12310 if v_1_0.Op != OpRsh16x64 {
12311 break
12312 }
12313 _ = v_1_0.Args[1]
12314 v_1_0_0 := v_1_0.Args[0]
12315 if v_1_0_0.Op != OpAdd16 {
12316 break
12317 }
12318 t := v_1_0_0.Type
12319 _ = v_1_0_0.Args[1]
12320 if n != v_1_0_0.Args[0] {
12321 break
12322 }
12323 v_1_0_0_1 := v_1_0_0.Args[1]
12324 if v_1_0_0_1.Op != OpRsh16Ux64 {
12325 break
12326 }
12327 if v_1_0_0_1.Type != t {
12328 break
12329 }
12330 _ = v_1_0_0_1.Args[1]
12331 v_1_0_0_1_0 := v_1_0_0_1.Args[0]
12332 if v_1_0_0_1_0.Op != OpRsh16x64 {
12333 break
12334 }
12335 if v_1_0_0_1_0.Type != t {
12336 break
12337 }
12338 _ = v_1_0_0_1_0.Args[1]
12339 if n != v_1_0_0_1_0.Args[0] {
12340 break
12341 }
12342 v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1]
12343 if v_1_0_0_1_0_1.Op != OpConst64 {
12344 break
12345 }
12346 if v_1_0_0_1_0_1.Type != typ.UInt64 {
12347 break
12348 }
12349 if v_1_0_0_1_0_1.AuxInt != 15 {
12350 break
12351 }
12352 v_1_0_0_1_1 := v_1_0_0_1.Args[1]
12353 if v_1_0_0_1_1.Op != OpConst64 {
12354 break
12355 }
12356 if v_1_0_0_1_1.Type != typ.UInt64 {
12357 break
12358 }
12359 kbar := v_1_0_0_1_1.AuxInt
12360 v_1_0_1 := v_1_0.Args[1]
12361 if v_1_0_1.Op != OpConst64 {
12362 break
12363 }
12364 if v_1_0_1.Type != typ.UInt64 {
12365 break
12366 }
12367 k := v_1_0_1.AuxInt
12368 v_1_1 := v_1.Args[1]
12369 if v_1_1.Op != OpConst64 {
12370 break
12371 }
12372 if v_1_1.Type != typ.UInt64 {
12373 break
12374 }
12375 if v_1_1.AuxInt != k {
12376 break
12377 }
12378 if !(k > 0 && k < 15 && kbar == 16-k) {
12379 break
12380 }
12381 v.reset(OpEq16)
12382 v0 := b.NewValue0(v.Pos, OpAnd16, t)
12383 v0.AddArg(n)
12384 v1 := b.NewValue0(v.Pos, OpConst16, t)
12385 v1.AuxInt = int64(1<<uint(k) - 1)
12386 v0.AddArg(v1)
12387 v.AddArg(v0)
12388 v2 := b.NewValue0(v.Pos, OpConst16, t)
12389 v2.AuxInt = 0
12390 v.AddArg(v2)
12391 return true
12392 }
12393
12394
12395
12396 for {
12397 _ = v.Args[1]
12398 n := v.Args[0]
12399 v_1 := v.Args[1]
12400 if v_1.Op != OpLsh16x64 {
12401 break
12402 }
12403 _ = v_1.Args[1]
12404 v_1_0 := v_1.Args[0]
12405 if v_1_0.Op != OpRsh16x64 {
12406 break
12407 }
12408 _ = v_1_0.Args[1]
12409 v_1_0_0 := v_1_0.Args[0]
12410 if v_1_0_0.Op != OpAdd16 {
12411 break
12412 }
12413 t := v_1_0_0.Type
12414 _ = v_1_0_0.Args[1]
12415 v_1_0_0_0 := v_1_0_0.Args[0]
12416 if v_1_0_0_0.Op != OpRsh16Ux64 {
12417 break
12418 }
12419 if v_1_0_0_0.Type != t {
12420 break
12421 }
12422 _ = v_1_0_0_0.Args[1]
12423 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
12424 if v_1_0_0_0_0.Op != OpRsh16x64 {
12425 break
12426 }
12427 if v_1_0_0_0_0.Type != t {
12428 break
12429 }
12430 _ = v_1_0_0_0_0.Args[1]
12431 if n != v_1_0_0_0_0.Args[0] {
12432 break
12433 }
12434 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
12435 if v_1_0_0_0_0_1.Op != OpConst64 {
12436 break
12437 }
12438 if v_1_0_0_0_0_1.Type != typ.UInt64 {
12439 break
12440 }
12441 if v_1_0_0_0_0_1.AuxInt != 15 {
12442 break
12443 }
12444 v_1_0_0_0_1 := v_1_0_0_0.Args[1]
12445 if v_1_0_0_0_1.Op != OpConst64 {
12446 break
12447 }
12448 if v_1_0_0_0_1.Type != typ.UInt64 {
12449 break
12450 }
12451 kbar := v_1_0_0_0_1.AuxInt
12452 if n != v_1_0_0.Args[1] {
12453 break
12454 }
12455 v_1_0_1 := v_1_0.Args[1]
12456 if v_1_0_1.Op != OpConst64 {
12457 break
12458 }
12459 if v_1_0_1.Type != typ.UInt64 {
12460 break
12461 }
12462 k := v_1_0_1.AuxInt
12463 v_1_1 := v_1.Args[1]
12464 if v_1_1.Op != OpConst64 {
12465 break
12466 }
12467 if v_1_1.Type != typ.UInt64 {
12468 break
12469 }
12470 if v_1_1.AuxInt != k {
12471 break
12472 }
12473 if !(k > 0 && k < 15 && kbar == 16-k) {
12474 break
12475 }
12476 v.reset(OpEq16)
12477 v0 := b.NewValue0(v.Pos, OpAnd16, t)
12478 v0.AddArg(n)
12479 v1 := b.NewValue0(v.Pos, OpConst16, t)
12480 v1.AuxInt = int64(1<<uint(k) - 1)
12481 v0.AddArg(v1)
12482 v.AddArg(v0)
12483 v2 := b.NewValue0(v.Pos, OpConst16, t)
12484 v2.AuxInt = 0
12485 v.AddArg(v2)
12486 return true
12487 }
12488
12489
12490
12491 for {
12492 n := v.Args[1]
12493 v_0 := v.Args[0]
12494 if v_0.Op != OpLsh16x64 {
12495 break
12496 }
12497 _ = v_0.Args[1]
12498 v_0_0 := v_0.Args[0]
12499 if v_0_0.Op != OpRsh16x64 {
12500 break
12501 }
12502 _ = v_0_0.Args[1]
12503 v_0_0_0 := v_0_0.Args[0]
12504 if v_0_0_0.Op != OpAdd16 {
12505 break
12506 }
12507 t := v_0_0_0.Type
12508 _ = v_0_0_0.Args[1]
12509 if n != v_0_0_0.Args[0] {
12510 break
12511 }
12512 v_0_0_0_1 := v_0_0_0.Args[1]
12513 if v_0_0_0_1.Op != OpRsh16Ux64 {
12514 break
12515 }
12516 if v_0_0_0_1.Type != t {
12517 break
12518 }
12519 _ = v_0_0_0_1.Args[1]
12520 v_0_0_0_1_0 := v_0_0_0_1.Args[0]
12521 if v_0_0_0_1_0.Op != OpRsh16x64 {
12522 break
12523 }
12524 if v_0_0_0_1_0.Type != t {
12525 break
12526 }
12527 _ = v_0_0_0_1_0.Args[1]
12528 if n != v_0_0_0_1_0.Args[0] {
12529 break
12530 }
12531 v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1]
12532 if v_0_0_0_1_0_1.Op != OpConst64 {
12533 break
12534 }
12535 if v_0_0_0_1_0_1.Type != typ.UInt64 {
12536 break
12537 }
12538 if v_0_0_0_1_0_1.AuxInt != 15 {
12539 break
12540 }
12541 v_0_0_0_1_1 := v_0_0_0_1.Args[1]
12542 if v_0_0_0_1_1.Op != OpConst64 {
12543 break
12544 }
12545 if v_0_0_0_1_1.Type != typ.UInt64 {
12546 break
12547 }
12548 kbar := v_0_0_0_1_1.AuxInt
12549 v_0_0_1 := v_0_0.Args[1]
12550 if v_0_0_1.Op != OpConst64 {
12551 break
12552 }
12553 if v_0_0_1.Type != typ.UInt64 {
12554 break
12555 }
12556 k := v_0_0_1.AuxInt
12557 v_0_1 := v_0.Args[1]
12558 if v_0_1.Op != OpConst64 {
12559 break
12560 }
12561 if v_0_1.Type != typ.UInt64 {
12562 break
12563 }
12564 if v_0_1.AuxInt != k {
12565 break
12566 }
12567 if !(k > 0 && k < 15 && kbar == 16-k) {
12568 break
12569 }
12570 v.reset(OpEq16)
12571 v0 := b.NewValue0(v.Pos, OpAnd16, t)
12572 v0.AddArg(n)
12573 v1 := b.NewValue0(v.Pos, OpConst16, t)
12574 v1.AuxInt = int64(1<<uint(k) - 1)
12575 v0.AddArg(v1)
12576 v.AddArg(v0)
12577 v2 := b.NewValue0(v.Pos, OpConst16, t)
12578 v2.AuxInt = 0
12579 v.AddArg(v2)
12580 return true
12581 }
12582
12583
12584
12585 for {
12586 n := v.Args[1]
12587 v_0 := v.Args[0]
12588 if v_0.Op != OpLsh16x64 {
12589 break
12590 }
12591 _ = v_0.Args[1]
12592 v_0_0 := v_0.Args[0]
12593 if v_0_0.Op != OpRsh16x64 {
12594 break
12595 }
12596 _ = v_0_0.Args[1]
12597 v_0_0_0 := v_0_0.Args[0]
12598 if v_0_0_0.Op != OpAdd16 {
12599 break
12600 }
12601 t := v_0_0_0.Type
12602 _ = v_0_0_0.Args[1]
12603 v_0_0_0_0 := v_0_0_0.Args[0]
12604 if v_0_0_0_0.Op != OpRsh16Ux64 {
12605 break
12606 }
12607 if v_0_0_0_0.Type != t {
12608 break
12609 }
12610 _ = v_0_0_0_0.Args[1]
12611 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
12612 if v_0_0_0_0_0.Op != OpRsh16x64 {
12613 break
12614 }
12615 if v_0_0_0_0_0.Type != t {
12616 break
12617 }
12618 _ = v_0_0_0_0_0.Args[1]
12619 if n != v_0_0_0_0_0.Args[0] {
12620 break
12621 }
12622 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
12623 if v_0_0_0_0_0_1.Op != OpConst64 {
12624 break
12625 }
12626 if v_0_0_0_0_0_1.Type != typ.UInt64 {
12627 break
12628 }
12629 if v_0_0_0_0_0_1.AuxInt != 15 {
12630 break
12631 }
12632 v_0_0_0_0_1 := v_0_0_0_0.Args[1]
12633 if v_0_0_0_0_1.Op != OpConst64 {
12634 break
12635 }
12636 if v_0_0_0_0_1.Type != typ.UInt64 {
12637 break
12638 }
12639 kbar := v_0_0_0_0_1.AuxInt
12640 if n != v_0_0_0.Args[1] {
12641 break
12642 }
12643 v_0_0_1 := v_0_0.Args[1]
12644 if v_0_0_1.Op != OpConst64 {
12645 break
12646 }
12647 if v_0_0_1.Type != typ.UInt64 {
12648 break
12649 }
12650 k := v_0_0_1.AuxInt
12651 v_0_1 := v_0.Args[1]
12652 if v_0_1.Op != OpConst64 {
12653 break
12654 }
12655 if v_0_1.Type != typ.UInt64 {
12656 break
12657 }
12658 if v_0_1.AuxInt != k {
12659 break
12660 }
12661 if !(k > 0 && k < 15 && kbar == 16-k) {
12662 break
12663 }
12664 v.reset(OpEq16)
12665 v0 := b.NewValue0(v.Pos, OpAnd16, t)
12666 v0.AddArg(n)
12667 v1 := b.NewValue0(v.Pos, OpConst16, t)
12668 v1.AuxInt = int64(1<<uint(k) - 1)
12669 v0.AddArg(v1)
12670 v.AddArg(v0)
12671 v2 := b.NewValue0(v.Pos, OpConst16, t)
12672 v2.AuxInt = 0
12673 v.AddArg(v2)
12674 return true
12675 }
12676
12677
12678
12679 for {
12680 _ = v.Args[1]
12681 s := v.Args[0]
12682 if s.Op != OpSub16 {
12683 break
12684 }
12685 y := s.Args[1]
12686 x := s.Args[0]
12687 v_1 := v.Args[1]
12688 if v_1.Op != OpConst16 {
12689 break
12690 }
12691 if v_1.AuxInt != 0 {
12692 break
12693 }
12694 if !(s.Uses == 1) {
12695 break
12696 }
12697 v.reset(OpEq16)
12698 v.AddArg(x)
12699 v.AddArg(y)
12700 return true
12701 }
12702
12703
12704
12705 for {
12706 _ = v.Args[1]
12707 v_0 := v.Args[0]
12708 if v_0.Op != OpConst16 {
12709 break
12710 }
12711 if v_0.AuxInt != 0 {
12712 break
12713 }
12714 s := v.Args[1]
12715 if s.Op != OpSub16 {
12716 break
12717 }
12718 y := s.Args[1]
12719 x := s.Args[0]
12720 if !(s.Uses == 1) {
12721 break
12722 }
12723 v.reset(OpEq16)
12724 v.AddArg(x)
12725 v.AddArg(y)
12726 return true
12727 }
12728 return false
12729 }
12730 func rewriteValuegeneric_OpEq32_0(v *Value) bool {
12731 b := v.Block
12732 typ := &b.Func.Config.Types
12733
12734
12735
12736 for {
12737 x := v.Args[1]
12738 if x != v.Args[0] {
12739 break
12740 }
12741 v.reset(OpConstBool)
12742 v.AuxInt = 1
12743 return true
12744 }
12745
12746
12747
12748 for {
12749 _ = v.Args[1]
12750 v_0 := v.Args[0]
12751 if v_0.Op != OpConst32 {
12752 break
12753 }
12754 t := v_0.Type
12755 c := v_0.AuxInt
12756 v_1 := v.Args[1]
12757 if v_1.Op != OpAdd32 {
12758 break
12759 }
12760 x := v_1.Args[1]
12761 v_1_0 := v_1.Args[0]
12762 if v_1_0.Op != OpConst32 {
12763 break
12764 }
12765 if v_1_0.Type != t {
12766 break
12767 }
12768 d := v_1_0.AuxInt
12769 v.reset(OpEq32)
12770 v0 := b.NewValue0(v.Pos, OpConst32, t)
12771 v0.AuxInt = int64(int32(c - d))
12772 v.AddArg(v0)
12773 v.AddArg(x)
12774 return true
12775 }
12776
12777
12778
12779 for {
12780 _ = v.Args[1]
12781 v_0 := v.Args[0]
12782 if v_0.Op != OpConst32 {
12783 break
12784 }
12785 t := v_0.Type
12786 c := v_0.AuxInt
12787 v_1 := v.Args[1]
12788 if v_1.Op != OpAdd32 {
12789 break
12790 }
12791 _ = v_1.Args[1]
12792 x := v_1.Args[0]
12793 v_1_1 := v_1.Args[1]
12794 if v_1_1.Op != OpConst32 {
12795 break
12796 }
12797 if v_1_1.Type != t {
12798 break
12799 }
12800 d := v_1_1.AuxInt
12801 v.reset(OpEq32)
12802 v0 := b.NewValue0(v.Pos, OpConst32, t)
12803 v0.AuxInt = int64(int32(c - d))
12804 v.AddArg(v0)
12805 v.AddArg(x)
12806 return true
12807 }
12808
12809
12810
12811 for {
12812 _ = v.Args[1]
12813 v_0 := v.Args[0]
12814 if v_0.Op != OpAdd32 {
12815 break
12816 }
12817 x := v_0.Args[1]
12818 v_0_0 := v_0.Args[0]
12819 if v_0_0.Op != OpConst32 {
12820 break
12821 }
12822 t := v_0_0.Type
12823 d := v_0_0.AuxInt
12824 v_1 := v.Args[1]
12825 if v_1.Op != OpConst32 {
12826 break
12827 }
12828 if v_1.Type != t {
12829 break
12830 }
12831 c := v_1.AuxInt
12832 v.reset(OpEq32)
12833 v0 := b.NewValue0(v.Pos, OpConst32, t)
12834 v0.AuxInt = int64(int32(c - d))
12835 v.AddArg(v0)
12836 v.AddArg(x)
12837 return true
12838 }
12839
12840
12841
12842 for {
12843 _ = v.Args[1]
12844 v_0 := v.Args[0]
12845 if v_0.Op != OpAdd32 {
12846 break
12847 }
12848 _ = v_0.Args[1]
12849 x := v_0.Args[0]
12850 v_0_1 := v_0.Args[1]
12851 if v_0_1.Op != OpConst32 {
12852 break
12853 }
12854 t := v_0_1.Type
12855 d := v_0_1.AuxInt
12856 v_1 := v.Args[1]
12857 if v_1.Op != OpConst32 {
12858 break
12859 }
12860 if v_1.Type != t {
12861 break
12862 }
12863 c := v_1.AuxInt
12864 v.reset(OpEq32)
12865 v0 := b.NewValue0(v.Pos, OpConst32, t)
12866 v0.AuxInt = int64(int32(c - d))
12867 v.AddArg(v0)
12868 v.AddArg(x)
12869 return true
12870 }
12871
12872
12873
12874 for {
12875 _ = v.Args[1]
12876 v_0 := v.Args[0]
12877 if v_0.Op != OpConst32 {
12878 break
12879 }
12880 c := v_0.AuxInt
12881 v_1 := v.Args[1]
12882 if v_1.Op != OpConst32 {
12883 break
12884 }
12885 d := v_1.AuxInt
12886 v.reset(OpConstBool)
12887 v.AuxInt = b2i(c == d)
12888 return true
12889 }
12890
12891
12892
12893 for {
12894 _ = v.Args[1]
12895 v_0 := v.Args[0]
12896 if v_0.Op != OpConst32 {
12897 break
12898 }
12899 d := v_0.AuxInt
12900 v_1 := v.Args[1]
12901 if v_1.Op != OpConst32 {
12902 break
12903 }
12904 c := v_1.AuxInt
12905 v.reset(OpConstBool)
12906 v.AuxInt = b2i(c == d)
12907 return true
12908 }
12909
12910
12911
12912 for {
12913 _ = v.Args[1]
12914 x := v.Args[0]
12915 v_1 := v.Args[1]
12916 if v_1.Op != OpMul32 {
12917 break
12918 }
12919 _ = v_1.Args[1]
12920 v_1_0 := v_1.Args[0]
12921 if v_1_0.Op != OpConst32 {
12922 break
12923 }
12924 c := v_1_0.AuxInt
12925 v_1_1 := v_1.Args[1]
12926 if v_1_1.Op != OpRsh32Ux64 {
12927 break
12928 }
12929 _ = v_1_1.Args[1]
12930 mul := v_1_1.Args[0]
12931 if mul.Op != OpHmul32u {
12932 break
12933 }
12934 _ = mul.Args[1]
12935 mul_0 := mul.Args[0]
12936 if mul_0.Op != OpConst32 {
12937 break
12938 }
12939 m := mul_0.AuxInt
12940 if x != mul.Args[1] {
12941 break
12942 }
12943 v_1_1_1 := v_1_1.Args[1]
12944 if v_1_1_1.Op != OpConst64 {
12945 break
12946 }
12947 s := v_1_1_1.AuxInt
12948 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
12949 break
12950 }
12951 v.reset(OpLeq32U)
12952 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
12953 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
12954 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
12955 v2.AuxInt = int64(int32(udivisible(32, c).m))
12956 v1.AddArg(v2)
12957 v1.AddArg(x)
12958 v0.AddArg(v1)
12959 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
12960 v3.AuxInt = int64(32 - udivisible(32, c).k)
12961 v0.AddArg(v3)
12962 v.AddArg(v0)
12963 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
12964 v4.AuxInt = int64(int32(udivisible(32, c).max))
12965 v.AddArg(v4)
12966 return true
12967 }
12968
12969
12970
12971 for {
12972 _ = v.Args[1]
12973 x := v.Args[0]
12974 v_1 := v.Args[1]
12975 if v_1.Op != OpMul32 {
12976 break
12977 }
12978 _ = v_1.Args[1]
12979 v_1_0 := v_1.Args[0]
12980 if v_1_0.Op != OpConst32 {
12981 break
12982 }
12983 c := v_1_0.AuxInt
12984 v_1_1 := v_1.Args[1]
12985 if v_1_1.Op != OpRsh32Ux64 {
12986 break
12987 }
12988 _ = v_1_1.Args[1]
12989 mul := v_1_1.Args[0]
12990 if mul.Op != OpHmul32u {
12991 break
12992 }
12993 _ = mul.Args[1]
12994 if x != mul.Args[0] {
12995 break
12996 }
12997 mul_1 := mul.Args[1]
12998 if mul_1.Op != OpConst32 {
12999 break
13000 }
13001 m := mul_1.AuxInt
13002 v_1_1_1 := v_1_1.Args[1]
13003 if v_1_1_1.Op != OpConst64 {
13004 break
13005 }
13006 s := v_1_1_1.AuxInt
13007 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13008 break
13009 }
13010 v.reset(OpLeq32U)
13011 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13012 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13013 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13014 v2.AuxInt = int64(int32(udivisible(32, c).m))
13015 v1.AddArg(v2)
13016 v1.AddArg(x)
13017 v0.AddArg(v1)
13018 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13019 v3.AuxInt = int64(32 - udivisible(32, c).k)
13020 v0.AddArg(v3)
13021 v.AddArg(v0)
13022 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13023 v4.AuxInt = int64(int32(udivisible(32, c).max))
13024 v.AddArg(v4)
13025 return true
13026 }
13027
13028
13029
13030 for {
13031 _ = v.Args[1]
13032 x := v.Args[0]
13033 v_1 := v.Args[1]
13034 if v_1.Op != OpMul32 {
13035 break
13036 }
13037 _ = v_1.Args[1]
13038 v_1_0 := v_1.Args[0]
13039 if v_1_0.Op != OpRsh32Ux64 {
13040 break
13041 }
13042 _ = v_1_0.Args[1]
13043 mul := v_1_0.Args[0]
13044 if mul.Op != OpHmul32u {
13045 break
13046 }
13047 _ = mul.Args[1]
13048 mul_0 := mul.Args[0]
13049 if mul_0.Op != OpConst32 {
13050 break
13051 }
13052 m := mul_0.AuxInt
13053 if x != mul.Args[1] {
13054 break
13055 }
13056 v_1_0_1 := v_1_0.Args[1]
13057 if v_1_0_1.Op != OpConst64 {
13058 break
13059 }
13060 s := v_1_0_1.AuxInt
13061 v_1_1 := v_1.Args[1]
13062 if v_1_1.Op != OpConst32 {
13063 break
13064 }
13065 c := v_1_1.AuxInt
13066 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13067 break
13068 }
13069 v.reset(OpLeq32U)
13070 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13071 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13072 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13073 v2.AuxInt = int64(int32(udivisible(32, c).m))
13074 v1.AddArg(v2)
13075 v1.AddArg(x)
13076 v0.AddArg(v1)
13077 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13078 v3.AuxInt = int64(32 - udivisible(32, c).k)
13079 v0.AddArg(v3)
13080 v.AddArg(v0)
13081 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13082 v4.AuxInt = int64(int32(udivisible(32, c).max))
13083 v.AddArg(v4)
13084 return true
13085 }
13086 return false
13087 }
13088 func rewriteValuegeneric_OpEq32_10(v *Value) bool {
13089 b := v.Block
13090 typ := &b.Func.Config.Types
13091
13092
13093
13094 for {
13095 _ = v.Args[1]
13096 x := v.Args[0]
13097 v_1 := v.Args[1]
13098 if v_1.Op != OpMul32 {
13099 break
13100 }
13101 _ = v_1.Args[1]
13102 v_1_0 := v_1.Args[0]
13103 if v_1_0.Op != OpRsh32Ux64 {
13104 break
13105 }
13106 _ = v_1_0.Args[1]
13107 mul := v_1_0.Args[0]
13108 if mul.Op != OpHmul32u {
13109 break
13110 }
13111 _ = mul.Args[1]
13112 if x != mul.Args[0] {
13113 break
13114 }
13115 mul_1 := mul.Args[1]
13116 if mul_1.Op != OpConst32 {
13117 break
13118 }
13119 m := mul_1.AuxInt
13120 v_1_0_1 := v_1_0.Args[1]
13121 if v_1_0_1.Op != OpConst64 {
13122 break
13123 }
13124 s := v_1_0_1.AuxInt
13125 v_1_1 := v_1.Args[1]
13126 if v_1_1.Op != OpConst32 {
13127 break
13128 }
13129 c := v_1_1.AuxInt
13130 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13131 break
13132 }
13133 v.reset(OpLeq32U)
13134 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13135 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13136 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13137 v2.AuxInt = int64(int32(udivisible(32, c).m))
13138 v1.AddArg(v2)
13139 v1.AddArg(x)
13140 v0.AddArg(v1)
13141 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13142 v3.AuxInt = int64(32 - udivisible(32, c).k)
13143 v0.AddArg(v3)
13144 v.AddArg(v0)
13145 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13146 v4.AuxInt = int64(int32(udivisible(32, c).max))
13147 v.AddArg(v4)
13148 return true
13149 }
13150
13151
13152
13153 for {
13154 x := v.Args[1]
13155 v_0 := v.Args[0]
13156 if v_0.Op != OpMul32 {
13157 break
13158 }
13159 _ = v_0.Args[1]
13160 v_0_0 := v_0.Args[0]
13161 if v_0_0.Op != OpConst32 {
13162 break
13163 }
13164 c := v_0_0.AuxInt
13165 v_0_1 := v_0.Args[1]
13166 if v_0_1.Op != OpRsh32Ux64 {
13167 break
13168 }
13169 _ = v_0_1.Args[1]
13170 mul := v_0_1.Args[0]
13171 if mul.Op != OpHmul32u {
13172 break
13173 }
13174 _ = mul.Args[1]
13175 mul_0 := mul.Args[0]
13176 if mul_0.Op != OpConst32 {
13177 break
13178 }
13179 m := mul_0.AuxInt
13180 if x != mul.Args[1] {
13181 break
13182 }
13183 v_0_1_1 := v_0_1.Args[1]
13184 if v_0_1_1.Op != OpConst64 {
13185 break
13186 }
13187 s := v_0_1_1.AuxInt
13188 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13189 break
13190 }
13191 v.reset(OpLeq32U)
13192 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13193 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13194 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13195 v2.AuxInt = int64(int32(udivisible(32, c).m))
13196 v1.AddArg(v2)
13197 v1.AddArg(x)
13198 v0.AddArg(v1)
13199 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13200 v3.AuxInt = int64(32 - udivisible(32, c).k)
13201 v0.AddArg(v3)
13202 v.AddArg(v0)
13203 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13204 v4.AuxInt = int64(int32(udivisible(32, c).max))
13205 v.AddArg(v4)
13206 return true
13207 }
13208
13209
13210
13211 for {
13212 x := v.Args[1]
13213 v_0 := v.Args[0]
13214 if v_0.Op != OpMul32 {
13215 break
13216 }
13217 _ = v_0.Args[1]
13218 v_0_0 := v_0.Args[0]
13219 if v_0_0.Op != OpConst32 {
13220 break
13221 }
13222 c := v_0_0.AuxInt
13223 v_0_1 := v_0.Args[1]
13224 if v_0_1.Op != OpRsh32Ux64 {
13225 break
13226 }
13227 _ = v_0_1.Args[1]
13228 mul := v_0_1.Args[0]
13229 if mul.Op != OpHmul32u {
13230 break
13231 }
13232 _ = mul.Args[1]
13233 if x != mul.Args[0] {
13234 break
13235 }
13236 mul_1 := mul.Args[1]
13237 if mul_1.Op != OpConst32 {
13238 break
13239 }
13240 m := mul_1.AuxInt
13241 v_0_1_1 := v_0_1.Args[1]
13242 if v_0_1_1.Op != OpConst64 {
13243 break
13244 }
13245 s := v_0_1_1.AuxInt
13246 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13247 break
13248 }
13249 v.reset(OpLeq32U)
13250 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13251 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13252 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13253 v2.AuxInt = int64(int32(udivisible(32, c).m))
13254 v1.AddArg(v2)
13255 v1.AddArg(x)
13256 v0.AddArg(v1)
13257 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13258 v3.AuxInt = int64(32 - udivisible(32, c).k)
13259 v0.AddArg(v3)
13260 v.AddArg(v0)
13261 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13262 v4.AuxInt = int64(int32(udivisible(32, c).max))
13263 v.AddArg(v4)
13264 return true
13265 }
13266
13267
13268
13269 for {
13270 x := v.Args[1]
13271 v_0 := v.Args[0]
13272 if v_0.Op != OpMul32 {
13273 break
13274 }
13275 _ = v_0.Args[1]
13276 v_0_0 := v_0.Args[0]
13277 if v_0_0.Op != OpRsh32Ux64 {
13278 break
13279 }
13280 _ = v_0_0.Args[1]
13281 mul := v_0_0.Args[0]
13282 if mul.Op != OpHmul32u {
13283 break
13284 }
13285 _ = mul.Args[1]
13286 mul_0 := mul.Args[0]
13287 if mul_0.Op != OpConst32 {
13288 break
13289 }
13290 m := mul_0.AuxInt
13291 if x != mul.Args[1] {
13292 break
13293 }
13294 v_0_0_1 := v_0_0.Args[1]
13295 if v_0_0_1.Op != OpConst64 {
13296 break
13297 }
13298 s := v_0_0_1.AuxInt
13299 v_0_1 := v_0.Args[1]
13300 if v_0_1.Op != OpConst32 {
13301 break
13302 }
13303 c := v_0_1.AuxInt
13304 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13305 break
13306 }
13307 v.reset(OpLeq32U)
13308 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13309 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13310 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13311 v2.AuxInt = int64(int32(udivisible(32, c).m))
13312 v1.AddArg(v2)
13313 v1.AddArg(x)
13314 v0.AddArg(v1)
13315 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13316 v3.AuxInt = int64(32 - udivisible(32, c).k)
13317 v0.AddArg(v3)
13318 v.AddArg(v0)
13319 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13320 v4.AuxInt = int64(int32(udivisible(32, c).max))
13321 v.AddArg(v4)
13322 return true
13323 }
13324
13325
13326
13327 for {
13328 x := v.Args[1]
13329 v_0 := v.Args[0]
13330 if v_0.Op != OpMul32 {
13331 break
13332 }
13333 _ = v_0.Args[1]
13334 v_0_0 := v_0.Args[0]
13335 if v_0_0.Op != OpRsh32Ux64 {
13336 break
13337 }
13338 _ = v_0_0.Args[1]
13339 mul := v_0_0.Args[0]
13340 if mul.Op != OpHmul32u {
13341 break
13342 }
13343 _ = mul.Args[1]
13344 if x != mul.Args[0] {
13345 break
13346 }
13347 mul_1 := mul.Args[1]
13348 if mul_1.Op != OpConst32 {
13349 break
13350 }
13351 m := mul_1.AuxInt
13352 v_0_0_1 := v_0_0.Args[1]
13353 if v_0_0_1.Op != OpConst64 {
13354 break
13355 }
13356 s := v_0_0_1.AuxInt
13357 v_0_1 := v_0.Args[1]
13358 if v_0_1.Op != OpConst32 {
13359 break
13360 }
13361 c := v_0_1.AuxInt
13362 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13363 break
13364 }
13365 v.reset(OpLeq32U)
13366 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13367 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13368 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13369 v2.AuxInt = int64(int32(udivisible(32, c).m))
13370 v1.AddArg(v2)
13371 v1.AddArg(x)
13372 v0.AddArg(v1)
13373 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13374 v3.AuxInt = int64(32 - udivisible(32, c).k)
13375 v0.AddArg(v3)
13376 v.AddArg(v0)
13377 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13378 v4.AuxInt = int64(int32(udivisible(32, c).max))
13379 v.AddArg(v4)
13380 return true
13381 }
13382
13383
13384
13385 for {
13386 _ = v.Args[1]
13387 x := v.Args[0]
13388 v_1 := v.Args[1]
13389 if v_1.Op != OpMul32 {
13390 break
13391 }
13392 _ = v_1.Args[1]
13393 v_1_0 := v_1.Args[0]
13394 if v_1_0.Op != OpConst32 {
13395 break
13396 }
13397 c := v_1_0.AuxInt
13398 v_1_1 := v_1.Args[1]
13399 if v_1_1.Op != OpRsh32Ux64 {
13400 break
13401 }
13402 _ = v_1_1.Args[1]
13403 mul := v_1_1.Args[0]
13404 if mul.Op != OpHmul32u {
13405 break
13406 }
13407 _ = mul.Args[1]
13408 mul_0 := mul.Args[0]
13409 if mul_0.Op != OpConst32 {
13410 break
13411 }
13412 if mul_0.Type != typ.UInt32 {
13413 break
13414 }
13415 m := mul_0.AuxInt
13416 mul_1 := mul.Args[1]
13417 if mul_1.Op != OpRsh32Ux64 {
13418 break
13419 }
13420 _ = mul_1.Args[1]
13421 if x != mul_1.Args[0] {
13422 break
13423 }
13424 mul_1_1 := mul_1.Args[1]
13425 if mul_1_1.Op != OpConst64 {
13426 break
13427 }
13428 if mul_1_1.AuxInt != 1 {
13429 break
13430 }
13431 v_1_1_1 := v_1_1.Args[1]
13432 if v_1_1_1.Op != OpConst64 {
13433 break
13434 }
13435 s := v_1_1_1.AuxInt
13436 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13437 break
13438 }
13439 v.reset(OpLeq32U)
13440 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13441 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13442 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13443 v2.AuxInt = int64(int32(udivisible(32, c).m))
13444 v1.AddArg(v2)
13445 v1.AddArg(x)
13446 v0.AddArg(v1)
13447 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13448 v3.AuxInt = int64(32 - udivisible(32, c).k)
13449 v0.AddArg(v3)
13450 v.AddArg(v0)
13451 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13452 v4.AuxInt = int64(int32(udivisible(32, c).max))
13453 v.AddArg(v4)
13454 return true
13455 }
13456
13457
13458
13459 for {
13460 _ = v.Args[1]
13461 x := v.Args[0]
13462 v_1 := v.Args[1]
13463 if v_1.Op != OpMul32 {
13464 break
13465 }
13466 _ = v_1.Args[1]
13467 v_1_0 := v_1.Args[0]
13468 if v_1_0.Op != OpConst32 {
13469 break
13470 }
13471 c := v_1_0.AuxInt
13472 v_1_1 := v_1.Args[1]
13473 if v_1_1.Op != OpRsh32Ux64 {
13474 break
13475 }
13476 _ = v_1_1.Args[1]
13477 mul := v_1_1.Args[0]
13478 if mul.Op != OpHmul32u {
13479 break
13480 }
13481 _ = mul.Args[1]
13482 mul_0 := mul.Args[0]
13483 if mul_0.Op != OpRsh32Ux64 {
13484 break
13485 }
13486 _ = mul_0.Args[1]
13487 if x != mul_0.Args[0] {
13488 break
13489 }
13490 mul_0_1 := mul_0.Args[1]
13491 if mul_0_1.Op != OpConst64 {
13492 break
13493 }
13494 if mul_0_1.AuxInt != 1 {
13495 break
13496 }
13497 mul_1 := mul.Args[1]
13498 if mul_1.Op != OpConst32 {
13499 break
13500 }
13501 if mul_1.Type != typ.UInt32 {
13502 break
13503 }
13504 m := mul_1.AuxInt
13505 v_1_1_1 := v_1_1.Args[1]
13506 if v_1_1_1.Op != OpConst64 {
13507 break
13508 }
13509 s := v_1_1_1.AuxInt
13510 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13511 break
13512 }
13513 v.reset(OpLeq32U)
13514 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13515 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13516 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13517 v2.AuxInt = int64(int32(udivisible(32, c).m))
13518 v1.AddArg(v2)
13519 v1.AddArg(x)
13520 v0.AddArg(v1)
13521 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13522 v3.AuxInt = int64(32 - udivisible(32, c).k)
13523 v0.AddArg(v3)
13524 v.AddArg(v0)
13525 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13526 v4.AuxInt = int64(int32(udivisible(32, c).max))
13527 v.AddArg(v4)
13528 return true
13529 }
13530
13531
13532
13533 for {
13534 _ = v.Args[1]
13535 x := v.Args[0]
13536 v_1 := v.Args[1]
13537 if v_1.Op != OpMul32 {
13538 break
13539 }
13540 _ = v_1.Args[1]
13541 v_1_0 := v_1.Args[0]
13542 if v_1_0.Op != OpRsh32Ux64 {
13543 break
13544 }
13545 _ = v_1_0.Args[1]
13546 mul := v_1_0.Args[0]
13547 if mul.Op != OpHmul32u {
13548 break
13549 }
13550 _ = mul.Args[1]
13551 mul_0 := mul.Args[0]
13552 if mul_0.Op != OpConst32 {
13553 break
13554 }
13555 if mul_0.Type != typ.UInt32 {
13556 break
13557 }
13558 m := mul_0.AuxInt
13559 mul_1 := mul.Args[1]
13560 if mul_1.Op != OpRsh32Ux64 {
13561 break
13562 }
13563 _ = mul_1.Args[1]
13564 if x != mul_1.Args[0] {
13565 break
13566 }
13567 mul_1_1 := mul_1.Args[1]
13568 if mul_1_1.Op != OpConst64 {
13569 break
13570 }
13571 if mul_1_1.AuxInt != 1 {
13572 break
13573 }
13574 v_1_0_1 := v_1_0.Args[1]
13575 if v_1_0_1.Op != OpConst64 {
13576 break
13577 }
13578 s := v_1_0_1.AuxInt
13579 v_1_1 := v_1.Args[1]
13580 if v_1_1.Op != OpConst32 {
13581 break
13582 }
13583 c := v_1_1.AuxInt
13584 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13585 break
13586 }
13587 v.reset(OpLeq32U)
13588 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13589 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13590 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13591 v2.AuxInt = int64(int32(udivisible(32, c).m))
13592 v1.AddArg(v2)
13593 v1.AddArg(x)
13594 v0.AddArg(v1)
13595 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13596 v3.AuxInt = int64(32 - udivisible(32, c).k)
13597 v0.AddArg(v3)
13598 v.AddArg(v0)
13599 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13600 v4.AuxInt = int64(int32(udivisible(32, c).max))
13601 v.AddArg(v4)
13602 return true
13603 }
13604
13605
13606
13607 for {
13608 _ = v.Args[1]
13609 x := v.Args[0]
13610 v_1 := v.Args[1]
13611 if v_1.Op != OpMul32 {
13612 break
13613 }
13614 _ = v_1.Args[1]
13615 v_1_0 := v_1.Args[0]
13616 if v_1_0.Op != OpRsh32Ux64 {
13617 break
13618 }
13619 _ = v_1_0.Args[1]
13620 mul := v_1_0.Args[0]
13621 if mul.Op != OpHmul32u {
13622 break
13623 }
13624 _ = mul.Args[1]
13625 mul_0 := mul.Args[0]
13626 if mul_0.Op != OpRsh32Ux64 {
13627 break
13628 }
13629 _ = mul_0.Args[1]
13630 if x != mul_0.Args[0] {
13631 break
13632 }
13633 mul_0_1 := mul_0.Args[1]
13634 if mul_0_1.Op != OpConst64 {
13635 break
13636 }
13637 if mul_0_1.AuxInt != 1 {
13638 break
13639 }
13640 mul_1 := mul.Args[1]
13641 if mul_1.Op != OpConst32 {
13642 break
13643 }
13644 if mul_1.Type != typ.UInt32 {
13645 break
13646 }
13647 m := mul_1.AuxInt
13648 v_1_0_1 := v_1_0.Args[1]
13649 if v_1_0_1.Op != OpConst64 {
13650 break
13651 }
13652 s := v_1_0_1.AuxInt
13653 v_1_1 := v_1.Args[1]
13654 if v_1_1.Op != OpConst32 {
13655 break
13656 }
13657 c := v_1_1.AuxInt
13658 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13659 break
13660 }
13661 v.reset(OpLeq32U)
13662 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13663 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13664 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13665 v2.AuxInt = int64(int32(udivisible(32, c).m))
13666 v1.AddArg(v2)
13667 v1.AddArg(x)
13668 v0.AddArg(v1)
13669 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13670 v3.AuxInt = int64(32 - udivisible(32, c).k)
13671 v0.AddArg(v3)
13672 v.AddArg(v0)
13673 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13674 v4.AuxInt = int64(int32(udivisible(32, c).max))
13675 v.AddArg(v4)
13676 return true
13677 }
13678
13679
13680
13681 for {
13682 x := v.Args[1]
13683 v_0 := v.Args[0]
13684 if v_0.Op != OpMul32 {
13685 break
13686 }
13687 _ = v_0.Args[1]
13688 v_0_0 := v_0.Args[0]
13689 if v_0_0.Op != OpConst32 {
13690 break
13691 }
13692 c := v_0_0.AuxInt
13693 v_0_1 := v_0.Args[1]
13694 if v_0_1.Op != OpRsh32Ux64 {
13695 break
13696 }
13697 _ = v_0_1.Args[1]
13698 mul := v_0_1.Args[0]
13699 if mul.Op != OpHmul32u {
13700 break
13701 }
13702 _ = mul.Args[1]
13703 mul_0 := mul.Args[0]
13704 if mul_0.Op != OpConst32 {
13705 break
13706 }
13707 if mul_0.Type != typ.UInt32 {
13708 break
13709 }
13710 m := mul_0.AuxInt
13711 mul_1 := mul.Args[1]
13712 if mul_1.Op != OpRsh32Ux64 {
13713 break
13714 }
13715 _ = mul_1.Args[1]
13716 if x != mul_1.Args[0] {
13717 break
13718 }
13719 mul_1_1 := mul_1.Args[1]
13720 if mul_1_1.Op != OpConst64 {
13721 break
13722 }
13723 if mul_1_1.AuxInt != 1 {
13724 break
13725 }
13726 v_0_1_1 := v_0_1.Args[1]
13727 if v_0_1_1.Op != OpConst64 {
13728 break
13729 }
13730 s := v_0_1_1.AuxInt
13731 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13732 break
13733 }
13734 v.reset(OpLeq32U)
13735 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13736 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13737 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13738 v2.AuxInt = int64(int32(udivisible(32, c).m))
13739 v1.AddArg(v2)
13740 v1.AddArg(x)
13741 v0.AddArg(v1)
13742 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13743 v3.AuxInt = int64(32 - udivisible(32, c).k)
13744 v0.AddArg(v3)
13745 v.AddArg(v0)
13746 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13747 v4.AuxInt = int64(int32(udivisible(32, c).max))
13748 v.AddArg(v4)
13749 return true
13750 }
13751 return false
13752 }
13753 func rewriteValuegeneric_OpEq32_20(v *Value) bool {
13754 b := v.Block
13755 typ := &b.Func.Config.Types
13756
13757
13758
13759 for {
13760 x := v.Args[1]
13761 v_0 := v.Args[0]
13762 if v_0.Op != OpMul32 {
13763 break
13764 }
13765 _ = v_0.Args[1]
13766 v_0_0 := v_0.Args[0]
13767 if v_0_0.Op != OpConst32 {
13768 break
13769 }
13770 c := v_0_0.AuxInt
13771 v_0_1 := v_0.Args[1]
13772 if v_0_1.Op != OpRsh32Ux64 {
13773 break
13774 }
13775 _ = v_0_1.Args[1]
13776 mul := v_0_1.Args[0]
13777 if mul.Op != OpHmul32u {
13778 break
13779 }
13780 _ = mul.Args[1]
13781 mul_0 := mul.Args[0]
13782 if mul_0.Op != OpRsh32Ux64 {
13783 break
13784 }
13785 _ = mul_0.Args[1]
13786 if x != mul_0.Args[0] {
13787 break
13788 }
13789 mul_0_1 := mul_0.Args[1]
13790 if mul_0_1.Op != OpConst64 {
13791 break
13792 }
13793 if mul_0_1.AuxInt != 1 {
13794 break
13795 }
13796 mul_1 := mul.Args[1]
13797 if mul_1.Op != OpConst32 {
13798 break
13799 }
13800 if mul_1.Type != typ.UInt32 {
13801 break
13802 }
13803 m := mul_1.AuxInt
13804 v_0_1_1 := v_0_1.Args[1]
13805 if v_0_1_1.Op != OpConst64 {
13806 break
13807 }
13808 s := v_0_1_1.AuxInt
13809 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13810 break
13811 }
13812 v.reset(OpLeq32U)
13813 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13814 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13815 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13816 v2.AuxInt = int64(int32(udivisible(32, c).m))
13817 v1.AddArg(v2)
13818 v1.AddArg(x)
13819 v0.AddArg(v1)
13820 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13821 v3.AuxInt = int64(32 - udivisible(32, c).k)
13822 v0.AddArg(v3)
13823 v.AddArg(v0)
13824 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13825 v4.AuxInt = int64(int32(udivisible(32, c).max))
13826 v.AddArg(v4)
13827 return true
13828 }
13829
13830
13831
13832 for {
13833 x := v.Args[1]
13834 v_0 := v.Args[0]
13835 if v_0.Op != OpMul32 {
13836 break
13837 }
13838 _ = v_0.Args[1]
13839 v_0_0 := v_0.Args[0]
13840 if v_0_0.Op != OpRsh32Ux64 {
13841 break
13842 }
13843 _ = v_0_0.Args[1]
13844 mul := v_0_0.Args[0]
13845 if mul.Op != OpHmul32u {
13846 break
13847 }
13848 _ = mul.Args[1]
13849 mul_0 := mul.Args[0]
13850 if mul_0.Op != OpConst32 {
13851 break
13852 }
13853 if mul_0.Type != typ.UInt32 {
13854 break
13855 }
13856 m := mul_0.AuxInt
13857 mul_1 := mul.Args[1]
13858 if mul_1.Op != OpRsh32Ux64 {
13859 break
13860 }
13861 _ = mul_1.Args[1]
13862 if x != mul_1.Args[0] {
13863 break
13864 }
13865 mul_1_1 := mul_1.Args[1]
13866 if mul_1_1.Op != OpConst64 {
13867 break
13868 }
13869 if mul_1_1.AuxInt != 1 {
13870 break
13871 }
13872 v_0_0_1 := v_0_0.Args[1]
13873 if v_0_0_1.Op != OpConst64 {
13874 break
13875 }
13876 s := v_0_0_1.AuxInt
13877 v_0_1 := v_0.Args[1]
13878 if v_0_1.Op != OpConst32 {
13879 break
13880 }
13881 c := v_0_1.AuxInt
13882 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13883 break
13884 }
13885 v.reset(OpLeq32U)
13886 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13887 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13888 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13889 v2.AuxInt = int64(int32(udivisible(32, c).m))
13890 v1.AddArg(v2)
13891 v1.AddArg(x)
13892 v0.AddArg(v1)
13893 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13894 v3.AuxInt = int64(32 - udivisible(32, c).k)
13895 v0.AddArg(v3)
13896 v.AddArg(v0)
13897 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13898 v4.AuxInt = int64(int32(udivisible(32, c).max))
13899 v.AddArg(v4)
13900 return true
13901 }
13902
13903
13904
13905 for {
13906 x := v.Args[1]
13907 v_0 := v.Args[0]
13908 if v_0.Op != OpMul32 {
13909 break
13910 }
13911 _ = v_0.Args[1]
13912 v_0_0 := v_0.Args[0]
13913 if v_0_0.Op != OpRsh32Ux64 {
13914 break
13915 }
13916 _ = v_0_0.Args[1]
13917 mul := v_0_0.Args[0]
13918 if mul.Op != OpHmul32u {
13919 break
13920 }
13921 _ = mul.Args[1]
13922 mul_0 := mul.Args[0]
13923 if mul_0.Op != OpRsh32Ux64 {
13924 break
13925 }
13926 _ = mul_0.Args[1]
13927 if x != mul_0.Args[0] {
13928 break
13929 }
13930 mul_0_1 := mul_0.Args[1]
13931 if mul_0_1.Op != OpConst64 {
13932 break
13933 }
13934 if mul_0_1.AuxInt != 1 {
13935 break
13936 }
13937 mul_1 := mul.Args[1]
13938 if mul_1.Op != OpConst32 {
13939 break
13940 }
13941 if mul_1.Type != typ.UInt32 {
13942 break
13943 }
13944 m := mul_1.AuxInt
13945 v_0_0_1 := v_0_0.Args[1]
13946 if v_0_0_1.Op != OpConst64 {
13947 break
13948 }
13949 s := v_0_0_1.AuxInt
13950 v_0_1 := v_0.Args[1]
13951 if v_0_1.Op != OpConst32 {
13952 break
13953 }
13954 c := v_0_1.AuxInt
13955 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
13956 break
13957 }
13958 v.reset(OpLeq32U)
13959 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
13960 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
13961 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13962 v2.AuxInt = int64(int32(udivisible(32, c).m))
13963 v1.AddArg(v2)
13964 v1.AddArg(x)
13965 v0.AddArg(v1)
13966 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13967 v3.AuxInt = int64(32 - udivisible(32, c).k)
13968 v0.AddArg(v3)
13969 v.AddArg(v0)
13970 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
13971 v4.AuxInt = int64(int32(udivisible(32, c).max))
13972 v.AddArg(v4)
13973 return true
13974 }
13975
13976
13977
13978 for {
13979 _ = v.Args[1]
13980 x := v.Args[0]
13981 v_1 := v.Args[1]
13982 if v_1.Op != OpMul32 {
13983 break
13984 }
13985 _ = v_1.Args[1]
13986 v_1_0 := v_1.Args[0]
13987 if v_1_0.Op != OpConst32 {
13988 break
13989 }
13990 c := v_1_0.AuxInt
13991 v_1_1 := v_1.Args[1]
13992 if v_1_1.Op != OpRsh32Ux64 {
13993 break
13994 }
13995 _ = v_1_1.Args[1]
13996 v_1_1_0 := v_1_1.Args[0]
13997 if v_1_1_0.Op != OpAvg32u {
13998 break
13999 }
14000 _ = v_1_1_0.Args[1]
14001 if x != v_1_1_0.Args[0] {
14002 break
14003 }
14004 mul := v_1_1_0.Args[1]
14005 if mul.Op != OpHmul32u {
14006 break
14007 }
14008 _ = mul.Args[1]
14009 mul_0 := mul.Args[0]
14010 if mul_0.Op != OpConst32 {
14011 break
14012 }
14013 m := mul_0.AuxInt
14014 if x != mul.Args[1] {
14015 break
14016 }
14017 v_1_1_1 := v_1_1.Args[1]
14018 if v_1_1_1.Op != OpConst64 {
14019 break
14020 }
14021 s := v_1_1_1.AuxInt
14022 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14023 break
14024 }
14025 v.reset(OpLeq32U)
14026 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14027 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14028 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14029 v2.AuxInt = int64(int32(udivisible(32, c).m))
14030 v1.AddArg(v2)
14031 v1.AddArg(x)
14032 v0.AddArg(v1)
14033 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14034 v3.AuxInt = int64(32 - udivisible(32, c).k)
14035 v0.AddArg(v3)
14036 v.AddArg(v0)
14037 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14038 v4.AuxInt = int64(int32(udivisible(32, c).max))
14039 v.AddArg(v4)
14040 return true
14041 }
14042
14043
14044
14045 for {
14046 _ = v.Args[1]
14047 x := v.Args[0]
14048 v_1 := v.Args[1]
14049 if v_1.Op != OpMul32 {
14050 break
14051 }
14052 _ = v_1.Args[1]
14053 v_1_0 := v_1.Args[0]
14054 if v_1_0.Op != OpConst32 {
14055 break
14056 }
14057 c := v_1_0.AuxInt
14058 v_1_1 := v_1.Args[1]
14059 if v_1_1.Op != OpRsh32Ux64 {
14060 break
14061 }
14062 _ = v_1_1.Args[1]
14063 v_1_1_0 := v_1_1.Args[0]
14064 if v_1_1_0.Op != OpAvg32u {
14065 break
14066 }
14067 _ = v_1_1_0.Args[1]
14068 if x != v_1_1_0.Args[0] {
14069 break
14070 }
14071 mul := v_1_1_0.Args[1]
14072 if mul.Op != OpHmul32u {
14073 break
14074 }
14075 _ = mul.Args[1]
14076 if x != mul.Args[0] {
14077 break
14078 }
14079 mul_1 := mul.Args[1]
14080 if mul_1.Op != OpConst32 {
14081 break
14082 }
14083 m := mul_1.AuxInt
14084 v_1_1_1 := v_1_1.Args[1]
14085 if v_1_1_1.Op != OpConst64 {
14086 break
14087 }
14088 s := v_1_1_1.AuxInt
14089 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14090 break
14091 }
14092 v.reset(OpLeq32U)
14093 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14094 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14095 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14096 v2.AuxInt = int64(int32(udivisible(32, c).m))
14097 v1.AddArg(v2)
14098 v1.AddArg(x)
14099 v0.AddArg(v1)
14100 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14101 v3.AuxInt = int64(32 - udivisible(32, c).k)
14102 v0.AddArg(v3)
14103 v.AddArg(v0)
14104 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14105 v4.AuxInt = int64(int32(udivisible(32, c).max))
14106 v.AddArg(v4)
14107 return true
14108 }
14109
14110
14111
14112 for {
14113 _ = v.Args[1]
14114 x := v.Args[0]
14115 v_1 := v.Args[1]
14116 if v_1.Op != OpMul32 {
14117 break
14118 }
14119 _ = v_1.Args[1]
14120 v_1_0 := v_1.Args[0]
14121 if v_1_0.Op != OpRsh32Ux64 {
14122 break
14123 }
14124 _ = v_1_0.Args[1]
14125 v_1_0_0 := v_1_0.Args[0]
14126 if v_1_0_0.Op != OpAvg32u {
14127 break
14128 }
14129 _ = v_1_0_0.Args[1]
14130 if x != v_1_0_0.Args[0] {
14131 break
14132 }
14133 mul := v_1_0_0.Args[1]
14134 if mul.Op != OpHmul32u {
14135 break
14136 }
14137 _ = mul.Args[1]
14138 mul_0 := mul.Args[0]
14139 if mul_0.Op != OpConst32 {
14140 break
14141 }
14142 m := mul_0.AuxInt
14143 if x != mul.Args[1] {
14144 break
14145 }
14146 v_1_0_1 := v_1_0.Args[1]
14147 if v_1_0_1.Op != OpConst64 {
14148 break
14149 }
14150 s := v_1_0_1.AuxInt
14151 v_1_1 := v_1.Args[1]
14152 if v_1_1.Op != OpConst32 {
14153 break
14154 }
14155 c := v_1_1.AuxInt
14156 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14157 break
14158 }
14159 v.reset(OpLeq32U)
14160 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14161 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14162 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14163 v2.AuxInt = int64(int32(udivisible(32, c).m))
14164 v1.AddArg(v2)
14165 v1.AddArg(x)
14166 v0.AddArg(v1)
14167 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14168 v3.AuxInt = int64(32 - udivisible(32, c).k)
14169 v0.AddArg(v3)
14170 v.AddArg(v0)
14171 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14172 v4.AuxInt = int64(int32(udivisible(32, c).max))
14173 v.AddArg(v4)
14174 return true
14175 }
14176
14177
14178
14179 for {
14180 _ = v.Args[1]
14181 x := v.Args[0]
14182 v_1 := v.Args[1]
14183 if v_1.Op != OpMul32 {
14184 break
14185 }
14186 _ = v_1.Args[1]
14187 v_1_0 := v_1.Args[0]
14188 if v_1_0.Op != OpRsh32Ux64 {
14189 break
14190 }
14191 _ = v_1_0.Args[1]
14192 v_1_0_0 := v_1_0.Args[0]
14193 if v_1_0_0.Op != OpAvg32u {
14194 break
14195 }
14196 _ = v_1_0_0.Args[1]
14197 if x != v_1_0_0.Args[0] {
14198 break
14199 }
14200 mul := v_1_0_0.Args[1]
14201 if mul.Op != OpHmul32u {
14202 break
14203 }
14204 _ = mul.Args[1]
14205 if x != mul.Args[0] {
14206 break
14207 }
14208 mul_1 := mul.Args[1]
14209 if mul_1.Op != OpConst32 {
14210 break
14211 }
14212 m := mul_1.AuxInt
14213 v_1_0_1 := v_1_0.Args[1]
14214 if v_1_0_1.Op != OpConst64 {
14215 break
14216 }
14217 s := v_1_0_1.AuxInt
14218 v_1_1 := v_1.Args[1]
14219 if v_1_1.Op != OpConst32 {
14220 break
14221 }
14222 c := v_1_1.AuxInt
14223 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14224 break
14225 }
14226 v.reset(OpLeq32U)
14227 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14228 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14229 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14230 v2.AuxInt = int64(int32(udivisible(32, c).m))
14231 v1.AddArg(v2)
14232 v1.AddArg(x)
14233 v0.AddArg(v1)
14234 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14235 v3.AuxInt = int64(32 - udivisible(32, c).k)
14236 v0.AddArg(v3)
14237 v.AddArg(v0)
14238 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14239 v4.AuxInt = int64(int32(udivisible(32, c).max))
14240 v.AddArg(v4)
14241 return true
14242 }
14243
14244
14245
14246 for {
14247 x := v.Args[1]
14248 v_0 := v.Args[0]
14249 if v_0.Op != OpMul32 {
14250 break
14251 }
14252 _ = v_0.Args[1]
14253 v_0_0 := v_0.Args[0]
14254 if v_0_0.Op != OpConst32 {
14255 break
14256 }
14257 c := v_0_0.AuxInt
14258 v_0_1 := v_0.Args[1]
14259 if v_0_1.Op != OpRsh32Ux64 {
14260 break
14261 }
14262 _ = v_0_1.Args[1]
14263 v_0_1_0 := v_0_1.Args[0]
14264 if v_0_1_0.Op != OpAvg32u {
14265 break
14266 }
14267 _ = v_0_1_0.Args[1]
14268 if x != v_0_1_0.Args[0] {
14269 break
14270 }
14271 mul := v_0_1_0.Args[1]
14272 if mul.Op != OpHmul32u {
14273 break
14274 }
14275 _ = mul.Args[1]
14276 mul_0 := mul.Args[0]
14277 if mul_0.Op != OpConst32 {
14278 break
14279 }
14280 m := mul_0.AuxInt
14281 if x != mul.Args[1] {
14282 break
14283 }
14284 v_0_1_1 := v_0_1.Args[1]
14285 if v_0_1_1.Op != OpConst64 {
14286 break
14287 }
14288 s := v_0_1_1.AuxInt
14289 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14290 break
14291 }
14292 v.reset(OpLeq32U)
14293 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14294 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14295 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14296 v2.AuxInt = int64(int32(udivisible(32, c).m))
14297 v1.AddArg(v2)
14298 v1.AddArg(x)
14299 v0.AddArg(v1)
14300 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14301 v3.AuxInt = int64(32 - udivisible(32, c).k)
14302 v0.AddArg(v3)
14303 v.AddArg(v0)
14304 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14305 v4.AuxInt = int64(int32(udivisible(32, c).max))
14306 v.AddArg(v4)
14307 return true
14308 }
14309
14310
14311
14312 for {
14313 x := v.Args[1]
14314 v_0 := v.Args[0]
14315 if v_0.Op != OpMul32 {
14316 break
14317 }
14318 _ = v_0.Args[1]
14319 v_0_0 := v_0.Args[0]
14320 if v_0_0.Op != OpConst32 {
14321 break
14322 }
14323 c := v_0_0.AuxInt
14324 v_0_1 := v_0.Args[1]
14325 if v_0_1.Op != OpRsh32Ux64 {
14326 break
14327 }
14328 _ = v_0_1.Args[1]
14329 v_0_1_0 := v_0_1.Args[0]
14330 if v_0_1_0.Op != OpAvg32u {
14331 break
14332 }
14333 _ = v_0_1_0.Args[1]
14334 if x != v_0_1_0.Args[0] {
14335 break
14336 }
14337 mul := v_0_1_0.Args[1]
14338 if mul.Op != OpHmul32u {
14339 break
14340 }
14341 _ = mul.Args[1]
14342 if x != mul.Args[0] {
14343 break
14344 }
14345 mul_1 := mul.Args[1]
14346 if mul_1.Op != OpConst32 {
14347 break
14348 }
14349 m := mul_1.AuxInt
14350 v_0_1_1 := v_0_1.Args[1]
14351 if v_0_1_1.Op != OpConst64 {
14352 break
14353 }
14354 s := v_0_1_1.AuxInt
14355 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14356 break
14357 }
14358 v.reset(OpLeq32U)
14359 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14360 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14361 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14362 v2.AuxInt = int64(int32(udivisible(32, c).m))
14363 v1.AddArg(v2)
14364 v1.AddArg(x)
14365 v0.AddArg(v1)
14366 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14367 v3.AuxInt = int64(32 - udivisible(32, c).k)
14368 v0.AddArg(v3)
14369 v.AddArg(v0)
14370 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14371 v4.AuxInt = int64(int32(udivisible(32, c).max))
14372 v.AddArg(v4)
14373 return true
14374 }
14375
14376
14377
14378 for {
14379 x := v.Args[1]
14380 v_0 := v.Args[0]
14381 if v_0.Op != OpMul32 {
14382 break
14383 }
14384 _ = v_0.Args[1]
14385 v_0_0 := v_0.Args[0]
14386 if v_0_0.Op != OpRsh32Ux64 {
14387 break
14388 }
14389 _ = v_0_0.Args[1]
14390 v_0_0_0 := v_0_0.Args[0]
14391 if v_0_0_0.Op != OpAvg32u {
14392 break
14393 }
14394 _ = v_0_0_0.Args[1]
14395 if x != v_0_0_0.Args[0] {
14396 break
14397 }
14398 mul := v_0_0_0.Args[1]
14399 if mul.Op != OpHmul32u {
14400 break
14401 }
14402 _ = mul.Args[1]
14403 mul_0 := mul.Args[0]
14404 if mul_0.Op != OpConst32 {
14405 break
14406 }
14407 m := mul_0.AuxInt
14408 if x != mul.Args[1] {
14409 break
14410 }
14411 v_0_0_1 := v_0_0.Args[1]
14412 if v_0_0_1.Op != OpConst64 {
14413 break
14414 }
14415 s := v_0_0_1.AuxInt
14416 v_0_1 := v_0.Args[1]
14417 if v_0_1.Op != OpConst32 {
14418 break
14419 }
14420 c := v_0_1.AuxInt
14421 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14422 break
14423 }
14424 v.reset(OpLeq32U)
14425 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14426 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14427 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14428 v2.AuxInt = int64(int32(udivisible(32, c).m))
14429 v1.AddArg(v2)
14430 v1.AddArg(x)
14431 v0.AddArg(v1)
14432 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14433 v3.AuxInt = int64(32 - udivisible(32, c).k)
14434 v0.AddArg(v3)
14435 v.AddArg(v0)
14436 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14437 v4.AuxInt = int64(int32(udivisible(32, c).max))
14438 v.AddArg(v4)
14439 return true
14440 }
14441 return false
14442 }
14443 func rewriteValuegeneric_OpEq32_30(v *Value) bool {
14444 b := v.Block
14445 typ := &b.Func.Config.Types
14446
14447
14448
14449 for {
14450 x := v.Args[1]
14451 v_0 := v.Args[0]
14452 if v_0.Op != OpMul32 {
14453 break
14454 }
14455 _ = v_0.Args[1]
14456 v_0_0 := v_0.Args[0]
14457 if v_0_0.Op != OpRsh32Ux64 {
14458 break
14459 }
14460 _ = v_0_0.Args[1]
14461 v_0_0_0 := v_0_0.Args[0]
14462 if v_0_0_0.Op != OpAvg32u {
14463 break
14464 }
14465 _ = v_0_0_0.Args[1]
14466 if x != v_0_0_0.Args[0] {
14467 break
14468 }
14469 mul := v_0_0_0.Args[1]
14470 if mul.Op != OpHmul32u {
14471 break
14472 }
14473 _ = mul.Args[1]
14474 if x != mul.Args[0] {
14475 break
14476 }
14477 mul_1 := mul.Args[1]
14478 if mul_1.Op != OpConst32 {
14479 break
14480 }
14481 m := mul_1.AuxInt
14482 v_0_0_1 := v_0_0.Args[1]
14483 if v_0_0_1.Op != OpConst64 {
14484 break
14485 }
14486 s := v_0_0_1.AuxInt
14487 v_0_1 := v_0.Args[1]
14488 if v_0_1.Op != OpConst32 {
14489 break
14490 }
14491 c := v_0_1.AuxInt
14492 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14493 break
14494 }
14495 v.reset(OpLeq32U)
14496 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14497 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14498 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14499 v2.AuxInt = int64(int32(udivisible(32, c).m))
14500 v1.AddArg(v2)
14501 v1.AddArg(x)
14502 v0.AddArg(v1)
14503 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14504 v3.AuxInt = int64(32 - udivisible(32, c).k)
14505 v0.AddArg(v3)
14506 v.AddArg(v0)
14507 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14508 v4.AuxInt = int64(int32(udivisible(32, c).max))
14509 v.AddArg(v4)
14510 return true
14511 }
14512
14513
14514
14515 for {
14516 _ = v.Args[1]
14517 x := v.Args[0]
14518 v_1 := v.Args[1]
14519 if v_1.Op != OpMul32 {
14520 break
14521 }
14522 _ = v_1.Args[1]
14523 v_1_0 := v_1.Args[0]
14524 if v_1_0.Op != OpConst32 {
14525 break
14526 }
14527 c := v_1_0.AuxInt
14528 v_1_1 := v_1.Args[1]
14529 if v_1_1.Op != OpTrunc64to32 {
14530 break
14531 }
14532 v_1_1_0 := v_1_1.Args[0]
14533 if v_1_1_0.Op != OpRsh64Ux64 {
14534 break
14535 }
14536 _ = v_1_1_0.Args[1]
14537 mul := v_1_1_0.Args[0]
14538 if mul.Op != OpMul64 {
14539 break
14540 }
14541 _ = mul.Args[1]
14542 mul_0 := mul.Args[0]
14543 if mul_0.Op != OpConst64 {
14544 break
14545 }
14546 m := mul_0.AuxInt
14547 mul_1 := mul.Args[1]
14548 if mul_1.Op != OpZeroExt32to64 {
14549 break
14550 }
14551 if x != mul_1.Args[0] {
14552 break
14553 }
14554 v_1_1_0_1 := v_1_1_0.Args[1]
14555 if v_1_1_0_1.Op != OpConst64 {
14556 break
14557 }
14558 s := v_1_1_0_1.AuxInt
14559 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14560 break
14561 }
14562 v.reset(OpLeq32U)
14563 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14564 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14565 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14566 v2.AuxInt = int64(int32(udivisible(32, c).m))
14567 v1.AddArg(v2)
14568 v1.AddArg(x)
14569 v0.AddArg(v1)
14570 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14571 v3.AuxInt = int64(32 - udivisible(32, c).k)
14572 v0.AddArg(v3)
14573 v.AddArg(v0)
14574 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14575 v4.AuxInt = int64(int32(udivisible(32, c).max))
14576 v.AddArg(v4)
14577 return true
14578 }
14579
14580
14581
14582 for {
14583 _ = v.Args[1]
14584 x := v.Args[0]
14585 v_1 := v.Args[1]
14586 if v_1.Op != OpMul32 {
14587 break
14588 }
14589 _ = v_1.Args[1]
14590 v_1_0 := v_1.Args[0]
14591 if v_1_0.Op != OpConst32 {
14592 break
14593 }
14594 c := v_1_0.AuxInt
14595 v_1_1 := v_1.Args[1]
14596 if v_1_1.Op != OpTrunc64to32 {
14597 break
14598 }
14599 v_1_1_0 := v_1_1.Args[0]
14600 if v_1_1_0.Op != OpRsh64Ux64 {
14601 break
14602 }
14603 _ = v_1_1_0.Args[1]
14604 mul := v_1_1_0.Args[0]
14605 if mul.Op != OpMul64 {
14606 break
14607 }
14608 _ = mul.Args[1]
14609 mul_0 := mul.Args[0]
14610 if mul_0.Op != OpZeroExt32to64 {
14611 break
14612 }
14613 if x != mul_0.Args[0] {
14614 break
14615 }
14616 mul_1 := mul.Args[1]
14617 if mul_1.Op != OpConst64 {
14618 break
14619 }
14620 m := mul_1.AuxInt
14621 v_1_1_0_1 := v_1_1_0.Args[1]
14622 if v_1_1_0_1.Op != OpConst64 {
14623 break
14624 }
14625 s := v_1_1_0_1.AuxInt
14626 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14627 break
14628 }
14629 v.reset(OpLeq32U)
14630 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14631 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14632 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14633 v2.AuxInt = int64(int32(udivisible(32, c).m))
14634 v1.AddArg(v2)
14635 v1.AddArg(x)
14636 v0.AddArg(v1)
14637 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14638 v3.AuxInt = int64(32 - udivisible(32, c).k)
14639 v0.AddArg(v3)
14640 v.AddArg(v0)
14641 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14642 v4.AuxInt = int64(int32(udivisible(32, c).max))
14643 v.AddArg(v4)
14644 return true
14645 }
14646
14647
14648
14649 for {
14650 _ = v.Args[1]
14651 x := v.Args[0]
14652 v_1 := v.Args[1]
14653 if v_1.Op != OpMul32 {
14654 break
14655 }
14656 _ = v_1.Args[1]
14657 v_1_0 := v_1.Args[0]
14658 if v_1_0.Op != OpTrunc64to32 {
14659 break
14660 }
14661 v_1_0_0 := v_1_0.Args[0]
14662 if v_1_0_0.Op != OpRsh64Ux64 {
14663 break
14664 }
14665 _ = v_1_0_0.Args[1]
14666 mul := v_1_0_0.Args[0]
14667 if mul.Op != OpMul64 {
14668 break
14669 }
14670 _ = mul.Args[1]
14671 mul_0 := mul.Args[0]
14672 if mul_0.Op != OpConst64 {
14673 break
14674 }
14675 m := mul_0.AuxInt
14676 mul_1 := mul.Args[1]
14677 if mul_1.Op != OpZeroExt32to64 {
14678 break
14679 }
14680 if x != mul_1.Args[0] {
14681 break
14682 }
14683 v_1_0_0_1 := v_1_0_0.Args[1]
14684 if v_1_0_0_1.Op != OpConst64 {
14685 break
14686 }
14687 s := v_1_0_0_1.AuxInt
14688 v_1_1 := v_1.Args[1]
14689 if v_1_1.Op != OpConst32 {
14690 break
14691 }
14692 c := v_1_1.AuxInt
14693 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14694 break
14695 }
14696 v.reset(OpLeq32U)
14697 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14698 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14699 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14700 v2.AuxInt = int64(int32(udivisible(32, c).m))
14701 v1.AddArg(v2)
14702 v1.AddArg(x)
14703 v0.AddArg(v1)
14704 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14705 v3.AuxInt = int64(32 - udivisible(32, c).k)
14706 v0.AddArg(v3)
14707 v.AddArg(v0)
14708 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14709 v4.AuxInt = int64(int32(udivisible(32, c).max))
14710 v.AddArg(v4)
14711 return true
14712 }
14713
14714
14715
14716 for {
14717 _ = v.Args[1]
14718 x := v.Args[0]
14719 v_1 := v.Args[1]
14720 if v_1.Op != OpMul32 {
14721 break
14722 }
14723 _ = v_1.Args[1]
14724 v_1_0 := v_1.Args[0]
14725 if v_1_0.Op != OpTrunc64to32 {
14726 break
14727 }
14728 v_1_0_0 := v_1_0.Args[0]
14729 if v_1_0_0.Op != OpRsh64Ux64 {
14730 break
14731 }
14732 _ = v_1_0_0.Args[1]
14733 mul := v_1_0_0.Args[0]
14734 if mul.Op != OpMul64 {
14735 break
14736 }
14737 _ = mul.Args[1]
14738 mul_0 := mul.Args[0]
14739 if mul_0.Op != OpZeroExt32to64 {
14740 break
14741 }
14742 if x != mul_0.Args[0] {
14743 break
14744 }
14745 mul_1 := mul.Args[1]
14746 if mul_1.Op != OpConst64 {
14747 break
14748 }
14749 m := mul_1.AuxInt
14750 v_1_0_0_1 := v_1_0_0.Args[1]
14751 if v_1_0_0_1.Op != OpConst64 {
14752 break
14753 }
14754 s := v_1_0_0_1.AuxInt
14755 v_1_1 := v_1.Args[1]
14756 if v_1_1.Op != OpConst32 {
14757 break
14758 }
14759 c := v_1_1.AuxInt
14760 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14761 break
14762 }
14763 v.reset(OpLeq32U)
14764 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14765 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14766 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14767 v2.AuxInt = int64(int32(udivisible(32, c).m))
14768 v1.AddArg(v2)
14769 v1.AddArg(x)
14770 v0.AddArg(v1)
14771 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14772 v3.AuxInt = int64(32 - udivisible(32, c).k)
14773 v0.AddArg(v3)
14774 v.AddArg(v0)
14775 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14776 v4.AuxInt = int64(int32(udivisible(32, c).max))
14777 v.AddArg(v4)
14778 return true
14779 }
14780
14781
14782
14783 for {
14784 x := v.Args[1]
14785 v_0 := v.Args[0]
14786 if v_0.Op != OpMul32 {
14787 break
14788 }
14789 _ = v_0.Args[1]
14790 v_0_0 := v_0.Args[0]
14791 if v_0_0.Op != OpConst32 {
14792 break
14793 }
14794 c := v_0_0.AuxInt
14795 v_0_1 := v_0.Args[1]
14796 if v_0_1.Op != OpTrunc64to32 {
14797 break
14798 }
14799 v_0_1_0 := v_0_1.Args[0]
14800 if v_0_1_0.Op != OpRsh64Ux64 {
14801 break
14802 }
14803 _ = v_0_1_0.Args[1]
14804 mul := v_0_1_0.Args[0]
14805 if mul.Op != OpMul64 {
14806 break
14807 }
14808 _ = mul.Args[1]
14809 mul_0 := mul.Args[0]
14810 if mul_0.Op != OpConst64 {
14811 break
14812 }
14813 m := mul_0.AuxInt
14814 mul_1 := mul.Args[1]
14815 if mul_1.Op != OpZeroExt32to64 {
14816 break
14817 }
14818 if x != mul_1.Args[0] {
14819 break
14820 }
14821 v_0_1_0_1 := v_0_1_0.Args[1]
14822 if v_0_1_0_1.Op != OpConst64 {
14823 break
14824 }
14825 s := v_0_1_0_1.AuxInt
14826 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14827 break
14828 }
14829 v.reset(OpLeq32U)
14830 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14831 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14832 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14833 v2.AuxInt = int64(int32(udivisible(32, c).m))
14834 v1.AddArg(v2)
14835 v1.AddArg(x)
14836 v0.AddArg(v1)
14837 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14838 v3.AuxInt = int64(32 - udivisible(32, c).k)
14839 v0.AddArg(v3)
14840 v.AddArg(v0)
14841 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14842 v4.AuxInt = int64(int32(udivisible(32, c).max))
14843 v.AddArg(v4)
14844 return true
14845 }
14846
14847
14848
14849 for {
14850 x := v.Args[1]
14851 v_0 := v.Args[0]
14852 if v_0.Op != OpMul32 {
14853 break
14854 }
14855 _ = v_0.Args[1]
14856 v_0_0 := v_0.Args[0]
14857 if v_0_0.Op != OpConst32 {
14858 break
14859 }
14860 c := v_0_0.AuxInt
14861 v_0_1 := v_0.Args[1]
14862 if v_0_1.Op != OpTrunc64to32 {
14863 break
14864 }
14865 v_0_1_0 := v_0_1.Args[0]
14866 if v_0_1_0.Op != OpRsh64Ux64 {
14867 break
14868 }
14869 _ = v_0_1_0.Args[1]
14870 mul := v_0_1_0.Args[0]
14871 if mul.Op != OpMul64 {
14872 break
14873 }
14874 _ = mul.Args[1]
14875 mul_0 := mul.Args[0]
14876 if mul_0.Op != OpZeroExt32to64 {
14877 break
14878 }
14879 if x != mul_0.Args[0] {
14880 break
14881 }
14882 mul_1 := mul.Args[1]
14883 if mul_1.Op != OpConst64 {
14884 break
14885 }
14886 m := mul_1.AuxInt
14887 v_0_1_0_1 := v_0_1_0.Args[1]
14888 if v_0_1_0_1.Op != OpConst64 {
14889 break
14890 }
14891 s := v_0_1_0_1.AuxInt
14892 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14893 break
14894 }
14895 v.reset(OpLeq32U)
14896 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14897 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14898 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14899 v2.AuxInt = int64(int32(udivisible(32, c).m))
14900 v1.AddArg(v2)
14901 v1.AddArg(x)
14902 v0.AddArg(v1)
14903 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14904 v3.AuxInt = int64(32 - udivisible(32, c).k)
14905 v0.AddArg(v3)
14906 v.AddArg(v0)
14907 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14908 v4.AuxInt = int64(int32(udivisible(32, c).max))
14909 v.AddArg(v4)
14910 return true
14911 }
14912
14913
14914
14915 for {
14916 x := v.Args[1]
14917 v_0 := v.Args[0]
14918 if v_0.Op != OpMul32 {
14919 break
14920 }
14921 _ = v_0.Args[1]
14922 v_0_0 := v_0.Args[0]
14923 if v_0_0.Op != OpTrunc64to32 {
14924 break
14925 }
14926 v_0_0_0 := v_0_0.Args[0]
14927 if v_0_0_0.Op != OpRsh64Ux64 {
14928 break
14929 }
14930 _ = v_0_0_0.Args[1]
14931 mul := v_0_0_0.Args[0]
14932 if mul.Op != OpMul64 {
14933 break
14934 }
14935 _ = mul.Args[1]
14936 mul_0 := mul.Args[0]
14937 if mul_0.Op != OpConst64 {
14938 break
14939 }
14940 m := mul_0.AuxInt
14941 mul_1 := mul.Args[1]
14942 if mul_1.Op != OpZeroExt32to64 {
14943 break
14944 }
14945 if x != mul_1.Args[0] {
14946 break
14947 }
14948 v_0_0_0_1 := v_0_0_0.Args[1]
14949 if v_0_0_0_1.Op != OpConst64 {
14950 break
14951 }
14952 s := v_0_0_0_1.AuxInt
14953 v_0_1 := v_0.Args[1]
14954 if v_0_1.Op != OpConst32 {
14955 break
14956 }
14957 c := v_0_1.AuxInt
14958 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
14959 break
14960 }
14961 v.reset(OpLeq32U)
14962 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
14963 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
14964 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14965 v2.AuxInt = int64(int32(udivisible(32, c).m))
14966 v1.AddArg(v2)
14967 v1.AddArg(x)
14968 v0.AddArg(v1)
14969 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14970 v3.AuxInt = int64(32 - udivisible(32, c).k)
14971 v0.AddArg(v3)
14972 v.AddArg(v0)
14973 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
14974 v4.AuxInt = int64(int32(udivisible(32, c).max))
14975 v.AddArg(v4)
14976 return true
14977 }
14978
14979
14980
14981 for {
14982 x := v.Args[1]
14983 v_0 := v.Args[0]
14984 if v_0.Op != OpMul32 {
14985 break
14986 }
14987 _ = v_0.Args[1]
14988 v_0_0 := v_0.Args[0]
14989 if v_0_0.Op != OpTrunc64to32 {
14990 break
14991 }
14992 v_0_0_0 := v_0_0.Args[0]
14993 if v_0_0_0.Op != OpRsh64Ux64 {
14994 break
14995 }
14996 _ = v_0_0_0.Args[1]
14997 mul := v_0_0_0.Args[0]
14998 if mul.Op != OpMul64 {
14999 break
15000 }
15001 _ = mul.Args[1]
15002 mul_0 := mul.Args[0]
15003 if mul_0.Op != OpZeroExt32to64 {
15004 break
15005 }
15006 if x != mul_0.Args[0] {
15007 break
15008 }
15009 mul_1 := mul.Args[1]
15010 if mul_1.Op != OpConst64 {
15011 break
15012 }
15013 m := mul_1.AuxInt
15014 v_0_0_0_1 := v_0_0_0.Args[1]
15015 if v_0_0_0_1.Op != OpConst64 {
15016 break
15017 }
15018 s := v_0_0_0_1.AuxInt
15019 v_0_1 := v_0.Args[1]
15020 if v_0_1.Op != OpConst32 {
15021 break
15022 }
15023 c := v_0_1.AuxInt
15024 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15025 break
15026 }
15027 v.reset(OpLeq32U)
15028 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15029 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15030 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15031 v2.AuxInt = int64(int32(udivisible(32, c).m))
15032 v1.AddArg(v2)
15033 v1.AddArg(x)
15034 v0.AddArg(v1)
15035 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15036 v3.AuxInt = int64(32 - udivisible(32, c).k)
15037 v0.AddArg(v3)
15038 v.AddArg(v0)
15039 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15040 v4.AuxInt = int64(int32(udivisible(32, c).max))
15041 v.AddArg(v4)
15042 return true
15043 }
15044
15045
15046
15047 for {
15048 _ = v.Args[1]
15049 x := v.Args[0]
15050 v_1 := v.Args[1]
15051 if v_1.Op != OpMul32 {
15052 break
15053 }
15054 _ = v_1.Args[1]
15055 v_1_0 := v_1.Args[0]
15056 if v_1_0.Op != OpConst32 {
15057 break
15058 }
15059 c := v_1_0.AuxInt
15060 v_1_1 := v_1.Args[1]
15061 if v_1_1.Op != OpTrunc64to32 {
15062 break
15063 }
15064 v_1_1_0 := v_1_1.Args[0]
15065 if v_1_1_0.Op != OpRsh64Ux64 {
15066 break
15067 }
15068 _ = v_1_1_0.Args[1]
15069 mul := v_1_1_0.Args[0]
15070 if mul.Op != OpMul64 {
15071 break
15072 }
15073 _ = mul.Args[1]
15074 mul_0 := mul.Args[0]
15075 if mul_0.Op != OpConst64 {
15076 break
15077 }
15078 m := mul_0.AuxInt
15079 mul_1 := mul.Args[1]
15080 if mul_1.Op != OpRsh64Ux64 {
15081 break
15082 }
15083 _ = mul_1.Args[1]
15084 mul_1_0 := mul_1.Args[0]
15085 if mul_1_0.Op != OpZeroExt32to64 {
15086 break
15087 }
15088 if x != mul_1_0.Args[0] {
15089 break
15090 }
15091 mul_1_1 := mul_1.Args[1]
15092 if mul_1_1.Op != OpConst64 {
15093 break
15094 }
15095 if mul_1_1.AuxInt != 1 {
15096 break
15097 }
15098 v_1_1_0_1 := v_1_1_0.Args[1]
15099 if v_1_1_0_1.Op != OpConst64 {
15100 break
15101 }
15102 s := v_1_1_0_1.AuxInt
15103 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15104 break
15105 }
15106 v.reset(OpLeq32U)
15107 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15108 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15109 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15110 v2.AuxInt = int64(int32(udivisible(32, c).m))
15111 v1.AddArg(v2)
15112 v1.AddArg(x)
15113 v0.AddArg(v1)
15114 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15115 v3.AuxInt = int64(32 - udivisible(32, c).k)
15116 v0.AddArg(v3)
15117 v.AddArg(v0)
15118 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15119 v4.AuxInt = int64(int32(udivisible(32, c).max))
15120 v.AddArg(v4)
15121 return true
15122 }
15123 return false
15124 }
15125 func rewriteValuegeneric_OpEq32_40(v *Value) bool {
15126 b := v.Block
15127 typ := &b.Func.Config.Types
15128
15129
15130
15131 for {
15132 _ = v.Args[1]
15133 x := v.Args[0]
15134 v_1 := v.Args[1]
15135 if v_1.Op != OpMul32 {
15136 break
15137 }
15138 _ = v_1.Args[1]
15139 v_1_0 := v_1.Args[0]
15140 if v_1_0.Op != OpConst32 {
15141 break
15142 }
15143 c := v_1_0.AuxInt
15144 v_1_1 := v_1.Args[1]
15145 if v_1_1.Op != OpTrunc64to32 {
15146 break
15147 }
15148 v_1_1_0 := v_1_1.Args[0]
15149 if v_1_1_0.Op != OpRsh64Ux64 {
15150 break
15151 }
15152 _ = v_1_1_0.Args[1]
15153 mul := v_1_1_0.Args[0]
15154 if mul.Op != OpMul64 {
15155 break
15156 }
15157 _ = mul.Args[1]
15158 mul_0 := mul.Args[0]
15159 if mul_0.Op != OpRsh64Ux64 {
15160 break
15161 }
15162 _ = mul_0.Args[1]
15163 mul_0_0 := mul_0.Args[0]
15164 if mul_0_0.Op != OpZeroExt32to64 {
15165 break
15166 }
15167 if x != mul_0_0.Args[0] {
15168 break
15169 }
15170 mul_0_1 := mul_0.Args[1]
15171 if mul_0_1.Op != OpConst64 {
15172 break
15173 }
15174 if mul_0_1.AuxInt != 1 {
15175 break
15176 }
15177 mul_1 := mul.Args[1]
15178 if mul_1.Op != OpConst64 {
15179 break
15180 }
15181 m := mul_1.AuxInt
15182 v_1_1_0_1 := v_1_1_0.Args[1]
15183 if v_1_1_0_1.Op != OpConst64 {
15184 break
15185 }
15186 s := v_1_1_0_1.AuxInt
15187 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15188 break
15189 }
15190 v.reset(OpLeq32U)
15191 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15192 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15193 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15194 v2.AuxInt = int64(int32(udivisible(32, c).m))
15195 v1.AddArg(v2)
15196 v1.AddArg(x)
15197 v0.AddArg(v1)
15198 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15199 v3.AuxInt = int64(32 - udivisible(32, c).k)
15200 v0.AddArg(v3)
15201 v.AddArg(v0)
15202 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15203 v4.AuxInt = int64(int32(udivisible(32, c).max))
15204 v.AddArg(v4)
15205 return true
15206 }
15207
15208
15209
15210 for {
15211 _ = v.Args[1]
15212 x := v.Args[0]
15213 v_1 := v.Args[1]
15214 if v_1.Op != OpMul32 {
15215 break
15216 }
15217 _ = v_1.Args[1]
15218 v_1_0 := v_1.Args[0]
15219 if v_1_0.Op != OpTrunc64to32 {
15220 break
15221 }
15222 v_1_0_0 := v_1_0.Args[0]
15223 if v_1_0_0.Op != OpRsh64Ux64 {
15224 break
15225 }
15226 _ = v_1_0_0.Args[1]
15227 mul := v_1_0_0.Args[0]
15228 if mul.Op != OpMul64 {
15229 break
15230 }
15231 _ = mul.Args[1]
15232 mul_0 := mul.Args[0]
15233 if mul_0.Op != OpConst64 {
15234 break
15235 }
15236 m := mul_0.AuxInt
15237 mul_1 := mul.Args[1]
15238 if mul_1.Op != OpRsh64Ux64 {
15239 break
15240 }
15241 _ = mul_1.Args[1]
15242 mul_1_0 := mul_1.Args[0]
15243 if mul_1_0.Op != OpZeroExt32to64 {
15244 break
15245 }
15246 if x != mul_1_0.Args[0] {
15247 break
15248 }
15249 mul_1_1 := mul_1.Args[1]
15250 if mul_1_1.Op != OpConst64 {
15251 break
15252 }
15253 if mul_1_1.AuxInt != 1 {
15254 break
15255 }
15256 v_1_0_0_1 := v_1_0_0.Args[1]
15257 if v_1_0_0_1.Op != OpConst64 {
15258 break
15259 }
15260 s := v_1_0_0_1.AuxInt
15261 v_1_1 := v_1.Args[1]
15262 if v_1_1.Op != OpConst32 {
15263 break
15264 }
15265 c := v_1_1.AuxInt
15266 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15267 break
15268 }
15269 v.reset(OpLeq32U)
15270 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15271 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15272 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15273 v2.AuxInt = int64(int32(udivisible(32, c).m))
15274 v1.AddArg(v2)
15275 v1.AddArg(x)
15276 v0.AddArg(v1)
15277 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15278 v3.AuxInt = int64(32 - udivisible(32, c).k)
15279 v0.AddArg(v3)
15280 v.AddArg(v0)
15281 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15282 v4.AuxInt = int64(int32(udivisible(32, c).max))
15283 v.AddArg(v4)
15284 return true
15285 }
15286
15287
15288
15289 for {
15290 _ = v.Args[1]
15291 x := v.Args[0]
15292 v_1 := v.Args[1]
15293 if v_1.Op != OpMul32 {
15294 break
15295 }
15296 _ = v_1.Args[1]
15297 v_1_0 := v_1.Args[0]
15298 if v_1_0.Op != OpTrunc64to32 {
15299 break
15300 }
15301 v_1_0_0 := v_1_0.Args[0]
15302 if v_1_0_0.Op != OpRsh64Ux64 {
15303 break
15304 }
15305 _ = v_1_0_0.Args[1]
15306 mul := v_1_0_0.Args[0]
15307 if mul.Op != OpMul64 {
15308 break
15309 }
15310 _ = mul.Args[1]
15311 mul_0 := mul.Args[0]
15312 if mul_0.Op != OpRsh64Ux64 {
15313 break
15314 }
15315 _ = mul_0.Args[1]
15316 mul_0_0 := mul_0.Args[0]
15317 if mul_0_0.Op != OpZeroExt32to64 {
15318 break
15319 }
15320 if x != mul_0_0.Args[0] {
15321 break
15322 }
15323 mul_0_1 := mul_0.Args[1]
15324 if mul_0_1.Op != OpConst64 {
15325 break
15326 }
15327 if mul_0_1.AuxInt != 1 {
15328 break
15329 }
15330 mul_1 := mul.Args[1]
15331 if mul_1.Op != OpConst64 {
15332 break
15333 }
15334 m := mul_1.AuxInt
15335 v_1_0_0_1 := v_1_0_0.Args[1]
15336 if v_1_0_0_1.Op != OpConst64 {
15337 break
15338 }
15339 s := v_1_0_0_1.AuxInt
15340 v_1_1 := v_1.Args[1]
15341 if v_1_1.Op != OpConst32 {
15342 break
15343 }
15344 c := v_1_1.AuxInt
15345 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15346 break
15347 }
15348 v.reset(OpLeq32U)
15349 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15350 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15351 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15352 v2.AuxInt = int64(int32(udivisible(32, c).m))
15353 v1.AddArg(v2)
15354 v1.AddArg(x)
15355 v0.AddArg(v1)
15356 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15357 v3.AuxInt = int64(32 - udivisible(32, c).k)
15358 v0.AddArg(v3)
15359 v.AddArg(v0)
15360 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15361 v4.AuxInt = int64(int32(udivisible(32, c).max))
15362 v.AddArg(v4)
15363 return true
15364 }
15365
15366
15367
15368 for {
15369 x := v.Args[1]
15370 v_0 := v.Args[0]
15371 if v_0.Op != OpMul32 {
15372 break
15373 }
15374 _ = v_0.Args[1]
15375 v_0_0 := v_0.Args[0]
15376 if v_0_0.Op != OpConst32 {
15377 break
15378 }
15379 c := v_0_0.AuxInt
15380 v_0_1 := v_0.Args[1]
15381 if v_0_1.Op != OpTrunc64to32 {
15382 break
15383 }
15384 v_0_1_0 := v_0_1.Args[0]
15385 if v_0_1_0.Op != OpRsh64Ux64 {
15386 break
15387 }
15388 _ = v_0_1_0.Args[1]
15389 mul := v_0_1_0.Args[0]
15390 if mul.Op != OpMul64 {
15391 break
15392 }
15393 _ = mul.Args[1]
15394 mul_0 := mul.Args[0]
15395 if mul_0.Op != OpConst64 {
15396 break
15397 }
15398 m := mul_0.AuxInt
15399 mul_1 := mul.Args[1]
15400 if mul_1.Op != OpRsh64Ux64 {
15401 break
15402 }
15403 _ = mul_1.Args[1]
15404 mul_1_0 := mul_1.Args[0]
15405 if mul_1_0.Op != OpZeroExt32to64 {
15406 break
15407 }
15408 if x != mul_1_0.Args[0] {
15409 break
15410 }
15411 mul_1_1 := mul_1.Args[1]
15412 if mul_1_1.Op != OpConst64 {
15413 break
15414 }
15415 if mul_1_1.AuxInt != 1 {
15416 break
15417 }
15418 v_0_1_0_1 := v_0_1_0.Args[1]
15419 if v_0_1_0_1.Op != OpConst64 {
15420 break
15421 }
15422 s := v_0_1_0_1.AuxInt
15423 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15424 break
15425 }
15426 v.reset(OpLeq32U)
15427 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15428 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15429 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15430 v2.AuxInt = int64(int32(udivisible(32, c).m))
15431 v1.AddArg(v2)
15432 v1.AddArg(x)
15433 v0.AddArg(v1)
15434 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15435 v3.AuxInt = int64(32 - udivisible(32, c).k)
15436 v0.AddArg(v3)
15437 v.AddArg(v0)
15438 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15439 v4.AuxInt = int64(int32(udivisible(32, c).max))
15440 v.AddArg(v4)
15441 return true
15442 }
15443
15444
15445
15446 for {
15447 x := v.Args[1]
15448 v_0 := v.Args[0]
15449 if v_0.Op != OpMul32 {
15450 break
15451 }
15452 _ = v_0.Args[1]
15453 v_0_0 := v_0.Args[0]
15454 if v_0_0.Op != OpConst32 {
15455 break
15456 }
15457 c := v_0_0.AuxInt
15458 v_0_1 := v_0.Args[1]
15459 if v_0_1.Op != OpTrunc64to32 {
15460 break
15461 }
15462 v_0_1_0 := v_0_1.Args[0]
15463 if v_0_1_0.Op != OpRsh64Ux64 {
15464 break
15465 }
15466 _ = v_0_1_0.Args[1]
15467 mul := v_0_1_0.Args[0]
15468 if mul.Op != OpMul64 {
15469 break
15470 }
15471 _ = mul.Args[1]
15472 mul_0 := mul.Args[0]
15473 if mul_0.Op != OpRsh64Ux64 {
15474 break
15475 }
15476 _ = mul_0.Args[1]
15477 mul_0_0 := mul_0.Args[0]
15478 if mul_0_0.Op != OpZeroExt32to64 {
15479 break
15480 }
15481 if x != mul_0_0.Args[0] {
15482 break
15483 }
15484 mul_0_1 := mul_0.Args[1]
15485 if mul_0_1.Op != OpConst64 {
15486 break
15487 }
15488 if mul_0_1.AuxInt != 1 {
15489 break
15490 }
15491 mul_1 := mul.Args[1]
15492 if mul_1.Op != OpConst64 {
15493 break
15494 }
15495 m := mul_1.AuxInt
15496 v_0_1_0_1 := v_0_1_0.Args[1]
15497 if v_0_1_0_1.Op != OpConst64 {
15498 break
15499 }
15500 s := v_0_1_0_1.AuxInt
15501 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15502 break
15503 }
15504 v.reset(OpLeq32U)
15505 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15506 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15507 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15508 v2.AuxInt = int64(int32(udivisible(32, c).m))
15509 v1.AddArg(v2)
15510 v1.AddArg(x)
15511 v0.AddArg(v1)
15512 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15513 v3.AuxInt = int64(32 - udivisible(32, c).k)
15514 v0.AddArg(v3)
15515 v.AddArg(v0)
15516 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15517 v4.AuxInt = int64(int32(udivisible(32, c).max))
15518 v.AddArg(v4)
15519 return true
15520 }
15521
15522
15523
15524 for {
15525 x := v.Args[1]
15526 v_0 := v.Args[0]
15527 if v_0.Op != OpMul32 {
15528 break
15529 }
15530 _ = v_0.Args[1]
15531 v_0_0 := v_0.Args[0]
15532 if v_0_0.Op != OpTrunc64to32 {
15533 break
15534 }
15535 v_0_0_0 := v_0_0.Args[0]
15536 if v_0_0_0.Op != OpRsh64Ux64 {
15537 break
15538 }
15539 _ = v_0_0_0.Args[1]
15540 mul := v_0_0_0.Args[0]
15541 if mul.Op != OpMul64 {
15542 break
15543 }
15544 _ = mul.Args[1]
15545 mul_0 := mul.Args[0]
15546 if mul_0.Op != OpConst64 {
15547 break
15548 }
15549 m := mul_0.AuxInt
15550 mul_1 := mul.Args[1]
15551 if mul_1.Op != OpRsh64Ux64 {
15552 break
15553 }
15554 _ = mul_1.Args[1]
15555 mul_1_0 := mul_1.Args[0]
15556 if mul_1_0.Op != OpZeroExt32to64 {
15557 break
15558 }
15559 if x != mul_1_0.Args[0] {
15560 break
15561 }
15562 mul_1_1 := mul_1.Args[1]
15563 if mul_1_1.Op != OpConst64 {
15564 break
15565 }
15566 if mul_1_1.AuxInt != 1 {
15567 break
15568 }
15569 v_0_0_0_1 := v_0_0_0.Args[1]
15570 if v_0_0_0_1.Op != OpConst64 {
15571 break
15572 }
15573 s := v_0_0_0_1.AuxInt
15574 v_0_1 := v_0.Args[1]
15575 if v_0_1.Op != OpConst32 {
15576 break
15577 }
15578 c := v_0_1.AuxInt
15579 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15580 break
15581 }
15582 v.reset(OpLeq32U)
15583 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15584 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15585 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15586 v2.AuxInt = int64(int32(udivisible(32, c).m))
15587 v1.AddArg(v2)
15588 v1.AddArg(x)
15589 v0.AddArg(v1)
15590 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15591 v3.AuxInt = int64(32 - udivisible(32, c).k)
15592 v0.AddArg(v3)
15593 v.AddArg(v0)
15594 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15595 v4.AuxInt = int64(int32(udivisible(32, c).max))
15596 v.AddArg(v4)
15597 return true
15598 }
15599
15600
15601
15602 for {
15603 x := v.Args[1]
15604 v_0 := v.Args[0]
15605 if v_0.Op != OpMul32 {
15606 break
15607 }
15608 _ = v_0.Args[1]
15609 v_0_0 := v_0.Args[0]
15610 if v_0_0.Op != OpTrunc64to32 {
15611 break
15612 }
15613 v_0_0_0 := v_0_0.Args[0]
15614 if v_0_0_0.Op != OpRsh64Ux64 {
15615 break
15616 }
15617 _ = v_0_0_0.Args[1]
15618 mul := v_0_0_0.Args[0]
15619 if mul.Op != OpMul64 {
15620 break
15621 }
15622 _ = mul.Args[1]
15623 mul_0 := mul.Args[0]
15624 if mul_0.Op != OpRsh64Ux64 {
15625 break
15626 }
15627 _ = mul_0.Args[1]
15628 mul_0_0 := mul_0.Args[0]
15629 if mul_0_0.Op != OpZeroExt32to64 {
15630 break
15631 }
15632 if x != mul_0_0.Args[0] {
15633 break
15634 }
15635 mul_0_1 := mul_0.Args[1]
15636 if mul_0_1.Op != OpConst64 {
15637 break
15638 }
15639 if mul_0_1.AuxInt != 1 {
15640 break
15641 }
15642 mul_1 := mul.Args[1]
15643 if mul_1.Op != OpConst64 {
15644 break
15645 }
15646 m := mul_1.AuxInt
15647 v_0_0_0_1 := v_0_0_0.Args[1]
15648 if v_0_0_0_1.Op != OpConst64 {
15649 break
15650 }
15651 s := v_0_0_0_1.AuxInt
15652 v_0_1 := v_0.Args[1]
15653 if v_0_1.Op != OpConst32 {
15654 break
15655 }
15656 c := v_0_1.AuxInt
15657 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15658 break
15659 }
15660 v.reset(OpLeq32U)
15661 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15662 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15663 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15664 v2.AuxInt = int64(int32(udivisible(32, c).m))
15665 v1.AddArg(v2)
15666 v1.AddArg(x)
15667 v0.AddArg(v1)
15668 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15669 v3.AuxInt = int64(32 - udivisible(32, c).k)
15670 v0.AddArg(v3)
15671 v.AddArg(v0)
15672 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15673 v4.AuxInt = int64(int32(udivisible(32, c).max))
15674 v.AddArg(v4)
15675 return true
15676 }
15677
15678
15679
15680 for {
15681 _ = v.Args[1]
15682 x := v.Args[0]
15683 v_1 := v.Args[1]
15684 if v_1.Op != OpMul32 {
15685 break
15686 }
15687 _ = v_1.Args[1]
15688 v_1_0 := v_1.Args[0]
15689 if v_1_0.Op != OpConst32 {
15690 break
15691 }
15692 c := v_1_0.AuxInt
15693 v_1_1 := v_1.Args[1]
15694 if v_1_1.Op != OpTrunc64to32 {
15695 break
15696 }
15697 v_1_1_0 := v_1_1.Args[0]
15698 if v_1_1_0.Op != OpRsh64Ux64 {
15699 break
15700 }
15701 _ = v_1_1_0.Args[1]
15702 v_1_1_0_0 := v_1_1_0.Args[0]
15703 if v_1_1_0_0.Op != OpAvg64u {
15704 break
15705 }
15706 _ = v_1_1_0_0.Args[1]
15707 v_1_1_0_0_0 := v_1_1_0_0.Args[0]
15708 if v_1_1_0_0_0.Op != OpLsh64x64 {
15709 break
15710 }
15711 _ = v_1_1_0_0_0.Args[1]
15712 v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0]
15713 if v_1_1_0_0_0_0.Op != OpZeroExt32to64 {
15714 break
15715 }
15716 if x != v_1_1_0_0_0_0.Args[0] {
15717 break
15718 }
15719 v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1]
15720 if v_1_1_0_0_0_1.Op != OpConst64 {
15721 break
15722 }
15723 if v_1_1_0_0_0_1.AuxInt != 32 {
15724 break
15725 }
15726 mul := v_1_1_0_0.Args[1]
15727 if mul.Op != OpMul64 {
15728 break
15729 }
15730 _ = mul.Args[1]
15731 mul_0 := mul.Args[0]
15732 if mul_0.Op != OpConst64 {
15733 break
15734 }
15735 m := mul_0.AuxInt
15736 mul_1 := mul.Args[1]
15737 if mul_1.Op != OpZeroExt32to64 {
15738 break
15739 }
15740 if x != mul_1.Args[0] {
15741 break
15742 }
15743 v_1_1_0_1 := v_1_1_0.Args[1]
15744 if v_1_1_0_1.Op != OpConst64 {
15745 break
15746 }
15747 s := v_1_1_0_1.AuxInt
15748 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15749 break
15750 }
15751 v.reset(OpLeq32U)
15752 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15753 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15754 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15755 v2.AuxInt = int64(int32(udivisible(32, c).m))
15756 v1.AddArg(v2)
15757 v1.AddArg(x)
15758 v0.AddArg(v1)
15759 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15760 v3.AuxInt = int64(32 - udivisible(32, c).k)
15761 v0.AddArg(v3)
15762 v.AddArg(v0)
15763 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15764 v4.AuxInt = int64(int32(udivisible(32, c).max))
15765 v.AddArg(v4)
15766 return true
15767 }
15768
15769
15770
15771 for {
15772 _ = v.Args[1]
15773 x := v.Args[0]
15774 v_1 := v.Args[1]
15775 if v_1.Op != OpMul32 {
15776 break
15777 }
15778 _ = v_1.Args[1]
15779 v_1_0 := v_1.Args[0]
15780 if v_1_0.Op != OpConst32 {
15781 break
15782 }
15783 c := v_1_0.AuxInt
15784 v_1_1 := v_1.Args[1]
15785 if v_1_1.Op != OpTrunc64to32 {
15786 break
15787 }
15788 v_1_1_0 := v_1_1.Args[0]
15789 if v_1_1_0.Op != OpRsh64Ux64 {
15790 break
15791 }
15792 _ = v_1_1_0.Args[1]
15793 v_1_1_0_0 := v_1_1_0.Args[0]
15794 if v_1_1_0_0.Op != OpAvg64u {
15795 break
15796 }
15797 _ = v_1_1_0_0.Args[1]
15798 v_1_1_0_0_0 := v_1_1_0_0.Args[0]
15799 if v_1_1_0_0_0.Op != OpLsh64x64 {
15800 break
15801 }
15802 _ = v_1_1_0_0_0.Args[1]
15803 v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0]
15804 if v_1_1_0_0_0_0.Op != OpZeroExt32to64 {
15805 break
15806 }
15807 if x != v_1_1_0_0_0_0.Args[0] {
15808 break
15809 }
15810 v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1]
15811 if v_1_1_0_0_0_1.Op != OpConst64 {
15812 break
15813 }
15814 if v_1_1_0_0_0_1.AuxInt != 32 {
15815 break
15816 }
15817 mul := v_1_1_0_0.Args[1]
15818 if mul.Op != OpMul64 {
15819 break
15820 }
15821 _ = mul.Args[1]
15822 mul_0 := mul.Args[0]
15823 if mul_0.Op != OpZeroExt32to64 {
15824 break
15825 }
15826 if x != mul_0.Args[0] {
15827 break
15828 }
15829 mul_1 := mul.Args[1]
15830 if mul_1.Op != OpConst64 {
15831 break
15832 }
15833 m := mul_1.AuxInt
15834 v_1_1_0_1 := v_1_1_0.Args[1]
15835 if v_1_1_0_1.Op != OpConst64 {
15836 break
15837 }
15838 s := v_1_1_0_1.AuxInt
15839 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15840 break
15841 }
15842 v.reset(OpLeq32U)
15843 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15844 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15845 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15846 v2.AuxInt = int64(int32(udivisible(32, c).m))
15847 v1.AddArg(v2)
15848 v1.AddArg(x)
15849 v0.AddArg(v1)
15850 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15851 v3.AuxInt = int64(32 - udivisible(32, c).k)
15852 v0.AddArg(v3)
15853 v.AddArg(v0)
15854 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15855 v4.AuxInt = int64(int32(udivisible(32, c).max))
15856 v.AddArg(v4)
15857 return true
15858 }
15859
15860
15861
15862 for {
15863 _ = v.Args[1]
15864 x := v.Args[0]
15865 v_1 := v.Args[1]
15866 if v_1.Op != OpMul32 {
15867 break
15868 }
15869 _ = v_1.Args[1]
15870 v_1_0 := v_1.Args[0]
15871 if v_1_0.Op != OpTrunc64to32 {
15872 break
15873 }
15874 v_1_0_0 := v_1_0.Args[0]
15875 if v_1_0_0.Op != OpRsh64Ux64 {
15876 break
15877 }
15878 _ = v_1_0_0.Args[1]
15879 v_1_0_0_0 := v_1_0_0.Args[0]
15880 if v_1_0_0_0.Op != OpAvg64u {
15881 break
15882 }
15883 _ = v_1_0_0_0.Args[1]
15884 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
15885 if v_1_0_0_0_0.Op != OpLsh64x64 {
15886 break
15887 }
15888 _ = v_1_0_0_0_0.Args[1]
15889 v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0]
15890 if v_1_0_0_0_0_0.Op != OpZeroExt32to64 {
15891 break
15892 }
15893 if x != v_1_0_0_0_0_0.Args[0] {
15894 break
15895 }
15896 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
15897 if v_1_0_0_0_0_1.Op != OpConst64 {
15898 break
15899 }
15900 if v_1_0_0_0_0_1.AuxInt != 32 {
15901 break
15902 }
15903 mul := v_1_0_0_0.Args[1]
15904 if mul.Op != OpMul64 {
15905 break
15906 }
15907 _ = mul.Args[1]
15908 mul_0 := mul.Args[0]
15909 if mul_0.Op != OpConst64 {
15910 break
15911 }
15912 m := mul_0.AuxInt
15913 mul_1 := mul.Args[1]
15914 if mul_1.Op != OpZeroExt32to64 {
15915 break
15916 }
15917 if x != mul_1.Args[0] {
15918 break
15919 }
15920 v_1_0_0_1 := v_1_0_0.Args[1]
15921 if v_1_0_0_1.Op != OpConst64 {
15922 break
15923 }
15924 s := v_1_0_0_1.AuxInt
15925 v_1_1 := v_1.Args[1]
15926 if v_1_1.Op != OpConst32 {
15927 break
15928 }
15929 c := v_1_1.AuxInt
15930 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
15931 break
15932 }
15933 v.reset(OpLeq32U)
15934 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
15935 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
15936 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15937 v2.AuxInt = int64(int32(udivisible(32, c).m))
15938 v1.AddArg(v2)
15939 v1.AddArg(x)
15940 v0.AddArg(v1)
15941 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15942 v3.AuxInt = int64(32 - udivisible(32, c).k)
15943 v0.AddArg(v3)
15944 v.AddArg(v0)
15945 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
15946 v4.AuxInt = int64(int32(udivisible(32, c).max))
15947 v.AddArg(v4)
15948 return true
15949 }
15950 return false
15951 }
15952 func rewriteValuegeneric_OpEq32_50(v *Value) bool {
15953 b := v.Block
15954 typ := &b.Func.Config.Types
15955
15956
15957
15958 for {
15959 _ = v.Args[1]
15960 x := v.Args[0]
15961 v_1 := v.Args[1]
15962 if v_1.Op != OpMul32 {
15963 break
15964 }
15965 _ = v_1.Args[1]
15966 v_1_0 := v_1.Args[0]
15967 if v_1_0.Op != OpTrunc64to32 {
15968 break
15969 }
15970 v_1_0_0 := v_1_0.Args[0]
15971 if v_1_0_0.Op != OpRsh64Ux64 {
15972 break
15973 }
15974 _ = v_1_0_0.Args[1]
15975 v_1_0_0_0 := v_1_0_0.Args[0]
15976 if v_1_0_0_0.Op != OpAvg64u {
15977 break
15978 }
15979 _ = v_1_0_0_0.Args[1]
15980 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
15981 if v_1_0_0_0_0.Op != OpLsh64x64 {
15982 break
15983 }
15984 _ = v_1_0_0_0_0.Args[1]
15985 v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0]
15986 if v_1_0_0_0_0_0.Op != OpZeroExt32to64 {
15987 break
15988 }
15989 if x != v_1_0_0_0_0_0.Args[0] {
15990 break
15991 }
15992 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
15993 if v_1_0_0_0_0_1.Op != OpConst64 {
15994 break
15995 }
15996 if v_1_0_0_0_0_1.AuxInt != 32 {
15997 break
15998 }
15999 mul := v_1_0_0_0.Args[1]
16000 if mul.Op != OpMul64 {
16001 break
16002 }
16003 _ = mul.Args[1]
16004 mul_0 := mul.Args[0]
16005 if mul_0.Op != OpZeroExt32to64 {
16006 break
16007 }
16008 if x != mul_0.Args[0] {
16009 break
16010 }
16011 mul_1 := mul.Args[1]
16012 if mul_1.Op != OpConst64 {
16013 break
16014 }
16015 m := mul_1.AuxInt
16016 v_1_0_0_1 := v_1_0_0.Args[1]
16017 if v_1_0_0_1.Op != OpConst64 {
16018 break
16019 }
16020 s := v_1_0_0_1.AuxInt
16021 v_1_1 := v_1.Args[1]
16022 if v_1_1.Op != OpConst32 {
16023 break
16024 }
16025 c := v_1_1.AuxInt
16026 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
16027 break
16028 }
16029 v.reset(OpLeq32U)
16030 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16031 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16032 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16033 v2.AuxInt = int64(int32(udivisible(32, c).m))
16034 v1.AddArg(v2)
16035 v1.AddArg(x)
16036 v0.AddArg(v1)
16037 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16038 v3.AuxInt = int64(32 - udivisible(32, c).k)
16039 v0.AddArg(v3)
16040 v.AddArg(v0)
16041 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16042 v4.AuxInt = int64(int32(udivisible(32, c).max))
16043 v.AddArg(v4)
16044 return true
16045 }
16046
16047
16048
16049 for {
16050 x := v.Args[1]
16051 v_0 := v.Args[0]
16052 if v_0.Op != OpMul32 {
16053 break
16054 }
16055 _ = v_0.Args[1]
16056 v_0_0 := v_0.Args[0]
16057 if v_0_0.Op != OpConst32 {
16058 break
16059 }
16060 c := v_0_0.AuxInt
16061 v_0_1 := v_0.Args[1]
16062 if v_0_1.Op != OpTrunc64to32 {
16063 break
16064 }
16065 v_0_1_0 := v_0_1.Args[0]
16066 if v_0_1_0.Op != OpRsh64Ux64 {
16067 break
16068 }
16069 _ = v_0_1_0.Args[1]
16070 v_0_1_0_0 := v_0_1_0.Args[0]
16071 if v_0_1_0_0.Op != OpAvg64u {
16072 break
16073 }
16074 _ = v_0_1_0_0.Args[1]
16075 v_0_1_0_0_0 := v_0_1_0_0.Args[0]
16076 if v_0_1_0_0_0.Op != OpLsh64x64 {
16077 break
16078 }
16079 _ = v_0_1_0_0_0.Args[1]
16080 v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0]
16081 if v_0_1_0_0_0_0.Op != OpZeroExt32to64 {
16082 break
16083 }
16084 if x != v_0_1_0_0_0_0.Args[0] {
16085 break
16086 }
16087 v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1]
16088 if v_0_1_0_0_0_1.Op != OpConst64 {
16089 break
16090 }
16091 if v_0_1_0_0_0_1.AuxInt != 32 {
16092 break
16093 }
16094 mul := v_0_1_0_0.Args[1]
16095 if mul.Op != OpMul64 {
16096 break
16097 }
16098 _ = mul.Args[1]
16099 mul_0 := mul.Args[0]
16100 if mul_0.Op != OpConst64 {
16101 break
16102 }
16103 m := mul_0.AuxInt
16104 mul_1 := mul.Args[1]
16105 if mul_1.Op != OpZeroExt32to64 {
16106 break
16107 }
16108 if x != mul_1.Args[0] {
16109 break
16110 }
16111 v_0_1_0_1 := v_0_1_0.Args[1]
16112 if v_0_1_0_1.Op != OpConst64 {
16113 break
16114 }
16115 s := v_0_1_0_1.AuxInt
16116 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
16117 break
16118 }
16119 v.reset(OpLeq32U)
16120 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16121 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16122 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16123 v2.AuxInt = int64(int32(udivisible(32, c).m))
16124 v1.AddArg(v2)
16125 v1.AddArg(x)
16126 v0.AddArg(v1)
16127 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16128 v3.AuxInt = int64(32 - udivisible(32, c).k)
16129 v0.AddArg(v3)
16130 v.AddArg(v0)
16131 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16132 v4.AuxInt = int64(int32(udivisible(32, c).max))
16133 v.AddArg(v4)
16134 return true
16135 }
16136
16137
16138
16139 for {
16140 x := v.Args[1]
16141 v_0 := v.Args[0]
16142 if v_0.Op != OpMul32 {
16143 break
16144 }
16145 _ = v_0.Args[1]
16146 v_0_0 := v_0.Args[0]
16147 if v_0_0.Op != OpConst32 {
16148 break
16149 }
16150 c := v_0_0.AuxInt
16151 v_0_1 := v_0.Args[1]
16152 if v_0_1.Op != OpTrunc64to32 {
16153 break
16154 }
16155 v_0_1_0 := v_0_1.Args[0]
16156 if v_0_1_0.Op != OpRsh64Ux64 {
16157 break
16158 }
16159 _ = v_0_1_0.Args[1]
16160 v_0_1_0_0 := v_0_1_0.Args[0]
16161 if v_0_1_0_0.Op != OpAvg64u {
16162 break
16163 }
16164 _ = v_0_1_0_0.Args[1]
16165 v_0_1_0_0_0 := v_0_1_0_0.Args[0]
16166 if v_0_1_0_0_0.Op != OpLsh64x64 {
16167 break
16168 }
16169 _ = v_0_1_0_0_0.Args[1]
16170 v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0]
16171 if v_0_1_0_0_0_0.Op != OpZeroExt32to64 {
16172 break
16173 }
16174 if x != v_0_1_0_0_0_0.Args[0] {
16175 break
16176 }
16177 v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1]
16178 if v_0_1_0_0_0_1.Op != OpConst64 {
16179 break
16180 }
16181 if v_0_1_0_0_0_1.AuxInt != 32 {
16182 break
16183 }
16184 mul := v_0_1_0_0.Args[1]
16185 if mul.Op != OpMul64 {
16186 break
16187 }
16188 _ = mul.Args[1]
16189 mul_0 := mul.Args[0]
16190 if mul_0.Op != OpZeroExt32to64 {
16191 break
16192 }
16193 if x != mul_0.Args[0] {
16194 break
16195 }
16196 mul_1 := mul.Args[1]
16197 if mul_1.Op != OpConst64 {
16198 break
16199 }
16200 m := mul_1.AuxInt
16201 v_0_1_0_1 := v_0_1_0.Args[1]
16202 if v_0_1_0_1.Op != OpConst64 {
16203 break
16204 }
16205 s := v_0_1_0_1.AuxInt
16206 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
16207 break
16208 }
16209 v.reset(OpLeq32U)
16210 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16211 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16212 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16213 v2.AuxInt = int64(int32(udivisible(32, c).m))
16214 v1.AddArg(v2)
16215 v1.AddArg(x)
16216 v0.AddArg(v1)
16217 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16218 v3.AuxInt = int64(32 - udivisible(32, c).k)
16219 v0.AddArg(v3)
16220 v.AddArg(v0)
16221 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16222 v4.AuxInt = int64(int32(udivisible(32, c).max))
16223 v.AddArg(v4)
16224 return true
16225 }
16226
16227
16228
16229 for {
16230 x := v.Args[1]
16231 v_0 := v.Args[0]
16232 if v_0.Op != OpMul32 {
16233 break
16234 }
16235 _ = v_0.Args[1]
16236 v_0_0 := v_0.Args[0]
16237 if v_0_0.Op != OpTrunc64to32 {
16238 break
16239 }
16240 v_0_0_0 := v_0_0.Args[0]
16241 if v_0_0_0.Op != OpRsh64Ux64 {
16242 break
16243 }
16244 _ = v_0_0_0.Args[1]
16245 v_0_0_0_0 := v_0_0_0.Args[0]
16246 if v_0_0_0_0.Op != OpAvg64u {
16247 break
16248 }
16249 _ = v_0_0_0_0.Args[1]
16250 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
16251 if v_0_0_0_0_0.Op != OpLsh64x64 {
16252 break
16253 }
16254 _ = v_0_0_0_0_0.Args[1]
16255 v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0]
16256 if v_0_0_0_0_0_0.Op != OpZeroExt32to64 {
16257 break
16258 }
16259 if x != v_0_0_0_0_0_0.Args[0] {
16260 break
16261 }
16262 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
16263 if v_0_0_0_0_0_1.Op != OpConst64 {
16264 break
16265 }
16266 if v_0_0_0_0_0_1.AuxInt != 32 {
16267 break
16268 }
16269 mul := v_0_0_0_0.Args[1]
16270 if mul.Op != OpMul64 {
16271 break
16272 }
16273 _ = mul.Args[1]
16274 mul_0 := mul.Args[0]
16275 if mul_0.Op != OpConst64 {
16276 break
16277 }
16278 m := mul_0.AuxInt
16279 mul_1 := mul.Args[1]
16280 if mul_1.Op != OpZeroExt32to64 {
16281 break
16282 }
16283 if x != mul_1.Args[0] {
16284 break
16285 }
16286 v_0_0_0_1 := v_0_0_0.Args[1]
16287 if v_0_0_0_1.Op != OpConst64 {
16288 break
16289 }
16290 s := v_0_0_0_1.AuxInt
16291 v_0_1 := v_0.Args[1]
16292 if v_0_1.Op != OpConst32 {
16293 break
16294 }
16295 c := v_0_1.AuxInt
16296 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
16297 break
16298 }
16299 v.reset(OpLeq32U)
16300 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16301 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16302 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16303 v2.AuxInt = int64(int32(udivisible(32, c).m))
16304 v1.AddArg(v2)
16305 v1.AddArg(x)
16306 v0.AddArg(v1)
16307 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16308 v3.AuxInt = int64(32 - udivisible(32, c).k)
16309 v0.AddArg(v3)
16310 v.AddArg(v0)
16311 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16312 v4.AuxInt = int64(int32(udivisible(32, c).max))
16313 v.AddArg(v4)
16314 return true
16315 }
16316
16317
16318
16319 for {
16320 x := v.Args[1]
16321 v_0 := v.Args[0]
16322 if v_0.Op != OpMul32 {
16323 break
16324 }
16325 _ = v_0.Args[1]
16326 v_0_0 := v_0.Args[0]
16327 if v_0_0.Op != OpTrunc64to32 {
16328 break
16329 }
16330 v_0_0_0 := v_0_0.Args[0]
16331 if v_0_0_0.Op != OpRsh64Ux64 {
16332 break
16333 }
16334 _ = v_0_0_0.Args[1]
16335 v_0_0_0_0 := v_0_0_0.Args[0]
16336 if v_0_0_0_0.Op != OpAvg64u {
16337 break
16338 }
16339 _ = v_0_0_0_0.Args[1]
16340 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
16341 if v_0_0_0_0_0.Op != OpLsh64x64 {
16342 break
16343 }
16344 _ = v_0_0_0_0_0.Args[1]
16345 v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0]
16346 if v_0_0_0_0_0_0.Op != OpZeroExt32to64 {
16347 break
16348 }
16349 if x != v_0_0_0_0_0_0.Args[0] {
16350 break
16351 }
16352 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
16353 if v_0_0_0_0_0_1.Op != OpConst64 {
16354 break
16355 }
16356 if v_0_0_0_0_0_1.AuxInt != 32 {
16357 break
16358 }
16359 mul := v_0_0_0_0.Args[1]
16360 if mul.Op != OpMul64 {
16361 break
16362 }
16363 _ = mul.Args[1]
16364 mul_0 := mul.Args[0]
16365 if mul_0.Op != OpZeroExt32to64 {
16366 break
16367 }
16368 if x != mul_0.Args[0] {
16369 break
16370 }
16371 mul_1 := mul.Args[1]
16372 if mul_1.Op != OpConst64 {
16373 break
16374 }
16375 m := mul_1.AuxInt
16376 v_0_0_0_1 := v_0_0_0.Args[1]
16377 if v_0_0_0_1.Op != OpConst64 {
16378 break
16379 }
16380 s := v_0_0_0_1.AuxInt
16381 v_0_1 := v_0.Args[1]
16382 if v_0_1.Op != OpConst32 {
16383 break
16384 }
16385 c := v_0_1.AuxInt
16386 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) {
16387 break
16388 }
16389 v.reset(OpLeq32U)
16390 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16391 v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16392 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16393 v2.AuxInt = int64(int32(udivisible(32, c).m))
16394 v1.AddArg(v2)
16395 v1.AddArg(x)
16396 v0.AddArg(v1)
16397 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16398 v3.AuxInt = int64(32 - udivisible(32, c).k)
16399 v0.AddArg(v3)
16400 v.AddArg(v0)
16401 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16402 v4.AuxInt = int64(int32(udivisible(32, c).max))
16403 v.AddArg(v4)
16404 return true
16405 }
16406
16407
16408
16409 for {
16410 _ = v.Args[1]
16411 x := v.Args[0]
16412 v_1 := v.Args[1]
16413 if v_1.Op != OpMul32 {
16414 break
16415 }
16416 _ = v_1.Args[1]
16417 v_1_0 := v_1.Args[0]
16418 if v_1_0.Op != OpConst32 {
16419 break
16420 }
16421 c := v_1_0.AuxInt
16422 v_1_1 := v_1.Args[1]
16423 if v_1_1.Op != OpSub32 {
16424 break
16425 }
16426 _ = v_1_1.Args[1]
16427 v_1_1_0 := v_1_1.Args[0]
16428 if v_1_1_0.Op != OpRsh64x64 {
16429 break
16430 }
16431 _ = v_1_1_0.Args[1]
16432 mul := v_1_1_0.Args[0]
16433 if mul.Op != OpMul64 {
16434 break
16435 }
16436 _ = mul.Args[1]
16437 mul_0 := mul.Args[0]
16438 if mul_0.Op != OpConst64 {
16439 break
16440 }
16441 m := mul_0.AuxInt
16442 mul_1 := mul.Args[1]
16443 if mul_1.Op != OpSignExt32to64 {
16444 break
16445 }
16446 if x != mul_1.Args[0] {
16447 break
16448 }
16449 v_1_1_0_1 := v_1_1_0.Args[1]
16450 if v_1_1_0_1.Op != OpConst64 {
16451 break
16452 }
16453 s := v_1_1_0_1.AuxInt
16454 v_1_1_1 := v_1_1.Args[1]
16455 if v_1_1_1.Op != OpRsh64x64 {
16456 break
16457 }
16458 _ = v_1_1_1.Args[1]
16459 v_1_1_1_0 := v_1_1_1.Args[0]
16460 if v_1_1_1_0.Op != OpSignExt32to64 {
16461 break
16462 }
16463 if x != v_1_1_1_0.Args[0] {
16464 break
16465 }
16466 v_1_1_1_1 := v_1_1_1.Args[1]
16467 if v_1_1_1_1.Op != OpConst64 {
16468 break
16469 }
16470 if v_1_1_1_1.AuxInt != 63 {
16471 break
16472 }
16473 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16474 break
16475 }
16476 v.reset(OpLeq32U)
16477 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16478 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16479 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16480 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16481 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16482 v2.AddArg(v3)
16483 v2.AddArg(x)
16484 v1.AddArg(v2)
16485 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16486 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16487 v1.AddArg(v4)
16488 v0.AddArg(v1)
16489 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16490 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16491 v0.AddArg(v5)
16492 v.AddArg(v0)
16493 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16494 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16495 v.AddArg(v6)
16496 return true
16497 }
16498
16499
16500
16501 for {
16502 _ = v.Args[1]
16503 x := v.Args[0]
16504 v_1 := v.Args[1]
16505 if v_1.Op != OpMul32 {
16506 break
16507 }
16508 _ = v_1.Args[1]
16509 v_1_0 := v_1.Args[0]
16510 if v_1_0.Op != OpConst32 {
16511 break
16512 }
16513 c := v_1_0.AuxInt
16514 v_1_1 := v_1.Args[1]
16515 if v_1_1.Op != OpSub32 {
16516 break
16517 }
16518 _ = v_1_1.Args[1]
16519 v_1_1_0 := v_1_1.Args[0]
16520 if v_1_1_0.Op != OpRsh64x64 {
16521 break
16522 }
16523 _ = v_1_1_0.Args[1]
16524 mul := v_1_1_0.Args[0]
16525 if mul.Op != OpMul64 {
16526 break
16527 }
16528 _ = mul.Args[1]
16529 mul_0 := mul.Args[0]
16530 if mul_0.Op != OpSignExt32to64 {
16531 break
16532 }
16533 if x != mul_0.Args[0] {
16534 break
16535 }
16536 mul_1 := mul.Args[1]
16537 if mul_1.Op != OpConst64 {
16538 break
16539 }
16540 m := mul_1.AuxInt
16541 v_1_1_0_1 := v_1_1_0.Args[1]
16542 if v_1_1_0_1.Op != OpConst64 {
16543 break
16544 }
16545 s := v_1_1_0_1.AuxInt
16546 v_1_1_1 := v_1_1.Args[1]
16547 if v_1_1_1.Op != OpRsh64x64 {
16548 break
16549 }
16550 _ = v_1_1_1.Args[1]
16551 v_1_1_1_0 := v_1_1_1.Args[0]
16552 if v_1_1_1_0.Op != OpSignExt32to64 {
16553 break
16554 }
16555 if x != v_1_1_1_0.Args[0] {
16556 break
16557 }
16558 v_1_1_1_1 := v_1_1_1.Args[1]
16559 if v_1_1_1_1.Op != OpConst64 {
16560 break
16561 }
16562 if v_1_1_1_1.AuxInt != 63 {
16563 break
16564 }
16565 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16566 break
16567 }
16568 v.reset(OpLeq32U)
16569 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16570 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16571 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16572 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16573 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16574 v2.AddArg(v3)
16575 v2.AddArg(x)
16576 v1.AddArg(v2)
16577 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16578 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16579 v1.AddArg(v4)
16580 v0.AddArg(v1)
16581 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16582 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16583 v0.AddArg(v5)
16584 v.AddArg(v0)
16585 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16586 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16587 v.AddArg(v6)
16588 return true
16589 }
16590
16591
16592
16593 for {
16594 _ = v.Args[1]
16595 x := v.Args[0]
16596 v_1 := v.Args[1]
16597 if v_1.Op != OpMul32 {
16598 break
16599 }
16600 _ = v_1.Args[1]
16601 v_1_0 := v_1.Args[0]
16602 if v_1_0.Op != OpSub32 {
16603 break
16604 }
16605 _ = v_1_0.Args[1]
16606 v_1_0_0 := v_1_0.Args[0]
16607 if v_1_0_0.Op != OpRsh64x64 {
16608 break
16609 }
16610 _ = v_1_0_0.Args[1]
16611 mul := v_1_0_0.Args[0]
16612 if mul.Op != OpMul64 {
16613 break
16614 }
16615 _ = mul.Args[1]
16616 mul_0 := mul.Args[0]
16617 if mul_0.Op != OpConst64 {
16618 break
16619 }
16620 m := mul_0.AuxInt
16621 mul_1 := mul.Args[1]
16622 if mul_1.Op != OpSignExt32to64 {
16623 break
16624 }
16625 if x != mul_1.Args[0] {
16626 break
16627 }
16628 v_1_0_0_1 := v_1_0_0.Args[1]
16629 if v_1_0_0_1.Op != OpConst64 {
16630 break
16631 }
16632 s := v_1_0_0_1.AuxInt
16633 v_1_0_1 := v_1_0.Args[1]
16634 if v_1_0_1.Op != OpRsh64x64 {
16635 break
16636 }
16637 _ = v_1_0_1.Args[1]
16638 v_1_0_1_0 := v_1_0_1.Args[0]
16639 if v_1_0_1_0.Op != OpSignExt32to64 {
16640 break
16641 }
16642 if x != v_1_0_1_0.Args[0] {
16643 break
16644 }
16645 v_1_0_1_1 := v_1_0_1.Args[1]
16646 if v_1_0_1_1.Op != OpConst64 {
16647 break
16648 }
16649 if v_1_0_1_1.AuxInt != 63 {
16650 break
16651 }
16652 v_1_1 := v_1.Args[1]
16653 if v_1_1.Op != OpConst32 {
16654 break
16655 }
16656 c := v_1_1.AuxInt
16657 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16658 break
16659 }
16660 v.reset(OpLeq32U)
16661 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16662 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16663 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16664 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16665 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16666 v2.AddArg(v3)
16667 v2.AddArg(x)
16668 v1.AddArg(v2)
16669 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16670 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16671 v1.AddArg(v4)
16672 v0.AddArg(v1)
16673 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16674 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16675 v0.AddArg(v5)
16676 v.AddArg(v0)
16677 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16678 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16679 v.AddArg(v6)
16680 return true
16681 }
16682
16683
16684
16685 for {
16686 _ = v.Args[1]
16687 x := v.Args[0]
16688 v_1 := v.Args[1]
16689 if v_1.Op != OpMul32 {
16690 break
16691 }
16692 _ = v_1.Args[1]
16693 v_1_0 := v_1.Args[0]
16694 if v_1_0.Op != OpSub32 {
16695 break
16696 }
16697 _ = v_1_0.Args[1]
16698 v_1_0_0 := v_1_0.Args[0]
16699 if v_1_0_0.Op != OpRsh64x64 {
16700 break
16701 }
16702 _ = v_1_0_0.Args[1]
16703 mul := v_1_0_0.Args[0]
16704 if mul.Op != OpMul64 {
16705 break
16706 }
16707 _ = mul.Args[1]
16708 mul_0 := mul.Args[0]
16709 if mul_0.Op != OpSignExt32to64 {
16710 break
16711 }
16712 if x != mul_0.Args[0] {
16713 break
16714 }
16715 mul_1 := mul.Args[1]
16716 if mul_1.Op != OpConst64 {
16717 break
16718 }
16719 m := mul_1.AuxInt
16720 v_1_0_0_1 := v_1_0_0.Args[1]
16721 if v_1_0_0_1.Op != OpConst64 {
16722 break
16723 }
16724 s := v_1_0_0_1.AuxInt
16725 v_1_0_1 := v_1_0.Args[1]
16726 if v_1_0_1.Op != OpRsh64x64 {
16727 break
16728 }
16729 _ = v_1_0_1.Args[1]
16730 v_1_0_1_0 := v_1_0_1.Args[0]
16731 if v_1_0_1_0.Op != OpSignExt32to64 {
16732 break
16733 }
16734 if x != v_1_0_1_0.Args[0] {
16735 break
16736 }
16737 v_1_0_1_1 := v_1_0_1.Args[1]
16738 if v_1_0_1_1.Op != OpConst64 {
16739 break
16740 }
16741 if v_1_0_1_1.AuxInt != 63 {
16742 break
16743 }
16744 v_1_1 := v_1.Args[1]
16745 if v_1_1.Op != OpConst32 {
16746 break
16747 }
16748 c := v_1_1.AuxInt
16749 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16750 break
16751 }
16752 v.reset(OpLeq32U)
16753 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16754 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16755 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16756 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16757 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16758 v2.AddArg(v3)
16759 v2.AddArg(x)
16760 v1.AddArg(v2)
16761 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16762 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16763 v1.AddArg(v4)
16764 v0.AddArg(v1)
16765 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16766 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16767 v0.AddArg(v5)
16768 v.AddArg(v0)
16769 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16770 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16771 v.AddArg(v6)
16772 return true
16773 }
16774
16775
16776
16777 for {
16778 x := v.Args[1]
16779 v_0 := v.Args[0]
16780 if v_0.Op != OpMul32 {
16781 break
16782 }
16783 _ = v_0.Args[1]
16784 v_0_0 := v_0.Args[0]
16785 if v_0_0.Op != OpConst32 {
16786 break
16787 }
16788 c := v_0_0.AuxInt
16789 v_0_1 := v_0.Args[1]
16790 if v_0_1.Op != OpSub32 {
16791 break
16792 }
16793 _ = v_0_1.Args[1]
16794 v_0_1_0 := v_0_1.Args[0]
16795 if v_0_1_0.Op != OpRsh64x64 {
16796 break
16797 }
16798 _ = v_0_1_0.Args[1]
16799 mul := v_0_1_0.Args[0]
16800 if mul.Op != OpMul64 {
16801 break
16802 }
16803 _ = mul.Args[1]
16804 mul_0 := mul.Args[0]
16805 if mul_0.Op != OpConst64 {
16806 break
16807 }
16808 m := mul_0.AuxInt
16809 mul_1 := mul.Args[1]
16810 if mul_1.Op != OpSignExt32to64 {
16811 break
16812 }
16813 if x != mul_1.Args[0] {
16814 break
16815 }
16816 v_0_1_0_1 := v_0_1_0.Args[1]
16817 if v_0_1_0_1.Op != OpConst64 {
16818 break
16819 }
16820 s := v_0_1_0_1.AuxInt
16821 v_0_1_1 := v_0_1.Args[1]
16822 if v_0_1_1.Op != OpRsh64x64 {
16823 break
16824 }
16825 _ = v_0_1_1.Args[1]
16826 v_0_1_1_0 := v_0_1_1.Args[0]
16827 if v_0_1_1_0.Op != OpSignExt32to64 {
16828 break
16829 }
16830 if x != v_0_1_1_0.Args[0] {
16831 break
16832 }
16833 v_0_1_1_1 := v_0_1_1.Args[1]
16834 if v_0_1_1_1.Op != OpConst64 {
16835 break
16836 }
16837 if v_0_1_1_1.AuxInt != 63 {
16838 break
16839 }
16840 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16841 break
16842 }
16843 v.reset(OpLeq32U)
16844 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16845 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16846 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16847 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16848 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16849 v2.AddArg(v3)
16850 v2.AddArg(x)
16851 v1.AddArg(v2)
16852 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16853 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16854 v1.AddArg(v4)
16855 v0.AddArg(v1)
16856 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16857 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16858 v0.AddArg(v5)
16859 v.AddArg(v0)
16860 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16861 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16862 v.AddArg(v6)
16863 return true
16864 }
16865 return false
16866 }
16867 func rewriteValuegeneric_OpEq32_60(v *Value) bool {
16868 b := v.Block
16869 typ := &b.Func.Config.Types
16870
16871
16872
16873 for {
16874 x := v.Args[1]
16875 v_0 := v.Args[0]
16876 if v_0.Op != OpMul32 {
16877 break
16878 }
16879 _ = v_0.Args[1]
16880 v_0_0 := v_0.Args[0]
16881 if v_0_0.Op != OpConst32 {
16882 break
16883 }
16884 c := v_0_0.AuxInt
16885 v_0_1 := v_0.Args[1]
16886 if v_0_1.Op != OpSub32 {
16887 break
16888 }
16889 _ = v_0_1.Args[1]
16890 v_0_1_0 := v_0_1.Args[0]
16891 if v_0_1_0.Op != OpRsh64x64 {
16892 break
16893 }
16894 _ = v_0_1_0.Args[1]
16895 mul := v_0_1_0.Args[0]
16896 if mul.Op != OpMul64 {
16897 break
16898 }
16899 _ = mul.Args[1]
16900 mul_0 := mul.Args[0]
16901 if mul_0.Op != OpSignExt32to64 {
16902 break
16903 }
16904 if x != mul_0.Args[0] {
16905 break
16906 }
16907 mul_1 := mul.Args[1]
16908 if mul_1.Op != OpConst64 {
16909 break
16910 }
16911 m := mul_1.AuxInt
16912 v_0_1_0_1 := v_0_1_0.Args[1]
16913 if v_0_1_0_1.Op != OpConst64 {
16914 break
16915 }
16916 s := v_0_1_0_1.AuxInt
16917 v_0_1_1 := v_0_1.Args[1]
16918 if v_0_1_1.Op != OpRsh64x64 {
16919 break
16920 }
16921 _ = v_0_1_1.Args[1]
16922 v_0_1_1_0 := v_0_1_1.Args[0]
16923 if v_0_1_1_0.Op != OpSignExt32to64 {
16924 break
16925 }
16926 if x != v_0_1_1_0.Args[0] {
16927 break
16928 }
16929 v_0_1_1_1 := v_0_1_1.Args[1]
16930 if v_0_1_1_1.Op != OpConst64 {
16931 break
16932 }
16933 if v_0_1_1_1.AuxInt != 63 {
16934 break
16935 }
16936 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
16937 break
16938 }
16939 v.reset(OpLeq32U)
16940 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
16941 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
16942 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
16943 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16944 v3.AuxInt = int64(int32(sdivisible(32, c).m))
16945 v2.AddArg(v3)
16946 v2.AddArg(x)
16947 v1.AddArg(v2)
16948 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16949 v4.AuxInt = int64(int32(sdivisible(32, c).a))
16950 v1.AddArg(v4)
16951 v0.AddArg(v1)
16952 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16953 v5.AuxInt = int64(32 - sdivisible(32, c).k)
16954 v0.AddArg(v5)
16955 v.AddArg(v0)
16956 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
16957 v6.AuxInt = int64(int32(sdivisible(32, c).max))
16958 v.AddArg(v6)
16959 return true
16960 }
16961
16962
16963
16964 for {
16965 x := v.Args[1]
16966 v_0 := v.Args[0]
16967 if v_0.Op != OpMul32 {
16968 break
16969 }
16970 _ = v_0.Args[1]
16971 v_0_0 := v_0.Args[0]
16972 if v_0_0.Op != OpSub32 {
16973 break
16974 }
16975 _ = v_0_0.Args[1]
16976 v_0_0_0 := v_0_0.Args[0]
16977 if v_0_0_0.Op != OpRsh64x64 {
16978 break
16979 }
16980 _ = v_0_0_0.Args[1]
16981 mul := v_0_0_0.Args[0]
16982 if mul.Op != OpMul64 {
16983 break
16984 }
16985 _ = mul.Args[1]
16986 mul_0 := mul.Args[0]
16987 if mul_0.Op != OpConst64 {
16988 break
16989 }
16990 m := mul_0.AuxInt
16991 mul_1 := mul.Args[1]
16992 if mul_1.Op != OpSignExt32to64 {
16993 break
16994 }
16995 if x != mul_1.Args[0] {
16996 break
16997 }
16998 v_0_0_0_1 := v_0_0_0.Args[1]
16999 if v_0_0_0_1.Op != OpConst64 {
17000 break
17001 }
17002 s := v_0_0_0_1.AuxInt
17003 v_0_0_1 := v_0_0.Args[1]
17004 if v_0_0_1.Op != OpRsh64x64 {
17005 break
17006 }
17007 _ = v_0_0_1.Args[1]
17008 v_0_0_1_0 := v_0_0_1.Args[0]
17009 if v_0_0_1_0.Op != OpSignExt32to64 {
17010 break
17011 }
17012 if x != v_0_0_1_0.Args[0] {
17013 break
17014 }
17015 v_0_0_1_1 := v_0_0_1.Args[1]
17016 if v_0_0_1_1.Op != OpConst64 {
17017 break
17018 }
17019 if v_0_0_1_1.AuxInt != 63 {
17020 break
17021 }
17022 v_0_1 := v_0.Args[1]
17023 if v_0_1.Op != OpConst32 {
17024 break
17025 }
17026 c := v_0_1.AuxInt
17027 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17028 break
17029 }
17030 v.reset(OpLeq32U)
17031 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17032 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17033 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17034 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17035 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17036 v2.AddArg(v3)
17037 v2.AddArg(x)
17038 v1.AddArg(v2)
17039 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17040 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17041 v1.AddArg(v4)
17042 v0.AddArg(v1)
17043 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17044 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17045 v0.AddArg(v5)
17046 v.AddArg(v0)
17047 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17048 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17049 v.AddArg(v6)
17050 return true
17051 }
17052
17053
17054
17055 for {
17056 x := v.Args[1]
17057 v_0 := v.Args[0]
17058 if v_0.Op != OpMul32 {
17059 break
17060 }
17061 _ = v_0.Args[1]
17062 v_0_0 := v_0.Args[0]
17063 if v_0_0.Op != OpSub32 {
17064 break
17065 }
17066 _ = v_0_0.Args[1]
17067 v_0_0_0 := v_0_0.Args[0]
17068 if v_0_0_0.Op != OpRsh64x64 {
17069 break
17070 }
17071 _ = v_0_0_0.Args[1]
17072 mul := v_0_0_0.Args[0]
17073 if mul.Op != OpMul64 {
17074 break
17075 }
17076 _ = mul.Args[1]
17077 mul_0 := mul.Args[0]
17078 if mul_0.Op != OpSignExt32to64 {
17079 break
17080 }
17081 if x != mul_0.Args[0] {
17082 break
17083 }
17084 mul_1 := mul.Args[1]
17085 if mul_1.Op != OpConst64 {
17086 break
17087 }
17088 m := mul_1.AuxInt
17089 v_0_0_0_1 := v_0_0_0.Args[1]
17090 if v_0_0_0_1.Op != OpConst64 {
17091 break
17092 }
17093 s := v_0_0_0_1.AuxInt
17094 v_0_0_1 := v_0_0.Args[1]
17095 if v_0_0_1.Op != OpRsh64x64 {
17096 break
17097 }
17098 _ = v_0_0_1.Args[1]
17099 v_0_0_1_0 := v_0_0_1.Args[0]
17100 if v_0_0_1_0.Op != OpSignExt32to64 {
17101 break
17102 }
17103 if x != v_0_0_1_0.Args[0] {
17104 break
17105 }
17106 v_0_0_1_1 := v_0_0_1.Args[1]
17107 if v_0_0_1_1.Op != OpConst64 {
17108 break
17109 }
17110 if v_0_0_1_1.AuxInt != 63 {
17111 break
17112 }
17113 v_0_1 := v_0.Args[1]
17114 if v_0_1.Op != OpConst32 {
17115 break
17116 }
17117 c := v_0_1.AuxInt
17118 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17119 break
17120 }
17121 v.reset(OpLeq32U)
17122 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17123 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17124 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17125 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17126 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17127 v2.AddArg(v3)
17128 v2.AddArg(x)
17129 v1.AddArg(v2)
17130 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17131 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17132 v1.AddArg(v4)
17133 v0.AddArg(v1)
17134 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17135 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17136 v0.AddArg(v5)
17137 v.AddArg(v0)
17138 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17139 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17140 v.AddArg(v6)
17141 return true
17142 }
17143
17144
17145
17146 for {
17147 _ = v.Args[1]
17148 x := v.Args[0]
17149 v_1 := v.Args[1]
17150 if v_1.Op != OpMul32 {
17151 break
17152 }
17153 _ = v_1.Args[1]
17154 v_1_0 := v_1.Args[0]
17155 if v_1_0.Op != OpConst32 {
17156 break
17157 }
17158 c := v_1_0.AuxInt
17159 v_1_1 := v_1.Args[1]
17160 if v_1_1.Op != OpSub32 {
17161 break
17162 }
17163 _ = v_1_1.Args[1]
17164 v_1_1_0 := v_1_1.Args[0]
17165 if v_1_1_0.Op != OpRsh32x64 {
17166 break
17167 }
17168 _ = v_1_1_0.Args[1]
17169 mul := v_1_1_0.Args[0]
17170 if mul.Op != OpHmul32 {
17171 break
17172 }
17173 _ = mul.Args[1]
17174 mul_0 := mul.Args[0]
17175 if mul_0.Op != OpConst32 {
17176 break
17177 }
17178 m := mul_0.AuxInt
17179 if x != mul.Args[1] {
17180 break
17181 }
17182 v_1_1_0_1 := v_1_1_0.Args[1]
17183 if v_1_1_0_1.Op != OpConst64 {
17184 break
17185 }
17186 s := v_1_1_0_1.AuxInt
17187 v_1_1_1 := v_1_1.Args[1]
17188 if v_1_1_1.Op != OpRsh32x64 {
17189 break
17190 }
17191 _ = v_1_1_1.Args[1]
17192 if x != v_1_1_1.Args[0] {
17193 break
17194 }
17195 v_1_1_1_1 := v_1_1_1.Args[1]
17196 if v_1_1_1_1.Op != OpConst64 {
17197 break
17198 }
17199 if v_1_1_1_1.AuxInt != 31 {
17200 break
17201 }
17202 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17203 break
17204 }
17205 v.reset(OpLeq32U)
17206 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17207 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17208 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17209 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17210 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17211 v2.AddArg(v3)
17212 v2.AddArg(x)
17213 v1.AddArg(v2)
17214 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17215 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17216 v1.AddArg(v4)
17217 v0.AddArg(v1)
17218 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17219 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17220 v0.AddArg(v5)
17221 v.AddArg(v0)
17222 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17223 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17224 v.AddArg(v6)
17225 return true
17226 }
17227
17228
17229
17230 for {
17231 _ = v.Args[1]
17232 x := v.Args[0]
17233 v_1 := v.Args[1]
17234 if v_1.Op != OpMul32 {
17235 break
17236 }
17237 _ = v_1.Args[1]
17238 v_1_0 := v_1.Args[0]
17239 if v_1_0.Op != OpConst32 {
17240 break
17241 }
17242 c := v_1_0.AuxInt
17243 v_1_1 := v_1.Args[1]
17244 if v_1_1.Op != OpSub32 {
17245 break
17246 }
17247 _ = v_1_1.Args[1]
17248 v_1_1_0 := v_1_1.Args[0]
17249 if v_1_1_0.Op != OpRsh32x64 {
17250 break
17251 }
17252 _ = v_1_1_0.Args[1]
17253 mul := v_1_1_0.Args[0]
17254 if mul.Op != OpHmul32 {
17255 break
17256 }
17257 _ = mul.Args[1]
17258 if x != mul.Args[0] {
17259 break
17260 }
17261 mul_1 := mul.Args[1]
17262 if mul_1.Op != OpConst32 {
17263 break
17264 }
17265 m := mul_1.AuxInt
17266 v_1_1_0_1 := v_1_1_0.Args[1]
17267 if v_1_1_0_1.Op != OpConst64 {
17268 break
17269 }
17270 s := v_1_1_0_1.AuxInt
17271 v_1_1_1 := v_1_1.Args[1]
17272 if v_1_1_1.Op != OpRsh32x64 {
17273 break
17274 }
17275 _ = v_1_1_1.Args[1]
17276 if x != v_1_1_1.Args[0] {
17277 break
17278 }
17279 v_1_1_1_1 := v_1_1_1.Args[1]
17280 if v_1_1_1_1.Op != OpConst64 {
17281 break
17282 }
17283 if v_1_1_1_1.AuxInt != 31 {
17284 break
17285 }
17286 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17287 break
17288 }
17289 v.reset(OpLeq32U)
17290 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17291 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17292 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17293 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17294 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17295 v2.AddArg(v3)
17296 v2.AddArg(x)
17297 v1.AddArg(v2)
17298 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17299 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17300 v1.AddArg(v4)
17301 v0.AddArg(v1)
17302 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17303 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17304 v0.AddArg(v5)
17305 v.AddArg(v0)
17306 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17307 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17308 v.AddArg(v6)
17309 return true
17310 }
17311
17312
17313
17314 for {
17315 _ = v.Args[1]
17316 x := v.Args[0]
17317 v_1 := v.Args[1]
17318 if v_1.Op != OpMul32 {
17319 break
17320 }
17321 _ = v_1.Args[1]
17322 v_1_0 := v_1.Args[0]
17323 if v_1_0.Op != OpSub32 {
17324 break
17325 }
17326 _ = v_1_0.Args[1]
17327 v_1_0_0 := v_1_0.Args[0]
17328 if v_1_0_0.Op != OpRsh32x64 {
17329 break
17330 }
17331 _ = v_1_0_0.Args[1]
17332 mul := v_1_0_0.Args[0]
17333 if mul.Op != OpHmul32 {
17334 break
17335 }
17336 _ = mul.Args[1]
17337 mul_0 := mul.Args[0]
17338 if mul_0.Op != OpConst32 {
17339 break
17340 }
17341 m := mul_0.AuxInt
17342 if x != mul.Args[1] {
17343 break
17344 }
17345 v_1_0_0_1 := v_1_0_0.Args[1]
17346 if v_1_0_0_1.Op != OpConst64 {
17347 break
17348 }
17349 s := v_1_0_0_1.AuxInt
17350 v_1_0_1 := v_1_0.Args[1]
17351 if v_1_0_1.Op != OpRsh32x64 {
17352 break
17353 }
17354 _ = v_1_0_1.Args[1]
17355 if x != v_1_0_1.Args[0] {
17356 break
17357 }
17358 v_1_0_1_1 := v_1_0_1.Args[1]
17359 if v_1_0_1_1.Op != OpConst64 {
17360 break
17361 }
17362 if v_1_0_1_1.AuxInt != 31 {
17363 break
17364 }
17365 v_1_1 := v_1.Args[1]
17366 if v_1_1.Op != OpConst32 {
17367 break
17368 }
17369 c := v_1_1.AuxInt
17370 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17371 break
17372 }
17373 v.reset(OpLeq32U)
17374 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17375 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17376 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17377 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17378 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17379 v2.AddArg(v3)
17380 v2.AddArg(x)
17381 v1.AddArg(v2)
17382 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17383 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17384 v1.AddArg(v4)
17385 v0.AddArg(v1)
17386 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17387 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17388 v0.AddArg(v5)
17389 v.AddArg(v0)
17390 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17391 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17392 v.AddArg(v6)
17393 return true
17394 }
17395
17396
17397
17398 for {
17399 _ = v.Args[1]
17400 x := v.Args[0]
17401 v_1 := v.Args[1]
17402 if v_1.Op != OpMul32 {
17403 break
17404 }
17405 _ = v_1.Args[1]
17406 v_1_0 := v_1.Args[0]
17407 if v_1_0.Op != OpSub32 {
17408 break
17409 }
17410 _ = v_1_0.Args[1]
17411 v_1_0_0 := v_1_0.Args[0]
17412 if v_1_0_0.Op != OpRsh32x64 {
17413 break
17414 }
17415 _ = v_1_0_0.Args[1]
17416 mul := v_1_0_0.Args[0]
17417 if mul.Op != OpHmul32 {
17418 break
17419 }
17420 _ = mul.Args[1]
17421 if x != mul.Args[0] {
17422 break
17423 }
17424 mul_1 := mul.Args[1]
17425 if mul_1.Op != OpConst32 {
17426 break
17427 }
17428 m := mul_1.AuxInt
17429 v_1_0_0_1 := v_1_0_0.Args[1]
17430 if v_1_0_0_1.Op != OpConst64 {
17431 break
17432 }
17433 s := v_1_0_0_1.AuxInt
17434 v_1_0_1 := v_1_0.Args[1]
17435 if v_1_0_1.Op != OpRsh32x64 {
17436 break
17437 }
17438 _ = v_1_0_1.Args[1]
17439 if x != v_1_0_1.Args[0] {
17440 break
17441 }
17442 v_1_0_1_1 := v_1_0_1.Args[1]
17443 if v_1_0_1_1.Op != OpConst64 {
17444 break
17445 }
17446 if v_1_0_1_1.AuxInt != 31 {
17447 break
17448 }
17449 v_1_1 := v_1.Args[1]
17450 if v_1_1.Op != OpConst32 {
17451 break
17452 }
17453 c := v_1_1.AuxInt
17454 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17455 break
17456 }
17457 v.reset(OpLeq32U)
17458 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17459 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17460 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17461 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17462 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17463 v2.AddArg(v3)
17464 v2.AddArg(x)
17465 v1.AddArg(v2)
17466 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17467 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17468 v1.AddArg(v4)
17469 v0.AddArg(v1)
17470 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17471 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17472 v0.AddArg(v5)
17473 v.AddArg(v0)
17474 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17475 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17476 v.AddArg(v6)
17477 return true
17478 }
17479
17480
17481
17482 for {
17483 x := v.Args[1]
17484 v_0 := v.Args[0]
17485 if v_0.Op != OpMul32 {
17486 break
17487 }
17488 _ = v_0.Args[1]
17489 v_0_0 := v_0.Args[0]
17490 if v_0_0.Op != OpConst32 {
17491 break
17492 }
17493 c := v_0_0.AuxInt
17494 v_0_1 := v_0.Args[1]
17495 if v_0_1.Op != OpSub32 {
17496 break
17497 }
17498 _ = v_0_1.Args[1]
17499 v_0_1_0 := v_0_1.Args[0]
17500 if v_0_1_0.Op != OpRsh32x64 {
17501 break
17502 }
17503 _ = v_0_1_0.Args[1]
17504 mul := v_0_1_0.Args[0]
17505 if mul.Op != OpHmul32 {
17506 break
17507 }
17508 _ = mul.Args[1]
17509 mul_0 := mul.Args[0]
17510 if mul_0.Op != OpConst32 {
17511 break
17512 }
17513 m := mul_0.AuxInt
17514 if x != mul.Args[1] {
17515 break
17516 }
17517 v_0_1_0_1 := v_0_1_0.Args[1]
17518 if v_0_1_0_1.Op != OpConst64 {
17519 break
17520 }
17521 s := v_0_1_0_1.AuxInt
17522 v_0_1_1 := v_0_1.Args[1]
17523 if v_0_1_1.Op != OpRsh32x64 {
17524 break
17525 }
17526 _ = v_0_1_1.Args[1]
17527 if x != v_0_1_1.Args[0] {
17528 break
17529 }
17530 v_0_1_1_1 := v_0_1_1.Args[1]
17531 if v_0_1_1_1.Op != OpConst64 {
17532 break
17533 }
17534 if v_0_1_1_1.AuxInt != 31 {
17535 break
17536 }
17537 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17538 break
17539 }
17540 v.reset(OpLeq32U)
17541 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17542 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17543 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17544 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17545 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17546 v2.AddArg(v3)
17547 v2.AddArg(x)
17548 v1.AddArg(v2)
17549 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17550 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17551 v1.AddArg(v4)
17552 v0.AddArg(v1)
17553 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17554 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17555 v0.AddArg(v5)
17556 v.AddArg(v0)
17557 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17558 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17559 v.AddArg(v6)
17560 return true
17561 }
17562
17563
17564
17565 for {
17566 x := v.Args[1]
17567 v_0 := v.Args[0]
17568 if v_0.Op != OpMul32 {
17569 break
17570 }
17571 _ = v_0.Args[1]
17572 v_0_0 := v_0.Args[0]
17573 if v_0_0.Op != OpConst32 {
17574 break
17575 }
17576 c := v_0_0.AuxInt
17577 v_0_1 := v_0.Args[1]
17578 if v_0_1.Op != OpSub32 {
17579 break
17580 }
17581 _ = v_0_1.Args[1]
17582 v_0_1_0 := v_0_1.Args[0]
17583 if v_0_1_0.Op != OpRsh32x64 {
17584 break
17585 }
17586 _ = v_0_1_0.Args[1]
17587 mul := v_0_1_0.Args[0]
17588 if mul.Op != OpHmul32 {
17589 break
17590 }
17591 _ = mul.Args[1]
17592 if x != mul.Args[0] {
17593 break
17594 }
17595 mul_1 := mul.Args[1]
17596 if mul_1.Op != OpConst32 {
17597 break
17598 }
17599 m := mul_1.AuxInt
17600 v_0_1_0_1 := v_0_1_0.Args[1]
17601 if v_0_1_0_1.Op != OpConst64 {
17602 break
17603 }
17604 s := v_0_1_0_1.AuxInt
17605 v_0_1_1 := v_0_1.Args[1]
17606 if v_0_1_1.Op != OpRsh32x64 {
17607 break
17608 }
17609 _ = v_0_1_1.Args[1]
17610 if x != v_0_1_1.Args[0] {
17611 break
17612 }
17613 v_0_1_1_1 := v_0_1_1.Args[1]
17614 if v_0_1_1_1.Op != OpConst64 {
17615 break
17616 }
17617 if v_0_1_1_1.AuxInt != 31 {
17618 break
17619 }
17620 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17621 break
17622 }
17623 v.reset(OpLeq32U)
17624 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17625 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17626 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17627 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17628 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17629 v2.AddArg(v3)
17630 v2.AddArg(x)
17631 v1.AddArg(v2)
17632 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17633 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17634 v1.AddArg(v4)
17635 v0.AddArg(v1)
17636 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17637 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17638 v0.AddArg(v5)
17639 v.AddArg(v0)
17640 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17641 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17642 v.AddArg(v6)
17643 return true
17644 }
17645
17646
17647
17648 for {
17649 x := v.Args[1]
17650 v_0 := v.Args[0]
17651 if v_0.Op != OpMul32 {
17652 break
17653 }
17654 _ = v_0.Args[1]
17655 v_0_0 := v_0.Args[0]
17656 if v_0_0.Op != OpSub32 {
17657 break
17658 }
17659 _ = v_0_0.Args[1]
17660 v_0_0_0 := v_0_0.Args[0]
17661 if v_0_0_0.Op != OpRsh32x64 {
17662 break
17663 }
17664 _ = v_0_0_0.Args[1]
17665 mul := v_0_0_0.Args[0]
17666 if mul.Op != OpHmul32 {
17667 break
17668 }
17669 _ = mul.Args[1]
17670 mul_0 := mul.Args[0]
17671 if mul_0.Op != OpConst32 {
17672 break
17673 }
17674 m := mul_0.AuxInt
17675 if x != mul.Args[1] {
17676 break
17677 }
17678 v_0_0_0_1 := v_0_0_0.Args[1]
17679 if v_0_0_0_1.Op != OpConst64 {
17680 break
17681 }
17682 s := v_0_0_0_1.AuxInt
17683 v_0_0_1 := v_0_0.Args[1]
17684 if v_0_0_1.Op != OpRsh32x64 {
17685 break
17686 }
17687 _ = v_0_0_1.Args[1]
17688 if x != v_0_0_1.Args[0] {
17689 break
17690 }
17691 v_0_0_1_1 := v_0_0_1.Args[1]
17692 if v_0_0_1_1.Op != OpConst64 {
17693 break
17694 }
17695 if v_0_0_1_1.AuxInt != 31 {
17696 break
17697 }
17698 v_0_1 := v_0.Args[1]
17699 if v_0_1.Op != OpConst32 {
17700 break
17701 }
17702 c := v_0_1.AuxInt
17703 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17704 break
17705 }
17706 v.reset(OpLeq32U)
17707 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17708 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17709 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17710 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17711 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17712 v2.AddArg(v3)
17713 v2.AddArg(x)
17714 v1.AddArg(v2)
17715 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17716 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17717 v1.AddArg(v4)
17718 v0.AddArg(v1)
17719 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17720 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17721 v0.AddArg(v5)
17722 v.AddArg(v0)
17723 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17724 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17725 v.AddArg(v6)
17726 return true
17727 }
17728 return false
17729 }
17730 func rewriteValuegeneric_OpEq32_70(v *Value) bool {
17731 b := v.Block
17732 typ := &b.Func.Config.Types
17733
17734
17735
17736 for {
17737 x := v.Args[1]
17738 v_0 := v.Args[0]
17739 if v_0.Op != OpMul32 {
17740 break
17741 }
17742 _ = v_0.Args[1]
17743 v_0_0 := v_0.Args[0]
17744 if v_0_0.Op != OpSub32 {
17745 break
17746 }
17747 _ = v_0_0.Args[1]
17748 v_0_0_0 := v_0_0.Args[0]
17749 if v_0_0_0.Op != OpRsh32x64 {
17750 break
17751 }
17752 _ = v_0_0_0.Args[1]
17753 mul := v_0_0_0.Args[0]
17754 if mul.Op != OpHmul32 {
17755 break
17756 }
17757 _ = mul.Args[1]
17758 if x != mul.Args[0] {
17759 break
17760 }
17761 mul_1 := mul.Args[1]
17762 if mul_1.Op != OpConst32 {
17763 break
17764 }
17765 m := mul_1.AuxInt
17766 v_0_0_0_1 := v_0_0_0.Args[1]
17767 if v_0_0_0_1.Op != OpConst64 {
17768 break
17769 }
17770 s := v_0_0_0_1.AuxInt
17771 v_0_0_1 := v_0_0.Args[1]
17772 if v_0_0_1.Op != OpRsh32x64 {
17773 break
17774 }
17775 _ = v_0_0_1.Args[1]
17776 if x != v_0_0_1.Args[0] {
17777 break
17778 }
17779 v_0_0_1_1 := v_0_0_1.Args[1]
17780 if v_0_0_1_1.Op != OpConst64 {
17781 break
17782 }
17783 if v_0_0_1_1.AuxInt != 31 {
17784 break
17785 }
17786 v_0_1 := v_0.Args[1]
17787 if v_0_1.Op != OpConst32 {
17788 break
17789 }
17790 c := v_0_1.AuxInt
17791 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17792 break
17793 }
17794 v.reset(OpLeq32U)
17795 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17796 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17797 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17798 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17799 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17800 v2.AddArg(v3)
17801 v2.AddArg(x)
17802 v1.AddArg(v2)
17803 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17804 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17805 v1.AddArg(v4)
17806 v0.AddArg(v1)
17807 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17808 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17809 v0.AddArg(v5)
17810 v.AddArg(v0)
17811 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17812 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17813 v.AddArg(v6)
17814 return true
17815 }
17816
17817
17818
17819 for {
17820 _ = v.Args[1]
17821 x := v.Args[0]
17822 v_1 := v.Args[1]
17823 if v_1.Op != OpMul32 {
17824 break
17825 }
17826 _ = v_1.Args[1]
17827 v_1_0 := v_1.Args[0]
17828 if v_1_0.Op != OpConst32 {
17829 break
17830 }
17831 c := v_1_0.AuxInt
17832 v_1_1 := v_1.Args[1]
17833 if v_1_1.Op != OpSub32 {
17834 break
17835 }
17836 _ = v_1_1.Args[1]
17837 v_1_1_0 := v_1_1.Args[0]
17838 if v_1_1_0.Op != OpRsh32x64 {
17839 break
17840 }
17841 _ = v_1_1_0.Args[1]
17842 v_1_1_0_0 := v_1_1_0.Args[0]
17843 if v_1_1_0_0.Op != OpAdd32 {
17844 break
17845 }
17846 _ = v_1_1_0_0.Args[1]
17847 mul := v_1_1_0_0.Args[0]
17848 if mul.Op != OpHmul32 {
17849 break
17850 }
17851 _ = mul.Args[1]
17852 mul_0 := mul.Args[0]
17853 if mul_0.Op != OpConst32 {
17854 break
17855 }
17856 m := mul_0.AuxInt
17857 if x != mul.Args[1] {
17858 break
17859 }
17860 if x != v_1_1_0_0.Args[1] {
17861 break
17862 }
17863 v_1_1_0_1 := v_1_1_0.Args[1]
17864 if v_1_1_0_1.Op != OpConst64 {
17865 break
17866 }
17867 s := v_1_1_0_1.AuxInt
17868 v_1_1_1 := v_1_1.Args[1]
17869 if v_1_1_1.Op != OpRsh32x64 {
17870 break
17871 }
17872 _ = v_1_1_1.Args[1]
17873 if x != v_1_1_1.Args[0] {
17874 break
17875 }
17876 v_1_1_1_1 := v_1_1_1.Args[1]
17877 if v_1_1_1_1.Op != OpConst64 {
17878 break
17879 }
17880 if v_1_1_1_1.AuxInt != 31 {
17881 break
17882 }
17883 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17884 break
17885 }
17886 v.reset(OpLeq32U)
17887 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17888 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17889 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17890 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17891 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17892 v2.AddArg(v3)
17893 v2.AddArg(x)
17894 v1.AddArg(v2)
17895 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17896 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17897 v1.AddArg(v4)
17898 v0.AddArg(v1)
17899 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17900 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17901 v0.AddArg(v5)
17902 v.AddArg(v0)
17903 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17904 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17905 v.AddArg(v6)
17906 return true
17907 }
17908
17909
17910
17911 for {
17912 _ = v.Args[1]
17913 x := v.Args[0]
17914 v_1 := v.Args[1]
17915 if v_1.Op != OpMul32 {
17916 break
17917 }
17918 _ = v_1.Args[1]
17919 v_1_0 := v_1.Args[0]
17920 if v_1_0.Op != OpConst32 {
17921 break
17922 }
17923 c := v_1_0.AuxInt
17924 v_1_1 := v_1.Args[1]
17925 if v_1_1.Op != OpSub32 {
17926 break
17927 }
17928 _ = v_1_1.Args[1]
17929 v_1_1_0 := v_1_1.Args[0]
17930 if v_1_1_0.Op != OpRsh32x64 {
17931 break
17932 }
17933 _ = v_1_1_0.Args[1]
17934 v_1_1_0_0 := v_1_1_0.Args[0]
17935 if v_1_1_0_0.Op != OpAdd32 {
17936 break
17937 }
17938 _ = v_1_1_0_0.Args[1]
17939 mul := v_1_1_0_0.Args[0]
17940 if mul.Op != OpHmul32 {
17941 break
17942 }
17943 _ = mul.Args[1]
17944 if x != mul.Args[0] {
17945 break
17946 }
17947 mul_1 := mul.Args[1]
17948 if mul_1.Op != OpConst32 {
17949 break
17950 }
17951 m := mul_1.AuxInt
17952 if x != v_1_1_0_0.Args[1] {
17953 break
17954 }
17955 v_1_1_0_1 := v_1_1_0.Args[1]
17956 if v_1_1_0_1.Op != OpConst64 {
17957 break
17958 }
17959 s := v_1_1_0_1.AuxInt
17960 v_1_1_1 := v_1_1.Args[1]
17961 if v_1_1_1.Op != OpRsh32x64 {
17962 break
17963 }
17964 _ = v_1_1_1.Args[1]
17965 if x != v_1_1_1.Args[0] {
17966 break
17967 }
17968 v_1_1_1_1 := v_1_1_1.Args[1]
17969 if v_1_1_1_1.Op != OpConst64 {
17970 break
17971 }
17972 if v_1_1_1_1.AuxInt != 31 {
17973 break
17974 }
17975 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
17976 break
17977 }
17978 v.reset(OpLeq32U)
17979 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
17980 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
17981 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
17982 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17983 v3.AuxInt = int64(int32(sdivisible(32, c).m))
17984 v2.AddArg(v3)
17985 v2.AddArg(x)
17986 v1.AddArg(v2)
17987 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17988 v4.AuxInt = int64(int32(sdivisible(32, c).a))
17989 v1.AddArg(v4)
17990 v0.AddArg(v1)
17991 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17992 v5.AuxInt = int64(32 - sdivisible(32, c).k)
17993 v0.AddArg(v5)
17994 v.AddArg(v0)
17995 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
17996 v6.AuxInt = int64(int32(sdivisible(32, c).max))
17997 v.AddArg(v6)
17998 return true
17999 }
18000
18001
18002
18003 for {
18004 _ = v.Args[1]
18005 x := v.Args[0]
18006 v_1 := v.Args[1]
18007 if v_1.Op != OpMul32 {
18008 break
18009 }
18010 _ = v_1.Args[1]
18011 v_1_0 := v_1.Args[0]
18012 if v_1_0.Op != OpConst32 {
18013 break
18014 }
18015 c := v_1_0.AuxInt
18016 v_1_1 := v_1.Args[1]
18017 if v_1_1.Op != OpSub32 {
18018 break
18019 }
18020 _ = v_1_1.Args[1]
18021 v_1_1_0 := v_1_1.Args[0]
18022 if v_1_1_0.Op != OpRsh32x64 {
18023 break
18024 }
18025 _ = v_1_1_0.Args[1]
18026 v_1_1_0_0 := v_1_1_0.Args[0]
18027 if v_1_1_0_0.Op != OpAdd32 {
18028 break
18029 }
18030 _ = v_1_1_0_0.Args[1]
18031 if x != v_1_1_0_0.Args[0] {
18032 break
18033 }
18034 mul := v_1_1_0_0.Args[1]
18035 if mul.Op != OpHmul32 {
18036 break
18037 }
18038 _ = mul.Args[1]
18039 mul_0 := mul.Args[0]
18040 if mul_0.Op != OpConst32 {
18041 break
18042 }
18043 m := mul_0.AuxInt
18044 if x != mul.Args[1] {
18045 break
18046 }
18047 v_1_1_0_1 := v_1_1_0.Args[1]
18048 if v_1_1_0_1.Op != OpConst64 {
18049 break
18050 }
18051 s := v_1_1_0_1.AuxInt
18052 v_1_1_1 := v_1_1.Args[1]
18053 if v_1_1_1.Op != OpRsh32x64 {
18054 break
18055 }
18056 _ = v_1_1_1.Args[1]
18057 if x != v_1_1_1.Args[0] {
18058 break
18059 }
18060 v_1_1_1_1 := v_1_1_1.Args[1]
18061 if v_1_1_1_1.Op != OpConst64 {
18062 break
18063 }
18064 if v_1_1_1_1.AuxInt != 31 {
18065 break
18066 }
18067 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18068 break
18069 }
18070 v.reset(OpLeq32U)
18071 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18072 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18073 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18074 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18075 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18076 v2.AddArg(v3)
18077 v2.AddArg(x)
18078 v1.AddArg(v2)
18079 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18080 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18081 v1.AddArg(v4)
18082 v0.AddArg(v1)
18083 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18084 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18085 v0.AddArg(v5)
18086 v.AddArg(v0)
18087 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18088 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18089 v.AddArg(v6)
18090 return true
18091 }
18092
18093
18094
18095 for {
18096 _ = v.Args[1]
18097 x := v.Args[0]
18098 v_1 := v.Args[1]
18099 if v_1.Op != OpMul32 {
18100 break
18101 }
18102 _ = v_1.Args[1]
18103 v_1_0 := v_1.Args[0]
18104 if v_1_0.Op != OpConst32 {
18105 break
18106 }
18107 c := v_1_0.AuxInt
18108 v_1_1 := v_1.Args[1]
18109 if v_1_1.Op != OpSub32 {
18110 break
18111 }
18112 _ = v_1_1.Args[1]
18113 v_1_1_0 := v_1_1.Args[0]
18114 if v_1_1_0.Op != OpRsh32x64 {
18115 break
18116 }
18117 _ = v_1_1_0.Args[1]
18118 v_1_1_0_0 := v_1_1_0.Args[0]
18119 if v_1_1_0_0.Op != OpAdd32 {
18120 break
18121 }
18122 _ = v_1_1_0_0.Args[1]
18123 if x != v_1_1_0_0.Args[0] {
18124 break
18125 }
18126 mul := v_1_1_0_0.Args[1]
18127 if mul.Op != OpHmul32 {
18128 break
18129 }
18130 _ = mul.Args[1]
18131 if x != mul.Args[0] {
18132 break
18133 }
18134 mul_1 := mul.Args[1]
18135 if mul_1.Op != OpConst32 {
18136 break
18137 }
18138 m := mul_1.AuxInt
18139 v_1_1_0_1 := v_1_1_0.Args[1]
18140 if v_1_1_0_1.Op != OpConst64 {
18141 break
18142 }
18143 s := v_1_1_0_1.AuxInt
18144 v_1_1_1 := v_1_1.Args[1]
18145 if v_1_1_1.Op != OpRsh32x64 {
18146 break
18147 }
18148 _ = v_1_1_1.Args[1]
18149 if x != v_1_1_1.Args[0] {
18150 break
18151 }
18152 v_1_1_1_1 := v_1_1_1.Args[1]
18153 if v_1_1_1_1.Op != OpConst64 {
18154 break
18155 }
18156 if v_1_1_1_1.AuxInt != 31 {
18157 break
18158 }
18159 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18160 break
18161 }
18162 v.reset(OpLeq32U)
18163 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18164 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18165 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18166 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18167 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18168 v2.AddArg(v3)
18169 v2.AddArg(x)
18170 v1.AddArg(v2)
18171 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18172 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18173 v1.AddArg(v4)
18174 v0.AddArg(v1)
18175 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18176 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18177 v0.AddArg(v5)
18178 v.AddArg(v0)
18179 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18180 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18181 v.AddArg(v6)
18182 return true
18183 }
18184
18185
18186
18187 for {
18188 _ = v.Args[1]
18189 x := v.Args[0]
18190 v_1 := v.Args[1]
18191 if v_1.Op != OpMul32 {
18192 break
18193 }
18194 _ = v_1.Args[1]
18195 v_1_0 := v_1.Args[0]
18196 if v_1_0.Op != OpSub32 {
18197 break
18198 }
18199 _ = v_1_0.Args[1]
18200 v_1_0_0 := v_1_0.Args[0]
18201 if v_1_0_0.Op != OpRsh32x64 {
18202 break
18203 }
18204 _ = v_1_0_0.Args[1]
18205 v_1_0_0_0 := v_1_0_0.Args[0]
18206 if v_1_0_0_0.Op != OpAdd32 {
18207 break
18208 }
18209 _ = v_1_0_0_0.Args[1]
18210 mul := v_1_0_0_0.Args[0]
18211 if mul.Op != OpHmul32 {
18212 break
18213 }
18214 _ = mul.Args[1]
18215 mul_0 := mul.Args[0]
18216 if mul_0.Op != OpConst32 {
18217 break
18218 }
18219 m := mul_0.AuxInt
18220 if x != mul.Args[1] {
18221 break
18222 }
18223 if x != v_1_0_0_0.Args[1] {
18224 break
18225 }
18226 v_1_0_0_1 := v_1_0_0.Args[1]
18227 if v_1_0_0_1.Op != OpConst64 {
18228 break
18229 }
18230 s := v_1_0_0_1.AuxInt
18231 v_1_0_1 := v_1_0.Args[1]
18232 if v_1_0_1.Op != OpRsh32x64 {
18233 break
18234 }
18235 _ = v_1_0_1.Args[1]
18236 if x != v_1_0_1.Args[0] {
18237 break
18238 }
18239 v_1_0_1_1 := v_1_0_1.Args[1]
18240 if v_1_0_1_1.Op != OpConst64 {
18241 break
18242 }
18243 if v_1_0_1_1.AuxInt != 31 {
18244 break
18245 }
18246 v_1_1 := v_1.Args[1]
18247 if v_1_1.Op != OpConst32 {
18248 break
18249 }
18250 c := v_1_1.AuxInt
18251 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18252 break
18253 }
18254 v.reset(OpLeq32U)
18255 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18256 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18257 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18258 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18259 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18260 v2.AddArg(v3)
18261 v2.AddArg(x)
18262 v1.AddArg(v2)
18263 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18264 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18265 v1.AddArg(v4)
18266 v0.AddArg(v1)
18267 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18268 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18269 v0.AddArg(v5)
18270 v.AddArg(v0)
18271 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18272 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18273 v.AddArg(v6)
18274 return true
18275 }
18276
18277
18278
18279 for {
18280 _ = v.Args[1]
18281 x := v.Args[0]
18282 v_1 := v.Args[1]
18283 if v_1.Op != OpMul32 {
18284 break
18285 }
18286 _ = v_1.Args[1]
18287 v_1_0 := v_1.Args[0]
18288 if v_1_0.Op != OpSub32 {
18289 break
18290 }
18291 _ = v_1_0.Args[1]
18292 v_1_0_0 := v_1_0.Args[0]
18293 if v_1_0_0.Op != OpRsh32x64 {
18294 break
18295 }
18296 _ = v_1_0_0.Args[1]
18297 v_1_0_0_0 := v_1_0_0.Args[0]
18298 if v_1_0_0_0.Op != OpAdd32 {
18299 break
18300 }
18301 _ = v_1_0_0_0.Args[1]
18302 mul := v_1_0_0_0.Args[0]
18303 if mul.Op != OpHmul32 {
18304 break
18305 }
18306 _ = mul.Args[1]
18307 if x != mul.Args[0] {
18308 break
18309 }
18310 mul_1 := mul.Args[1]
18311 if mul_1.Op != OpConst32 {
18312 break
18313 }
18314 m := mul_1.AuxInt
18315 if x != v_1_0_0_0.Args[1] {
18316 break
18317 }
18318 v_1_0_0_1 := v_1_0_0.Args[1]
18319 if v_1_0_0_1.Op != OpConst64 {
18320 break
18321 }
18322 s := v_1_0_0_1.AuxInt
18323 v_1_0_1 := v_1_0.Args[1]
18324 if v_1_0_1.Op != OpRsh32x64 {
18325 break
18326 }
18327 _ = v_1_0_1.Args[1]
18328 if x != v_1_0_1.Args[0] {
18329 break
18330 }
18331 v_1_0_1_1 := v_1_0_1.Args[1]
18332 if v_1_0_1_1.Op != OpConst64 {
18333 break
18334 }
18335 if v_1_0_1_1.AuxInt != 31 {
18336 break
18337 }
18338 v_1_1 := v_1.Args[1]
18339 if v_1_1.Op != OpConst32 {
18340 break
18341 }
18342 c := v_1_1.AuxInt
18343 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18344 break
18345 }
18346 v.reset(OpLeq32U)
18347 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18348 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18349 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18350 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18351 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18352 v2.AddArg(v3)
18353 v2.AddArg(x)
18354 v1.AddArg(v2)
18355 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18356 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18357 v1.AddArg(v4)
18358 v0.AddArg(v1)
18359 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18360 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18361 v0.AddArg(v5)
18362 v.AddArg(v0)
18363 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18364 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18365 v.AddArg(v6)
18366 return true
18367 }
18368
18369
18370
18371 for {
18372 _ = v.Args[1]
18373 x := v.Args[0]
18374 v_1 := v.Args[1]
18375 if v_1.Op != OpMul32 {
18376 break
18377 }
18378 _ = v_1.Args[1]
18379 v_1_0 := v_1.Args[0]
18380 if v_1_0.Op != OpSub32 {
18381 break
18382 }
18383 _ = v_1_0.Args[1]
18384 v_1_0_0 := v_1_0.Args[0]
18385 if v_1_0_0.Op != OpRsh32x64 {
18386 break
18387 }
18388 _ = v_1_0_0.Args[1]
18389 v_1_0_0_0 := v_1_0_0.Args[0]
18390 if v_1_0_0_0.Op != OpAdd32 {
18391 break
18392 }
18393 _ = v_1_0_0_0.Args[1]
18394 if x != v_1_0_0_0.Args[0] {
18395 break
18396 }
18397 mul := v_1_0_0_0.Args[1]
18398 if mul.Op != OpHmul32 {
18399 break
18400 }
18401 _ = mul.Args[1]
18402 mul_0 := mul.Args[0]
18403 if mul_0.Op != OpConst32 {
18404 break
18405 }
18406 m := mul_0.AuxInt
18407 if x != mul.Args[1] {
18408 break
18409 }
18410 v_1_0_0_1 := v_1_0_0.Args[1]
18411 if v_1_0_0_1.Op != OpConst64 {
18412 break
18413 }
18414 s := v_1_0_0_1.AuxInt
18415 v_1_0_1 := v_1_0.Args[1]
18416 if v_1_0_1.Op != OpRsh32x64 {
18417 break
18418 }
18419 _ = v_1_0_1.Args[1]
18420 if x != v_1_0_1.Args[0] {
18421 break
18422 }
18423 v_1_0_1_1 := v_1_0_1.Args[1]
18424 if v_1_0_1_1.Op != OpConst64 {
18425 break
18426 }
18427 if v_1_0_1_1.AuxInt != 31 {
18428 break
18429 }
18430 v_1_1 := v_1.Args[1]
18431 if v_1_1.Op != OpConst32 {
18432 break
18433 }
18434 c := v_1_1.AuxInt
18435 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18436 break
18437 }
18438 v.reset(OpLeq32U)
18439 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18440 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18441 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18442 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18443 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18444 v2.AddArg(v3)
18445 v2.AddArg(x)
18446 v1.AddArg(v2)
18447 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18448 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18449 v1.AddArg(v4)
18450 v0.AddArg(v1)
18451 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18452 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18453 v0.AddArg(v5)
18454 v.AddArg(v0)
18455 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18456 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18457 v.AddArg(v6)
18458 return true
18459 }
18460
18461
18462
18463 for {
18464 _ = v.Args[1]
18465 x := v.Args[0]
18466 v_1 := v.Args[1]
18467 if v_1.Op != OpMul32 {
18468 break
18469 }
18470 _ = v_1.Args[1]
18471 v_1_0 := v_1.Args[0]
18472 if v_1_0.Op != OpSub32 {
18473 break
18474 }
18475 _ = v_1_0.Args[1]
18476 v_1_0_0 := v_1_0.Args[0]
18477 if v_1_0_0.Op != OpRsh32x64 {
18478 break
18479 }
18480 _ = v_1_0_0.Args[1]
18481 v_1_0_0_0 := v_1_0_0.Args[0]
18482 if v_1_0_0_0.Op != OpAdd32 {
18483 break
18484 }
18485 _ = v_1_0_0_0.Args[1]
18486 if x != v_1_0_0_0.Args[0] {
18487 break
18488 }
18489 mul := v_1_0_0_0.Args[1]
18490 if mul.Op != OpHmul32 {
18491 break
18492 }
18493 _ = mul.Args[1]
18494 if x != mul.Args[0] {
18495 break
18496 }
18497 mul_1 := mul.Args[1]
18498 if mul_1.Op != OpConst32 {
18499 break
18500 }
18501 m := mul_1.AuxInt
18502 v_1_0_0_1 := v_1_0_0.Args[1]
18503 if v_1_0_0_1.Op != OpConst64 {
18504 break
18505 }
18506 s := v_1_0_0_1.AuxInt
18507 v_1_0_1 := v_1_0.Args[1]
18508 if v_1_0_1.Op != OpRsh32x64 {
18509 break
18510 }
18511 _ = v_1_0_1.Args[1]
18512 if x != v_1_0_1.Args[0] {
18513 break
18514 }
18515 v_1_0_1_1 := v_1_0_1.Args[1]
18516 if v_1_0_1_1.Op != OpConst64 {
18517 break
18518 }
18519 if v_1_0_1_1.AuxInt != 31 {
18520 break
18521 }
18522 v_1_1 := v_1.Args[1]
18523 if v_1_1.Op != OpConst32 {
18524 break
18525 }
18526 c := v_1_1.AuxInt
18527 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18528 break
18529 }
18530 v.reset(OpLeq32U)
18531 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18532 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18533 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18534 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18535 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18536 v2.AddArg(v3)
18537 v2.AddArg(x)
18538 v1.AddArg(v2)
18539 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18540 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18541 v1.AddArg(v4)
18542 v0.AddArg(v1)
18543 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18544 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18545 v0.AddArg(v5)
18546 v.AddArg(v0)
18547 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18548 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18549 v.AddArg(v6)
18550 return true
18551 }
18552
18553
18554
18555 for {
18556 x := v.Args[1]
18557 v_0 := v.Args[0]
18558 if v_0.Op != OpMul32 {
18559 break
18560 }
18561 _ = v_0.Args[1]
18562 v_0_0 := v_0.Args[0]
18563 if v_0_0.Op != OpConst32 {
18564 break
18565 }
18566 c := v_0_0.AuxInt
18567 v_0_1 := v_0.Args[1]
18568 if v_0_1.Op != OpSub32 {
18569 break
18570 }
18571 _ = v_0_1.Args[1]
18572 v_0_1_0 := v_0_1.Args[0]
18573 if v_0_1_0.Op != OpRsh32x64 {
18574 break
18575 }
18576 _ = v_0_1_0.Args[1]
18577 v_0_1_0_0 := v_0_1_0.Args[0]
18578 if v_0_1_0_0.Op != OpAdd32 {
18579 break
18580 }
18581 _ = v_0_1_0_0.Args[1]
18582 mul := v_0_1_0_0.Args[0]
18583 if mul.Op != OpHmul32 {
18584 break
18585 }
18586 _ = mul.Args[1]
18587 mul_0 := mul.Args[0]
18588 if mul_0.Op != OpConst32 {
18589 break
18590 }
18591 m := mul_0.AuxInt
18592 if x != mul.Args[1] {
18593 break
18594 }
18595 if x != v_0_1_0_0.Args[1] {
18596 break
18597 }
18598 v_0_1_0_1 := v_0_1_0.Args[1]
18599 if v_0_1_0_1.Op != OpConst64 {
18600 break
18601 }
18602 s := v_0_1_0_1.AuxInt
18603 v_0_1_1 := v_0_1.Args[1]
18604 if v_0_1_1.Op != OpRsh32x64 {
18605 break
18606 }
18607 _ = v_0_1_1.Args[1]
18608 if x != v_0_1_1.Args[0] {
18609 break
18610 }
18611 v_0_1_1_1 := v_0_1_1.Args[1]
18612 if v_0_1_1_1.Op != OpConst64 {
18613 break
18614 }
18615 if v_0_1_1_1.AuxInt != 31 {
18616 break
18617 }
18618 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18619 break
18620 }
18621 v.reset(OpLeq32U)
18622 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18623 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18624 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18625 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18626 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18627 v2.AddArg(v3)
18628 v2.AddArg(x)
18629 v1.AddArg(v2)
18630 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18631 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18632 v1.AddArg(v4)
18633 v0.AddArg(v1)
18634 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18635 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18636 v0.AddArg(v5)
18637 v.AddArg(v0)
18638 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18639 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18640 v.AddArg(v6)
18641 return true
18642 }
18643 return false
18644 }
18645 func rewriteValuegeneric_OpEq32_80(v *Value) bool {
18646 b := v.Block
18647 typ := &b.Func.Config.Types
18648
18649
18650
18651 for {
18652 x := v.Args[1]
18653 v_0 := v.Args[0]
18654 if v_0.Op != OpMul32 {
18655 break
18656 }
18657 _ = v_0.Args[1]
18658 v_0_0 := v_0.Args[0]
18659 if v_0_0.Op != OpConst32 {
18660 break
18661 }
18662 c := v_0_0.AuxInt
18663 v_0_1 := v_0.Args[1]
18664 if v_0_1.Op != OpSub32 {
18665 break
18666 }
18667 _ = v_0_1.Args[1]
18668 v_0_1_0 := v_0_1.Args[0]
18669 if v_0_1_0.Op != OpRsh32x64 {
18670 break
18671 }
18672 _ = v_0_1_0.Args[1]
18673 v_0_1_0_0 := v_0_1_0.Args[0]
18674 if v_0_1_0_0.Op != OpAdd32 {
18675 break
18676 }
18677 _ = v_0_1_0_0.Args[1]
18678 mul := v_0_1_0_0.Args[0]
18679 if mul.Op != OpHmul32 {
18680 break
18681 }
18682 _ = mul.Args[1]
18683 if x != mul.Args[0] {
18684 break
18685 }
18686 mul_1 := mul.Args[1]
18687 if mul_1.Op != OpConst32 {
18688 break
18689 }
18690 m := mul_1.AuxInt
18691 if x != v_0_1_0_0.Args[1] {
18692 break
18693 }
18694 v_0_1_0_1 := v_0_1_0.Args[1]
18695 if v_0_1_0_1.Op != OpConst64 {
18696 break
18697 }
18698 s := v_0_1_0_1.AuxInt
18699 v_0_1_1 := v_0_1.Args[1]
18700 if v_0_1_1.Op != OpRsh32x64 {
18701 break
18702 }
18703 _ = v_0_1_1.Args[1]
18704 if x != v_0_1_1.Args[0] {
18705 break
18706 }
18707 v_0_1_1_1 := v_0_1_1.Args[1]
18708 if v_0_1_1_1.Op != OpConst64 {
18709 break
18710 }
18711 if v_0_1_1_1.AuxInt != 31 {
18712 break
18713 }
18714 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18715 break
18716 }
18717 v.reset(OpLeq32U)
18718 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18719 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18720 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18721 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18722 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18723 v2.AddArg(v3)
18724 v2.AddArg(x)
18725 v1.AddArg(v2)
18726 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18727 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18728 v1.AddArg(v4)
18729 v0.AddArg(v1)
18730 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18731 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18732 v0.AddArg(v5)
18733 v.AddArg(v0)
18734 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18735 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18736 v.AddArg(v6)
18737 return true
18738 }
18739
18740
18741
18742 for {
18743 x := v.Args[1]
18744 v_0 := v.Args[0]
18745 if v_0.Op != OpMul32 {
18746 break
18747 }
18748 _ = v_0.Args[1]
18749 v_0_0 := v_0.Args[0]
18750 if v_0_0.Op != OpConst32 {
18751 break
18752 }
18753 c := v_0_0.AuxInt
18754 v_0_1 := v_0.Args[1]
18755 if v_0_1.Op != OpSub32 {
18756 break
18757 }
18758 _ = v_0_1.Args[1]
18759 v_0_1_0 := v_0_1.Args[0]
18760 if v_0_1_0.Op != OpRsh32x64 {
18761 break
18762 }
18763 _ = v_0_1_0.Args[1]
18764 v_0_1_0_0 := v_0_1_0.Args[0]
18765 if v_0_1_0_0.Op != OpAdd32 {
18766 break
18767 }
18768 _ = v_0_1_0_0.Args[1]
18769 if x != v_0_1_0_0.Args[0] {
18770 break
18771 }
18772 mul := v_0_1_0_0.Args[1]
18773 if mul.Op != OpHmul32 {
18774 break
18775 }
18776 _ = mul.Args[1]
18777 mul_0 := mul.Args[0]
18778 if mul_0.Op != OpConst32 {
18779 break
18780 }
18781 m := mul_0.AuxInt
18782 if x != mul.Args[1] {
18783 break
18784 }
18785 v_0_1_0_1 := v_0_1_0.Args[1]
18786 if v_0_1_0_1.Op != OpConst64 {
18787 break
18788 }
18789 s := v_0_1_0_1.AuxInt
18790 v_0_1_1 := v_0_1.Args[1]
18791 if v_0_1_1.Op != OpRsh32x64 {
18792 break
18793 }
18794 _ = v_0_1_1.Args[1]
18795 if x != v_0_1_1.Args[0] {
18796 break
18797 }
18798 v_0_1_1_1 := v_0_1_1.Args[1]
18799 if v_0_1_1_1.Op != OpConst64 {
18800 break
18801 }
18802 if v_0_1_1_1.AuxInt != 31 {
18803 break
18804 }
18805 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18806 break
18807 }
18808 v.reset(OpLeq32U)
18809 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18810 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18811 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18812 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18813 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18814 v2.AddArg(v3)
18815 v2.AddArg(x)
18816 v1.AddArg(v2)
18817 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18818 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18819 v1.AddArg(v4)
18820 v0.AddArg(v1)
18821 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18822 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18823 v0.AddArg(v5)
18824 v.AddArg(v0)
18825 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18826 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18827 v.AddArg(v6)
18828 return true
18829 }
18830
18831
18832
18833 for {
18834 x := v.Args[1]
18835 v_0 := v.Args[0]
18836 if v_0.Op != OpMul32 {
18837 break
18838 }
18839 _ = v_0.Args[1]
18840 v_0_0 := v_0.Args[0]
18841 if v_0_0.Op != OpConst32 {
18842 break
18843 }
18844 c := v_0_0.AuxInt
18845 v_0_1 := v_0.Args[1]
18846 if v_0_1.Op != OpSub32 {
18847 break
18848 }
18849 _ = v_0_1.Args[1]
18850 v_0_1_0 := v_0_1.Args[0]
18851 if v_0_1_0.Op != OpRsh32x64 {
18852 break
18853 }
18854 _ = v_0_1_0.Args[1]
18855 v_0_1_0_0 := v_0_1_0.Args[0]
18856 if v_0_1_0_0.Op != OpAdd32 {
18857 break
18858 }
18859 _ = v_0_1_0_0.Args[1]
18860 if x != v_0_1_0_0.Args[0] {
18861 break
18862 }
18863 mul := v_0_1_0_0.Args[1]
18864 if mul.Op != OpHmul32 {
18865 break
18866 }
18867 _ = mul.Args[1]
18868 if x != mul.Args[0] {
18869 break
18870 }
18871 mul_1 := mul.Args[1]
18872 if mul_1.Op != OpConst32 {
18873 break
18874 }
18875 m := mul_1.AuxInt
18876 v_0_1_0_1 := v_0_1_0.Args[1]
18877 if v_0_1_0_1.Op != OpConst64 {
18878 break
18879 }
18880 s := v_0_1_0_1.AuxInt
18881 v_0_1_1 := v_0_1.Args[1]
18882 if v_0_1_1.Op != OpRsh32x64 {
18883 break
18884 }
18885 _ = v_0_1_1.Args[1]
18886 if x != v_0_1_1.Args[0] {
18887 break
18888 }
18889 v_0_1_1_1 := v_0_1_1.Args[1]
18890 if v_0_1_1_1.Op != OpConst64 {
18891 break
18892 }
18893 if v_0_1_1_1.AuxInt != 31 {
18894 break
18895 }
18896 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18897 break
18898 }
18899 v.reset(OpLeq32U)
18900 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18901 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18902 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18903 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18904 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18905 v2.AddArg(v3)
18906 v2.AddArg(x)
18907 v1.AddArg(v2)
18908 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18909 v4.AuxInt = int64(int32(sdivisible(32, c).a))
18910 v1.AddArg(v4)
18911 v0.AddArg(v1)
18912 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18913 v5.AuxInt = int64(32 - sdivisible(32, c).k)
18914 v0.AddArg(v5)
18915 v.AddArg(v0)
18916 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18917 v6.AuxInt = int64(int32(sdivisible(32, c).max))
18918 v.AddArg(v6)
18919 return true
18920 }
18921
18922
18923
18924 for {
18925 x := v.Args[1]
18926 v_0 := v.Args[0]
18927 if v_0.Op != OpMul32 {
18928 break
18929 }
18930 _ = v_0.Args[1]
18931 v_0_0 := v_0.Args[0]
18932 if v_0_0.Op != OpSub32 {
18933 break
18934 }
18935 _ = v_0_0.Args[1]
18936 v_0_0_0 := v_0_0.Args[0]
18937 if v_0_0_0.Op != OpRsh32x64 {
18938 break
18939 }
18940 _ = v_0_0_0.Args[1]
18941 v_0_0_0_0 := v_0_0_0.Args[0]
18942 if v_0_0_0_0.Op != OpAdd32 {
18943 break
18944 }
18945 _ = v_0_0_0_0.Args[1]
18946 mul := v_0_0_0_0.Args[0]
18947 if mul.Op != OpHmul32 {
18948 break
18949 }
18950 _ = mul.Args[1]
18951 mul_0 := mul.Args[0]
18952 if mul_0.Op != OpConst32 {
18953 break
18954 }
18955 m := mul_0.AuxInt
18956 if x != mul.Args[1] {
18957 break
18958 }
18959 if x != v_0_0_0_0.Args[1] {
18960 break
18961 }
18962 v_0_0_0_1 := v_0_0_0.Args[1]
18963 if v_0_0_0_1.Op != OpConst64 {
18964 break
18965 }
18966 s := v_0_0_0_1.AuxInt
18967 v_0_0_1 := v_0_0.Args[1]
18968 if v_0_0_1.Op != OpRsh32x64 {
18969 break
18970 }
18971 _ = v_0_0_1.Args[1]
18972 if x != v_0_0_1.Args[0] {
18973 break
18974 }
18975 v_0_0_1_1 := v_0_0_1.Args[1]
18976 if v_0_0_1_1.Op != OpConst64 {
18977 break
18978 }
18979 if v_0_0_1_1.AuxInt != 31 {
18980 break
18981 }
18982 v_0_1 := v_0.Args[1]
18983 if v_0_1.Op != OpConst32 {
18984 break
18985 }
18986 c := v_0_1.AuxInt
18987 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
18988 break
18989 }
18990 v.reset(OpLeq32U)
18991 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
18992 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
18993 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
18994 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
18995 v3.AuxInt = int64(int32(sdivisible(32, c).m))
18996 v2.AddArg(v3)
18997 v2.AddArg(x)
18998 v1.AddArg(v2)
18999 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19000 v4.AuxInt = int64(int32(sdivisible(32, c).a))
19001 v1.AddArg(v4)
19002 v0.AddArg(v1)
19003 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19004 v5.AuxInt = int64(32 - sdivisible(32, c).k)
19005 v0.AddArg(v5)
19006 v.AddArg(v0)
19007 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19008 v6.AuxInt = int64(int32(sdivisible(32, c).max))
19009 v.AddArg(v6)
19010 return true
19011 }
19012
19013
19014
19015 for {
19016 x := v.Args[1]
19017 v_0 := v.Args[0]
19018 if v_0.Op != OpMul32 {
19019 break
19020 }
19021 _ = v_0.Args[1]
19022 v_0_0 := v_0.Args[0]
19023 if v_0_0.Op != OpSub32 {
19024 break
19025 }
19026 _ = v_0_0.Args[1]
19027 v_0_0_0 := v_0_0.Args[0]
19028 if v_0_0_0.Op != OpRsh32x64 {
19029 break
19030 }
19031 _ = v_0_0_0.Args[1]
19032 v_0_0_0_0 := v_0_0_0.Args[0]
19033 if v_0_0_0_0.Op != OpAdd32 {
19034 break
19035 }
19036 _ = v_0_0_0_0.Args[1]
19037 mul := v_0_0_0_0.Args[0]
19038 if mul.Op != OpHmul32 {
19039 break
19040 }
19041 _ = mul.Args[1]
19042 if x != mul.Args[0] {
19043 break
19044 }
19045 mul_1 := mul.Args[1]
19046 if mul_1.Op != OpConst32 {
19047 break
19048 }
19049 m := mul_1.AuxInt
19050 if x != v_0_0_0_0.Args[1] {
19051 break
19052 }
19053 v_0_0_0_1 := v_0_0_0.Args[1]
19054 if v_0_0_0_1.Op != OpConst64 {
19055 break
19056 }
19057 s := v_0_0_0_1.AuxInt
19058 v_0_0_1 := v_0_0.Args[1]
19059 if v_0_0_1.Op != OpRsh32x64 {
19060 break
19061 }
19062 _ = v_0_0_1.Args[1]
19063 if x != v_0_0_1.Args[0] {
19064 break
19065 }
19066 v_0_0_1_1 := v_0_0_1.Args[1]
19067 if v_0_0_1_1.Op != OpConst64 {
19068 break
19069 }
19070 if v_0_0_1_1.AuxInt != 31 {
19071 break
19072 }
19073 v_0_1 := v_0.Args[1]
19074 if v_0_1.Op != OpConst32 {
19075 break
19076 }
19077 c := v_0_1.AuxInt
19078 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
19079 break
19080 }
19081 v.reset(OpLeq32U)
19082 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
19083 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
19084 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
19085 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19086 v3.AuxInt = int64(int32(sdivisible(32, c).m))
19087 v2.AddArg(v3)
19088 v2.AddArg(x)
19089 v1.AddArg(v2)
19090 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19091 v4.AuxInt = int64(int32(sdivisible(32, c).a))
19092 v1.AddArg(v4)
19093 v0.AddArg(v1)
19094 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19095 v5.AuxInt = int64(32 - sdivisible(32, c).k)
19096 v0.AddArg(v5)
19097 v.AddArg(v0)
19098 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19099 v6.AuxInt = int64(int32(sdivisible(32, c).max))
19100 v.AddArg(v6)
19101 return true
19102 }
19103
19104
19105
19106 for {
19107 x := v.Args[1]
19108 v_0 := v.Args[0]
19109 if v_0.Op != OpMul32 {
19110 break
19111 }
19112 _ = v_0.Args[1]
19113 v_0_0 := v_0.Args[0]
19114 if v_0_0.Op != OpSub32 {
19115 break
19116 }
19117 _ = v_0_0.Args[1]
19118 v_0_0_0 := v_0_0.Args[0]
19119 if v_0_0_0.Op != OpRsh32x64 {
19120 break
19121 }
19122 _ = v_0_0_0.Args[1]
19123 v_0_0_0_0 := v_0_0_0.Args[0]
19124 if v_0_0_0_0.Op != OpAdd32 {
19125 break
19126 }
19127 _ = v_0_0_0_0.Args[1]
19128 if x != v_0_0_0_0.Args[0] {
19129 break
19130 }
19131 mul := v_0_0_0_0.Args[1]
19132 if mul.Op != OpHmul32 {
19133 break
19134 }
19135 _ = mul.Args[1]
19136 mul_0 := mul.Args[0]
19137 if mul_0.Op != OpConst32 {
19138 break
19139 }
19140 m := mul_0.AuxInt
19141 if x != mul.Args[1] {
19142 break
19143 }
19144 v_0_0_0_1 := v_0_0_0.Args[1]
19145 if v_0_0_0_1.Op != OpConst64 {
19146 break
19147 }
19148 s := v_0_0_0_1.AuxInt
19149 v_0_0_1 := v_0_0.Args[1]
19150 if v_0_0_1.Op != OpRsh32x64 {
19151 break
19152 }
19153 _ = v_0_0_1.Args[1]
19154 if x != v_0_0_1.Args[0] {
19155 break
19156 }
19157 v_0_0_1_1 := v_0_0_1.Args[1]
19158 if v_0_0_1_1.Op != OpConst64 {
19159 break
19160 }
19161 if v_0_0_1_1.AuxInt != 31 {
19162 break
19163 }
19164 v_0_1 := v_0.Args[1]
19165 if v_0_1.Op != OpConst32 {
19166 break
19167 }
19168 c := v_0_1.AuxInt
19169 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
19170 break
19171 }
19172 v.reset(OpLeq32U)
19173 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
19174 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
19175 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
19176 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19177 v3.AuxInt = int64(int32(sdivisible(32, c).m))
19178 v2.AddArg(v3)
19179 v2.AddArg(x)
19180 v1.AddArg(v2)
19181 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19182 v4.AuxInt = int64(int32(sdivisible(32, c).a))
19183 v1.AddArg(v4)
19184 v0.AddArg(v1)
19185 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19186 v5.AuxInt = int64(32 - sdivisible(32, c).k)
19187 v0.AddArg(v5)
19188 v.AddArg(v0)
19189 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19190 v6.AuxInt = int64(int32(sdivisible(32, c).max))
19191 v.AddArg(v6)
19192 return true
19193 }
19194
19195
19196
19197 for {
19198 x := v.Args[1]
19199 v_0 := v.Args[0]
19200 if v_0.Op != OpMul32 {
19201 break
19202 }
19203 _ = v_0.Args[1]
19204 v_0_0 := v_0.Args[0]
19205 if v_0_0.Op != OpSub32 {
19206 break
19207 }
19208 _ = v_0_0.Args[1]
19209 v_0_0_0 := v_0_0.Args[0]
19210 if v_0_0_0.Op != OpRsh32x64 {
19211 break
19212 }
19213 _ = v_0_0_0.Args[1]
19214 v_0_0_0_0 := v_0_0_0.Args[0]
19215 if v_0_0_0_0.Op != OpAdd32 {
19216 break
19217 }
19218 _ = v_0_0_0_0.Args[1]
19219 if x != v_0_0_0_0.Args[0] {
19220 break
19221 }
19222 mul := v_0_0_0_0.Args[1]
19223 if mul.Op != OpHmul32 {
19224 break
19225 }
19226 _ = mul.Args[1]
19227 if x != mul.Args[0] {
19228 break
19229 }
19230 mul_1 := mul.Args[1]
19231 if mul_1.Op != OpConst32 {
19232 break
19233 }
19234 m := mul_1.AuxInt
19235 v_0_0_0_1 := v_0_0_0.Args[1]
19236 if v_0_0_0_1.Op != OpConst64 {
19237 break
19238 }
19239 s := v_0_0_0_1.AuxInt
19240 v_0_0_1 := v_0_0.Args[1]
19241 if v_0_0_1.Op != OpRsh32x64 {
19242 break
19243 }
19244 _ = v_0_0_1.Args[1]
19245 if x != v_0_0_1.Args[0] {
19246 break
19247 }
19248 v_0_0_1_1 := v_0_0_1.Args[1]
19249 if v_0_0_1_1.Op != OpConst64 {
19250 break
19251 }
19252 if v_0_0_1_1.AuxInt != 31 {
19253 break
19254 }
19255 v_0_1 := v_0.Args[1]
19256 if v_0_1.Op != OpConst32 {
19257 break
19258 }
19259 c := v_0_1.AuxInt
19260 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) {
19261 break
19262 }
19263 v.reset(OpLeq32U)
19264 v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32)
19265 v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32)
19266 v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32)
19267 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19268 v3.AuxInt = int64(int32(sdivisible(32, c).m))
19269 v2.AddArg(v3)
19270 v2.AddArg(x)
19271 v1.AddArg(v2)
19272 v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19273 v4.AuxInt = int64(int32(sdivisible(32, c).a))
19274 v1.AddArg(v4)
19275 v0.AddArg(v1)
19276 v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19277 v5.AuxInt = int64(32 - sdivisible(32, c).k)
19278 v0.AddArg(v5)
19279 v.AddArg(v0)
19280 v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
19281 v6.AuxInt = int64(int32(sdivisible(32, c).max))
19282 v.AddArg(v6)
19283 return true
19284 }
19285
19286
19287
19288 for {
19289 _ = v.Args[1]
19290 n := v.Args[0]
19291 v_1 := v.Args[1]
19292 if v_1.Op != OpLsh32x64 {
19293 break
19294 }
19295 _ = v_1.Args[1]
19296 v_1_0 := v_1.Args[0]
19297 if v_1_0.Op != OpRsh32x64 {
19298 break
19299 }
19300 _ = v_1_0.Args[1]
19301 v_1_0_0 := v_1_0.Args[0]
19302 if v_1_0_0.Op != OpAdd32 {
19303 break
19304 }
19305 t := v_1_0_0.Type
19306 _ = v_1_0_0.Args[1]
19307 if n != v_1_0_0.Args[0] {
19308 break
19309 }
19310 v_1_0_0_1 := v_1_0_0.Args[1]
19311 if v_1_0_0_1.Op != OpRsh32Ux64 {
19312 break
19313 }
19314 if v_1_0_0_1.Type != t {
19315 break
19316 }
19317 _ = v_1_0_0_1.Args[1]
19318 v_1_0_0_1_0 := v_1_0_0_1.Args[0]
19319 if v_1_0_0_1_0.Op != OpRsh32x64 {
19320 break
19321 }
19322 if v_1_0_0_1_0.Type != t {
19323 break
19324 }
19325 _ = v_1_0_0_1_0.Args[1]
19326 if n != v_1_0_0_1_0.Args[0] {
19327 break
19328 }
19329 v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1]
19330 if v_1_0_0_1_0_1.Op != OpConst64 {
19331 break
19332 }
19333 if v_1_0_0_1_0_1.Type != typ.UInt64 {
19334 break
19335 }
19336 if v_1_0_0_1_0_1.AuxInt != 31 {
19337 break
19338 }
19339 v_1_0_0_1_1 := v_1_0_0_1.Args[1]
19340 if v_1_0_0_1_1.Op != OpConst64 {
19341 break
19342 }
19343 if v_1_0_0_1_1.Type != typ.UInt64 {
19344 break
19345 }
19346 kbar := v_1_0_0_1_1.AuxInt
19347 v_1_0_1 := v_1_0.Args[1]
19348 if v_1_0_1.Op != OpConst64 {
19349 break
19350 }
19351 if v_1_0_1.Type != typ.UInt64 {
19352 break
19353 }
19354 k := v_1_0_1.AuxInt
19355 v_1_1 := v_1.Args[1]
19356 if v_1_1.Op != OpConst64 {
19357 break
19358 }
19359 if v_1_1.Type != typ.UInt64 {
19360 break
19361 }
19362 if v_1_1.AuxInt != k {
19363 break
19364 }
19365 if !(k > 0 && k < 31 && kbar == 32-k) {
19366 break
19367 }
19368 v.reset(OpEq32)
19369 v0 := b.NewValue0(v.Pos, OpAnd32, t)
19370 v0.AddArg(n)
19371 v1 := b.NewValue0(v.Pos, OpConst32, t)
19372 v1.AuxInt = int64(1<<uint(k) - 1)
19373 v0.AddArg(v1)
19374 v.AddArg(v0)
19375 v2 := b.NewValue0(v.Pos, OpConst32, t)
19376 v2.AuxInt = 0
19377 v.AddArg(v2)
19378 return true
19379 }
19380
19381
19382
19383 for {
19384 _ = v.Args[1]
19385 n := v.Args[0]
19386 v_1 := v.Args[1]
19387 if v_1.Op != OpLsh32x64 {
19388 break
19389 }
19390 _ = v_1.Args[1]
19391 v_1_0 := v_1.Args[0]
19392 if v_1_0.Op != OpRsh32x64 {
19393 break
19394 }
19395 _ = v_1_0.Args[1]
19396 v_1_0_0 := v_1_0.Args[0]
19397 if v_1_0_0.Op != OpAdd32 {
19398 break
19399 }
19400 t := v_1_0_0.Type
19401 _ = v_1_0_0.Args[1]
19402 v_1_0_0_0 := v_1_0_0.Args[0]
19403 if v_1_0_0_0.Op != OpRsh32Ux64 {
19404 break
19405 }
19406 if v_1_0_0_0.Type != t {
19407 break
19408 }
19409 _ = v_1_0_0_0.Args[1]
19410 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
19411 if v_1_0_0_0_0.Op != OpRsh32x64 {
19412 break
19413 }
19414 if v_1_0_0_0_0.Type != t {
19415 break
19416 }
19417 _ = v_1_0_0_0_0.Args[1]
19418 if n != v_1_0_0_0_0.Args[0] {
19419 break
19420 }
19421 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
19422 if v_1_0_0_0_0_1.Op != OpConst64 {
19423 break
19424 }
19425 if v_1_0_0_0_0_1.Type != typ.UInt64 {
19426 break
19427 }
19428 if v_1_0_0_0_0_1.AuxInt != 31 {
19429 break
19430 }
19431 v_1_0_0_0_1 := v_1_0_0_0.Args[1]
19432 if v_1_0_0_0_1.Op != OpConst64 {
19433 break
19434 }
19435 if v_1_0_0_0_1.Type != typ.UInt64 {
19436 break
19437 }
19438 kbar := v_1_0_0_0_1.AuxInt
19439 if n != v_1_0_0.Args[1] {
19440 break
19441 }
19442 v_1_0_1 := v_1_0.Args[1]
19443 if v_1_0_1.Op != OpConst64 {
19444 break
19445 }
19446 if v_1_0_1.Type != typ.UInt64 {
19447 break
19448 }
19449 k := v_1_0_1.AuxInt
19450 v_1_1 := v_1.Args[1]
19451 if v_1_1.Op != OpConst64 {
19452 break
19453 }
19454 if v_1_1.Type != typ.UInt64 {
19455 break
19456 }
19457 if v_1_1.AuxInt != k {
19458 break
19459 }
19460 if !(k > 0 && k < 31 && kbar == 32-k) {
19461 break
19462 }
19463 v.reset(OpEq32)
19464 v0 := b.NewValue0(v.Pos, OpAnd32, t)
19465 v0.AddArg(n)
19466 v1 := b.NewValue0(v.Pos, OpConst32, t)
19467 v1.AuxInt = int64(1<<uint(k) - 1)
19468 v0.AddArg(v1)
19469 v.AddArg(v0)
19470 v2 := b.NewValue0(v.Pos, OpConst32, t)
19471 v2.AuxInt = 0
19472 v.AddArg(v2)
19473 return true
19474 }
19475
19476
19477
19478 for {
19479 n := v.Args[1]
19480 v_0 := v.Args[0]
19481 if v_0.Op != OpLsh32x64 {
19482 break
19483 }
19484 _ = v_0.Args[1]
19485 v_0_0 := v_0.Args[0]
19486 if v_0_0.Op != OpRsh32x64 {
19487 break
19488 }
19489 _ = v_0_0.Args[1]
19490 v_0_0_0 := v_0_0.Args[0]
19491 if v_0_0_0.Op != OpAdd32 {
19492 break
19493 }
19494 t := v_0_0_0.Type
19495 _ = v_0_0_0.Args[1]
19496 if n != v_0_0_0.Args[0] {
19497 break
19498 }
19499 v_0_0_0_1 := v_0_0_0.Args[1]
19500 if v_0_0_0_1.Op != OpRsh32Ux64 {
19501 break
19502 }
19503 if v_0_0_0_1.Type != t {
19504 break
19505 }
19506 _ = v_0_0_0_1.Args[1]
19507 v_0_0_0_1_0 := v_0_0_0_1.Args[0]
19508 if v_0_0_0_1_0.Op != OpRsh32x64 {
19509 break
19510 }
19511 if v_0_0_0_1_0.Type != t {
19512 break
19513 }
19514 _ = v_0_0_0_1_0.Args[1]
19515 if n != v_0_0_0_1_0.Args[0] {
19516 break
19517 }
19518 v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1]
19519 if v_0_0_0_1_0_1.Op != OpConst64 {
19520 break
19521 }
19522 if v_0_0_0_1_0_1.Type != typ.UInt64 {
19523 break
19524 }
19525 if v_0_0_0_1_0_1.AuxInt != 31 {
19526 break
19527 }
19528 v_0_0_0_1_1 := v_0_0_0_1.Args[1]
19529 if v_0_0_0_1_1.Op != OpConst64 {
19530 break
19531 }
19532 if v_0_0_0_1_1.Type != typ.UInt64 {
19533 break
19534 }
19535 kbar := v_0_0_0_1_1.AuxInt
19536 v_0_0_1 := v_0_0.Args[1]
19537 if v_0_0_1.Op != OpConst64 {
19538 break
19539 }
19540 if v_0_0_1.Type != typ.UInt64 {
19541 break
19542 }
19543 k := v_0_0_1.AuxInt
19544 v_0_1 := v_0.Args[1]
19545 if v_0_1.Op != OpConst64 {
19546 break
19547 }
19548 if v_0_1.Type != typ.UInt64 {
19549 break
19550 }
19551 if v_0_1.AuxInt != k {
19552 break
19553 }
19554 if !(k > 0 && k < 31 && kbar == 32-k) {
19555 break
19556 }
19557 v.reset(OpEq32)
19558 v0 := b.NewValue0(v.Pos, OpAnd32, t)
19559 v0.AddArg(n)
19560 v1 := b.NewValue0(v.Pos, OpConst32, t)
19561 v1.AuxInt = int64(1<<uint(k) - 1)
19562 v0.AddArg(v1)
19563 v.AddArg(v0)
19564 v2 := b.NewValue0(v.Pos, OpConst32, t)
19565 v2.AuxInt = 0
19566 v.AddArg(v2)
19567 return true
19568 }
19569 return false
19570 }
19571 func rewriteValuegeneric_OpEq32_90(v *Value) bool {
19572 b := v.Block
19573 typ := &b.Func.Config.Types
19574
19575
19576
19577 for {
19578 n := v.Args[1]
19579 v_0 := v.Args[0]
19580 if v_0.Op != OpLsh32x64 {
19581 break
19582 }
19583 _ = v_0.Args[1]
19584 v_0_0 := v_0.Args[0]
19585 if v_0_0.Op != OpRsh32x64 {
19586 break
19587 }
19588 _ = v_0_0.Args[1]
19589 v_0_0_0 := v_0_0.Args[0]
19590 if v_0_0_0.Op != OpAdd32 {
19591 break
19592 }
19593 t := v_0_0_0.Type
19594 _ = v_0_0_0.Args[1]
19595 v_0_0_0_0 := v_0_0_0.Args[0]
19596 if v_0_0_0_0.Op != OpRsh32Ux64 {
19597 break
19598 }
19599 if v_0_0_0_0.Type != t {
19600 break
19601 }
19602 _ = v_0_0_0_0.Args[1]
19603 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
19604 if v_0_0_0_0_0.Op != OpRsh32x64 {
19605 break
19606 }
19607 if v_0_0_0_0_0.Type != t {
19608 break
19609 }
19610 _ = v_0_0_0_0_0.Args[1]
19611 if n != v_0_0_0_0_0.Args[0] {
19612 break
19613 }
19614 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
19615 if v_0_0_0_0_0_1.Op != OpConst64 {
19616 break
19617 }
19618 if v_0_0_0_0_0_1.Type != typ.UInt64 {
19619 break
19620 }
19621 if v_0_0_0_0_0_1.AuxInt != 31 {
19622 break
19623 }
19624 v_0_0_0_0_1 := v_0_0_0_0.Args[1]
19625 if v_0_0_0_0_1.Op != OpConst64 {
19626 break
19627 }
19628 if v_0_0_0_0_1.Type != typ.UInt64 {
19629 break
19630 }
19631 kbar := v_0_0_0_0_1.AuxInt
19632 if n != v_0_0_0.Args[1] {
19633 break
19634 }
19635 v_0_0_1 := v_0_0.Args[1]
19636 if v_0_0_1.Op != OpConst64 {
19637 break
19638 }
19639 if v_0_0_1.Type != typ.UInt64 {
19640 break
19641 }
19642 k := v_0_0_1.AuxInt
19643 v_0_1 := v_0.Args[1]
19644 if v_0_1.Op != OpConst64 {
19645 break
19646 }
19647 if v_0_1.Type != typ.UInt64 {
19648 break
19649 }
19650 if v_0_1.AuxInt != k {
19651 break
19652 }
19653 if !(k > 0 && k < 31 && kbar == 32-k) {
19654 break
19655 }
19656 v.reset(OpEq32)
19657 v0 := b.NewValue0(v.Pos, OpAnd32, t)
19658 v0.AddArg(n)
19659 v1 := b.NewValue0(v.Pos, OpConst32, t)
19660 v1.AuxInt = int64(1<<uint(k) - 1)
19661 v0.AddArg(v1)
19662 v.AddArg(v0)
19663 v2 := b.NewValue0(v.Pos, OpConst32, t)
19664 v2.AuxInt = 0
19665 v.AddArg(v2)
19666 return true
19667 }
19668
19669
19670
19671 for {
19672 _ = v.Args[1]
19673 s := v.Args[0]
19674 if s.Op != OpSub32 {
19675 break
19676 }
19677 y := s.Args[1]
19678 x := s.Args[0]
19679 v_1 := v.Args[1]
19680 if v_1.Op != OpConst32 {
19681 break
19682 }
19683 if v_1.AuxInt != 0 {
19684 break
19685 }
19686 if !(s.Uses == 1) {
19687 break
19688 }
19689 v.reset(OpEq32)
19690 v.AddArg(x)
19691 v.AddArg(y)
19692 return true
19693 }
19694
19695
19696
19697 for {
19698 _ = v.Args[1]
19699 v_0 := v.Args[0]
19700 if v_0.Op != OpConst32 {
19701 break
19702 }
19703 if v_0.AuxInt != 0 {
19704 break
19705 }
19706 s := v.Args[1]
19707 if s.Op != OpSub32 {
19708 break
19709 }
19710 y := s.Args[1]
19711 x := s.Args[0]
19712 if !(s.Uses == 1) {
19713 break
19714 }
19715 v.reset(OpEq32)
19716 v.AddArg(x)
19717 v.AddArg(y)
19718 return true
19719 }
19720 return false
19721 }
19722 func rewriteValuegeneric_OpEq32F_0(v *Value) bool {
19723
19724
19725
19726 for {
19727 _ = v.Args[1]
19728 v_0 := v.Args[0]
19729 if v_0.Op != OpConst32F {
19730 break
19731 }
19732 c := v_0.AuxInt
19733 v_1 := v.Args[1]
19734 if v_1.Op != OpConst32F {
19735 break
19736 }
19737 d := v_1.AuxInt
19738 v.reset(OpConstBool)
19739 v.AuxInt = b2i(auxTo32F(c) == auxTo32F(d))
19740 return true
19741 }
19742
19743
19744
19745 for {
19746 _ = v.Args[1]
19747 v_0 := v.Args[0]
19748 if v_0.Op != OpConst32F {
19749 break
19750 }
19751 d := v_0.AuxInt
19752 v_1 := v.Args[1]
19753 if v_1.Op != OpConst32F {
19754 break
19755 }
19756 c := v_1.AuxInt
19757 v.reset(OpConstBool)
19758 v.AuxInt = b2i(auxTo32F(c) == auxTo32F(d))
19759 return true
19760 }
19761 return false
19762 }
19763 func rewriteValuegeneric_OpEq64_0(v *Value) bool {
19764 b := v.Block
19765 typ := &b.Func.Config.Types
19766
19767
19768
19769 for {
19770 x := v.Args[1]
19771 if x != v.Args[0] {
19772 break
19773 }
19774 v.reset(OpConstBool)
19775 v.AuxInt = 1
19776 return true
19777 }
19778
19779
19780
19781 for {
19782 _ = v.Args[1]
19783 v_0 := v.Args[0]
19784 if v_0.Op != OpConst64 {
19785 break
19786 }
19787 t := v_0.Type
19788 c := v_0.AuxInt
19789 v_1 := v.Args[1]
19790 if v_1.Op != OpAdd64 {
19791 break
19792 }
19793 x := v_1.Args[1]
19794 v_1_0 := v_1.Args[0]
19795 if v_1_0.Op != OpConst64 {
19796 break
19797 }
19798 if v_1_0.Type != t {
19799 break
19800 }
19801 d := v_1_0.AuxInt
19802 v.reset(OpEq64)
19803 v0 := b.NewValue0(v.Pos, OpConst64, t)
19804 v0.AuxInt = c - d
19805 v.AddArg(v0)
19806 v.AddArg(x)
19807 return true
19808 }
19809
19810
19811
19812 for {
19813 _ = v.Args[1]
19814 v_0 := v.Args[0]
19815 if v_0.Op != OpConst64 {
19816 break
19817 }
19818 t := v_0.Type
19819 c := v_0.AuxInt
19820 v_1 := v.Args[1]
19821 if v_1.Op != OpAdd64 {
19822 break
19823 }
19824 _ = v_1.Args[1]
19825 x := v_1.Args[0]
19826 v_1_1 := v_1.Args[1]
19827 if v_1_1.Op != OpConst64 {
19828 break
19829 }
19830 if v_1_1.Type != t {
19831 break
19832 }
19833 d := v_1_1.AuxInt
19834 v.reset(OpEq64)
19835 v0 := b.NewValue0(v.Pos, OpConst64, t)
19836 v0.AuxInt = c - d
19837 v.AddArg(v0)
19838 v.AddArg(x)
19839 return true
19840 }
19841
19842
19843
19844 for {
19845 _ = v.Args[1]
19846 v_0 := v.Args[0]
19847 if v_0.Op != OpAdd64 {
19848 break
19849 }
19850 x := v_0.Args[1]
19851 v_0_0 := v_0.Args[0]
19852 if v_0_0.Op != OpConst64 {
19853 break
19854 }
19855 t := v_0_0.Type
19856 d := v_0_0.AuxInt
19857 v_1 := v.Args[1]
19858 if v_1.Op != OpConst64 {
19859 break
19860 }
19861 if v_1.Type != t {
19862 break
19863 }
19864 c := v_1.AuxInt
19865 v.reset(OpEq64)
19866 v0 := b.NewValue0(v.Pos, OpConst64, t)
19867 v0.AuxInt = c - d
19868 v.AddArg(v0)
19869 v.AddArg(x)
19870 return true
19871 }
19872
19873
19874
19875 for {
19876 _ = v.Args[1]
19877 v_0 := v.Args[0]
19878 if v_0.Op != OpAdd64 {
19879 break
19880 }
19881 _ = v_0.Args[1]
19882 x := v_0.Args[0]
19883 v_0_1 := v_0.Args[1]
19884 if v_0_1.Op != OpConst64 {
19885 break
19886 }
19887 t := v_0_1.Type
19888 d := v_0_1.AuxInt
19889 v_1 := v.Args[1]
19890 if v_1.Op != OpConst64 {
19891 break
19892 }
19893 if v_1.Type != t {
19894 break
19895 }
19896 c := v_1.AuxInt
19897 v.reset(OpEq64)
19898 v0 := b.NewValue0(v.Pos, OpConst64, t)
19899 v0.AuxInt = c - d
19900 v.AddArg(v0)
19901 v.AddArg(x)
19902 return true
19903 }
19904
19905
19906
19907 for {
19908 _ = v.Args[1]
19909 v_0 := v.Args[0]
19910 if v_0.Op != OpConst64 {
19911 break
19912 }
19913 c := v_0.AuxInt
19914 v_1 := v.Args[1]
19915 if v_1.Op != OpConst64 {
19916 break
19917 }
19918 d := v_1.AuxInt
19919 v.reset(OpConstBool)
19920 v.AuxInt = b2i(c == d)
19921 return true
19922 }
19923
19924
19925
19926 for {
19927 _ = v.Args[1]
19928 v_0 := v.Args[0]
19929 if v_0.Op != OpConst64 {
19930 break
19931 }
19932 d := v_0.AuxInt
19933 v_1 := v.Args[1]
19934 if v_1.Op != OpConst64 {
19935 break
19936 }
19937 c := v_1.AuxInt
19938 v.reset(OpConstBool)
19939 v.AuxInt = b2i(c == d)
19940 return true
19941 }
19942
19943
19944
19945 for {
19946 _ = v.Args[1]
19947 x := v.Args[0]
19948 v_1 := v.Args[1]
19949 if v_1.Op != OpMul64 {
19950 break
19951 }
19952 _ = v_1.Args[1]
19953 v_1_0 := v_1.Args[0]
19954 if v_1_0.Op != OpConst64 {
19955 break
19956 }
19957 c := v_1_0.AuxInt
19958 v_1_1 := v_1.Args[1]
19959 if v_1_1.Op != OpRsh64Ux64 {
19960 break
19961 }
19962 _ = v_1_1.Args[1]
19963 mul := v_1_1.Args[0]
19964 if mul.Op != OpHmul64u {
19965 break
19966 }
19967 _ = mul.Args[1]
19968 mul_0 := mul.Args[0]
19969 if mul_0.Op != OpConst64 {
19970 break
19971 }
19972 m := mul_0.AuxInt
19973 if x != mul.Args[1] {
19974 break
19975 }
19976 v_1_1_1 := v_1_1.Args[1]
19977 if v_1_1_1.Op != OpConst64 {
19978 break
19979 }
19980 s := v_1_1_1.AuxInt
19981 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
19982 break
19983 }
19984 v.reset(OpLeq64U)
19985 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
19986 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
19987 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
19988 v2.AuxInt = int64(udivisible(64, c).m)
19989 v1.AddArg(v2)
19990 v1.AddArg(x)
19991 v0.AddArg(v1)
19992 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
19993 v3.AuxInt = int64(64 - udivisible(64, c).k)
19994 v0.AddArg(v3)
19995 v.AddArg(v0)
19996 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
19997 v4.AuxInt = int64(udivisible(64, c).max)
19998 v.AddArg(v4)
19999 return true
20000 }
20001
20002
20003
20004 for {
20005 _ = v.Args[1]
20006 x := v.Args[0]
20007 v_1 := v.Args[1]
20008 if v_1.Op != OpMul64 {
20009 break
20010 }
20011 _ = v_1.Args[1]
20012 v_1_0 := v_1.Args[0]
20013 if v_1_0.Op != OpConst64 {
20014 break
20015 }
20016 c := v_1_0.AuxInt
20017 v_1_1 := v_1.Args[1]
20018 if v_1_1.Op != OpRsh64Ux64 {
20019 break
20020 }
20021 _ = v_1_1.Args[1]
20022 mul := v_1_1.Args[0]
20023 if mul.Op != OpHmul64u {
20024 break
20025 }
20026 _ = mul.Args[1]
20027 if x != mul.Args[0] {
20028 break
20029 }
20030 mul_1 := mul.Args[1]
20031 if mul_1.Op != OpConst64 {
20032 break
20033 }
20034 m := mul_1.AuxInt
20035 v_1_1_1 := v_1_1.Args[1]
20036 if v_1_1_1.Op != OpConst64 {
20037 break
20038 }
20039 s := v_1_1_1.AuxInt
20040 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20041 break
20042 }
20043 v.reset(OpLeq64U)
20044 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20045 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20046 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20047 v2.AuxInt = int64(udivisible(64, c).m)
20048 v1.AddArg(v2)
20049 v1.AddArg(x)
20050 v0.AddArg(v1)
20051 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20052 v3.AuxInt = int64(64 - udivisible(64, c).k)
20053 v0.AddArg(v3)
20054 v.AddArg(v0)
20055 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20056 v4.AuxInt = int64(udivisible(64, c).max)
20057 v.AddArg(v4)
20058 return true
20059 }
20060
20061
20062
20063 for {
20064 _ = v.Args[1]
20065 x := v.Args[0]
20066 v_1 := v.Args[1]
20067 if v_1.Op != OpMul64 {
20068 break
20069 }
20070 _ = v_1.Args[1]
20071 v_1_0 := v_1.Args[0]
20072 if v_1_0.Op != OpRsh64Ux64 {
20073 break
20074 }
20075 _ = v_1_0.Args[1]
20076 mul := v_1_0.Args[0]
20077 if mul.Op != OpHmul64u {
20078 break
20079 }
20080 _ = mul.Args[1]
20081 mul_0 := mul.Args[0]
20082 if mul_0.Op != OpConst64 {
20083 break
20084 }
20085 m := mul_0.AuxInt
20086 if x != mul.Args[1] {
20087 break
20088 }
20089 v_1_0_1 := v_1_0.Args[1]
20090 if v_1_0_1.Op != OpConst64 {
20091 break
20092 }
20093 s := v_1_0_1.AuxInt
20094 v_1_1 := v_1.Args[1]
20095 if v_1_1.Op != OpConst64 {
20096 break
20097 }
20098 c := v_1_1.AuxInt
20099 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20100 break
20101 }
20102 v.reset(OpLeq64U)
20103 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20104 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20105 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20106 v2.AuxInt = int64(udivisible(64, c).m)
20107 v1.AddArg(v2)
20108 v1.AddArg(x)
20109 v0.AddArg(v1)
20110 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20111 v3.AuxInt = int64(64 - udivisible(64, c).k)
20112 v0.AddArg(v3)
20113 v.AddArg(v0)
20114 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20115 v4.AuxInt = int64(udivisible(64, c).max)
20116 v.AddArg(v4)
20117 return true
20118 }
20119 return false
20120 }
20121 func rewriteValuegeneric_OpEq64_10(v *Value) bool {
20122 b := v.Block
20123 typ := &b.Func.Config.Types
20124
20125
20126
20127 for {
20128 _ = v.Args[1]
20129 x := v.Args[0]
20130 v_1 := v.Args[1]
20131 if v_1.Op != OpMul64 {
20132 break
20133 }
20134 _ = v_1.Args[1]
20135 v_1_0 := v_1.Args[0]
20136 if v_1_0.Op != OpRsh64Ux64 {
20137 break
20138 }
20139 _ = v_1_0.Args[1]
20140 mul := v_1_0.Args[0]
20141 if mul.Op != OpHmul64u {
20142 break
20143 }
20144 _ = mul.Args[1]
20145 if x != mul.Args[0] {
20146 break
20147 }
20148 mul_1 := mul.Args[1]
20149 if mul_1.Op != OpConst64 {
20150 break
20151 }
20152 m := mul_1.AuxInt
20153 v_1_0_1 := v_1_0.Args[1]
20154 if v_1_0_1.Op != OpConst64 {
20155 break
20156 }
20157 s := v_1_0_1.AuxInt
20158 v_1_1 := v_1.Args[1]
20159 if v_1_1.Op != OpConst64 {
20160 break
20161 }
20162 c := v_1_1.AuxInt
20163 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20164 break
20165 }
20166 v.reset(OpLeq64U)
20167 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20168 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20169 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20170 v2.AuxInt = int64(udivisible(64, c).m)
20171 v1.AddArg(v2)
20172 v1.AddArg(x)
20173 v0.AddArg(v1)
20174 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20175 v3.AuxInt = int64(64 - udivisible(64, c).k)
20176 v0.AddArg(v3)
20177 v.AddArg(v0)
20178 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20179 v4.AuxInt = int64(udivisible(64, c).max)
20180 v.AddArg(v4)
20181 return true
20182 }
20183
20184
20185
20186 for {
20187 x := v.Args[1]
20188 v_0 := v.Args[0]
20189 if v_0.Op != OpMul64 {
20190 break
20191 }
20192 _ = v_0.Args[1]
20193 v_0_0 := v_0.Args[0]
20194 if v_0_0.Op != OpConst64 {
20195 break
20196 }
20197 c := v_0_0.AuxInt
20198 v_0_1 := v_0.Args[1]
20199 if v_0_1.Op != OpRsh64Ux64 {
20200 break
20201 }
20202 _ = v_0_1.Args[1]
20203 mul := v_0_1.Args[0]
20204 if mul.Op != OpHmul64u {
20205 break
20206 }
20207 _ = mul.Args[1]
20208 mul_0 := mul.Args[0]
20209 if mul_0.Op != OpConst64 {
20210 break
20211 }
20212 m := mul_0.AuxInt
20213 if x != mul.Args[1] {
20214 break
20215 }
20216 v_0_1_1 := v_0_1.Args[1]
20217 if v_0_1_1.Op != OpConst64 {
20218 break
20219 }
20220 s := v_0_1_1.AuxInt
20221 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20222 break
20223 }
20224 v.reset(OpLeq64U)
20225 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20226 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20227 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20228 v2.AuxInt = int64(udivisible(64, c).m)
20229 v1.AddArg(v2)
20230 v1.AddArg(x)
20231 v0.AddArg(v1)
20232 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20233 v3.AuxInt = int64(64 - udivisible(64, c).k)
20234 v0.AddArg(v3)
20235 v.AddArg(v0)
20236 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20237 v4.AuxInt = int64(udivisible(64, c).max)
20238 v.AddArg(v4)
20239 return true
20240 }
20241
20242
20243
20244 for {
20245 x := v.Args[1]
20246 v_0 := v.Args[0]
20247 if v_0.Op != OpMul64 {
20248 break
20249 }
20250 _ = v_0.Args[1]
20251 v_0_0 := v_0.Args[0]
20252 if v_0_0.Op != OpConst64 {
20253 break
20254 }
20255 c := v_0_0.AuxInt
20256 v_0_1 := v_0.Args[1]
20257 if v_0_1.Op != OpRsh64Ux64 {
20258 break
20259 }
20260 _ = v_0_1.Args[1]
20261 mul := v_0_1.Args[0]
20262 if mul.Op != OpHmul64u {
20263 break
20264 }
20265 _ = mul.Args[1]
20266 if x != mul.Args[0] {
20267 break
20268 }
20269 mul_1 := mul.Args[1]
20270 if mul_1.Op != OpConst64 {
20271 break
20272 }
20273 m := mul_1.AuxInt
20274 v_0_1_1 := v_0_1.Args[1]
20275 if v_0_1_1.Op != OpConst64 {
20276 break
20277 }
20278 s := v_0_1_1.AuxInt
20279 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20280 break
20281 }
20282 v.reset(OpLeq64U)
20283 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20284 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20285 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20286 v2.AuxInt = int64(udivisible(64, c).m)
20287 v1.AddArg(v2)
20288 v1.AddArg(x)
20289 v0.AddArg(v1)
20290 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20291 v3.AuxInt = int64(64 - udivisible(64, c).k)
20292 v0.AddArg(v3)
20293 v.AddArg(v0)
20294 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20295 v4.AuxInt = int64(udivisible(64, c).max)
20296 v.AddArg(v4)
20297 return true
20298 }
20299
20300
20301
20302 for {
20303 x := v.Args[1]
20304 v_0 := v.Args[0]
20305 if v_0.Op != OpMul64 {
20306 break
20307 }
20308 _ = v_0.Args[1]
20309 v_0_0 := v_0.Args[0]
20310 if v_0_0.Op != OpRsh64Ux64 {
20311 break
20312 }
20313 _ = v_0_0.Args[1]
20314 mul := v_0_0.Args[0]
20315 if mul.Op != OpHmul64u {
20316 break
20317 }
20318 _ = mul.Args[1]
20319 mul_0 := mul.Args[0]
20320 if mul_0.Op != OpConst64 {
20321 break
20322 }
20323 m := mul_0.AuxInt
20324 if x != mul.Args[1] {
20325 break
20326 }
20327 v_0_0_1 := v_0_0.Args[1]
20328 if v_0_0_1.Op != OpConst64 {
20329 break
20330 }
20331 s := v_0_0_1.AuxInt
20332 v_0_1 := v_0.Args[1]
20333 if v_0_1.Op != OpConst64 {
20334 break
20335 }
20336 c := v_0_1.AuxInt
20337 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20338 break
20339 }
20340 v.reset(OpLeq64U)
20341 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20342 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20343 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20344 v2.AuxInt = int64(udivisible(64, c).m)
20345 v1.AddArg(v2)
20346 v1.AddArg(x)
20347 v0.AddArg(v1)
20348 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20349 v3.AuxInt = int64(64 - udivisible(64, c).k)
20350 v0.AddArg(v3)
20351 v.AddArg(v0)
20352 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20353 v4.AuxInt = int64(udivisible(64, c).max)
20354 v.AddArg(v4)
20355 return true
20356 }
20357
20358
20359
20360 for {
20361 x := v.Args[1]
20362 v_0 := v.Args[0]
20363 if v_0.Op != OpMul64 {
20364 break
20365 }
20366 _ = v_0.Args[1]
20367 v_0_0 := v_0.Args[0]
20368 if v_0_0.Op != OpRsh64Ux64 {
20369 break
20370 }
20371 _ = v_0_0.Args[1]
20372 mul := v_0_0.Args[0]
20373 if mul.Op != OpHmul64u {
20374 break
20375 }
20376 _ = mul.Args[1]
20377 if x != mul.Args[0] {
20378 break
20379 }
20380 mul_1 := mul.Args[1]
20381 if mul_1.Op != OpConst64 {
20382 break
20383 }
20384 m := mul_1.AuxInt
20385 v_0_0_1 := v_0_0.Args[1]
20386 if v_0_0_1.Op != OpConst64 {
20387 break
20388 }
20389 s := v_0_0_1.AuxInt
20390 v_0_1 := v_0.Args[1]
20391 if v_0_1.Op != OpConst64 {
20392 break
20393 }
20394 c := v_0_1.AuxInt
20395 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20396 break
20397 }
20398 v.reset(OpLeq64U)
20399 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20400 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20401 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20402 v2.AuxInt = int64(udivisible(64, c).m)
20403 v1.AddArg(v2)
20404 v1.AddArg(x)
20405 v0.AddArg(v1)
20406 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20407 v3.AuxInt = int64(64 - udivisible(64, c).k)
20408 v0.AddArg(v3)
20409 v.AddArg(v0)
20410 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20411 v4.AuxInt = int64(udivisible(64, c).max)
20412 v.AddArg(v4)
20413 return true
20414 }
20415
20416
20417
20418 for {
20419 _ = v.Args[1]
20420 x := v.Args[0]
20421 v_1 := v.Args[1]
20422 if v_1.Op != OpMul64 {
20423 break
20424 }
20425 _ = v_1.Args[1]
20426 v_1_0 := v_1.Args[0]
20427 if v_1_0.Op != OpConst64 {
20428 break
20429 }
20430 c := v_1_0.AuxInt
20431 v_1_1 := v_1.Args[1]
20432 if v_1_1.Op != OpRsh64Ux64 {
20433 break
20434 }
20435 _ = v_1_1.Args[1]
20436 mul := v_1_1.Args[0]
20437 if mul.Op != OpHmul64u {
20438 break
20439 }
20440 _ = mul.Args[1]
20441 mul_0 := mul.Args[0]
20442 if mul_0.Op != OpConst64 {
20443 break
20444 }
20445 m := mul_0.AuxInt
20446 mul_1 := mul.Args[1]
20447 if mul_1.Op != OpRsh64Ux64 {
20448 break
20449 }
20450 _ = mul_1.Args[1]
20451 if x != mul_1.Args[0] {
20452 break
20453 }
20454 mul_1_1 := mul_1.Args[1]
20455 if mul_1_1.Op != OpConst64 {
20456 break
20457 }
20458 if mul_1_1.AuxInt != 1 {
20459 break
20460 }
20461 v_1_1_1 := v_1_1.Args[1]
20462 if v_1_1_1.Op != OpConst64 {
20463 break
20464 }
20465 s := v_1_1_1.AuxInt
20466 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20467 break
20468 }
20469 v.reset(OpLeq64U)
20470 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20471 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20472 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20473 v2.AuxInt = int64(udivisible(64, c).m)
20474 v1.AddArg(v2)
20475 v1.AddArg(x)
20476 v0.AddArg(v1)
20477 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20478 v3.AuxInt = int64(64 - udivisible(64, c).k)
20479 v0.AddArg(v3)
20480 v.AddArg(v0)
20481 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20482 v4.AuxInt = int64(udivisible(64, c).max)
20483 v.AddArg(v4)
20484 return true
20485 }
20486
20487
20488
20489 for {
20490 _ = v.Args[1]
20491 x := v.Args[0]
20492 v_1 := v.Args[1]
20493 if v_1.Op != OpMul64 {
20494 break
20495 }
20496 _ = v_1.Args[1]
20497 v_1_0 := v_1.Args[0]
20498 if v_1_0.Op != OpConst64 {
20499 break
20500 }
20501 c := v_1_0.AuxInt
20502 v_1_1 := v_1.Args[1]
20503 if v_1_1.Op != OpRsh64Ux64 {
20504 break
20505 }
20506 _ = v_1_1.Args[1]
20507 mul := v_1_1.Args[0]
20508 if mul.Op != OpHmul64u {
20509 break
20510 }
20511 _ = mul.Args[1]
20512 mul_0 := mul.Args[0]
20513 if mul_0.Op != OpRsh64Ux64 {
20514 break
20515 }
20516 _ = mul_0.Args[1]
20517 if x != mul_0.Args[0] {
20518 break
20519 }
20520 mul_0_1 := mul_0.Args[1]
20521 if mul_0_1.Op != OpConst64 {
20522 break
20523 }
20524 if mul_0_1.AuxInt != 1 {
20525 break
20526 }
20527 mul_1 := mul.Args[1]
20528 if mul_1.Op != OpConst64 {
20529 break
20530 }
20531 m := mul_1.AuxInt
20532 v_1_1_1 := v_1_1.Args[1]
20533 if v_1_1_1.Op != OpConst64 {
20534 break
20535 }
20536 s := v_1_1_1.AuxInt
20537 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20538 break
20539 }
20540 v.reset(OpLeq64U)
20541 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20542 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20543 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20544 v2.AuxInt = int64(udivisible(64, c).m)
20545 v1.AddArg(v2)
20546 v1.AddArg(x)
20547 v0.AddArg(v1)
20548 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20549 v3.AuxInt = int64(64 - udivisible(64, c).k)
20550 v0.AddArg(v3)
20551 v.AddArg(v0)
20552 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20553 v4.AuxInt = int64(udivisible(64, c).max)
20554 v.AddArg(v4)
20555 return true
20556 }
20557
20558
20559
20560 for {
20561 _ = v.Args[1]
20562 x := v.Args[0]
20563 v_1 := v.Args[1]
20564 if v_1.Op != OpMul64 {
20565 break
20566 }
20567 _ = v_1.Args[1]
20568 v_1_0 := v_1.Args[0]
20569 if v_1_0.Op != OpRsh64Ux64 {
20570 break
20571 }
20572 _ = v_1_0.Args[1]
20573 mul := v_1_0.Args[0]
20574 if mul.Op != OpHmul64u {
20575 break
20576 }
20577 _ = mul.Args[1]
20578 mul_0 := mul.Args[0]
20579 if mul_0.Op != OpConst64 {
20580 break
20581 }
20582 m := mul_0.AuxInt
20583 mul_1 := mul.Args[1]
20584 if mul_1.Op != OpRsh64Ux64 {
20585 break
20586 }
20587 _ = mul_1.Args[1]
20588 if x != mul_1.Args[0] {
20589 break
20590 }
20591 mul_1_1 := mul_1.Args[1]
20592 if mul_1_1.Op != OpConst64 {
20593 break
20594 }
20595 if mul_1_1.AuxInt != 1 {
20596 break
20597 }
20598 v_1_0_1 := v_1_0.Args[1]
20599 if v_1_0_1.Op != OpConst64 {
20600 break
20601 }
20602 s := v_1_0_1.AuxInt
20603 v_1_1 := v_1.Args[1]
20604 if v_1_1.Op != OpConst64 {
20605 break
20606 }
20607 c := v_1_1.AuxInt
20608 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20609 break
20610 }
20611 v.reset(OpLeq64U)
20612 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20613 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20614 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20615 v2.AuxInt = int64(udivisible(64, c).m)
20616 v1.AddArg(v2)
20617 v1.AddArg(x)
20618 v0.AddArg(v1)
20619 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20620 v3.AuxInt = int64(64 - udivisible(64, c).k)
20621 v0.AddArg(v3)
20622 v.AddArg(v0)
20623 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20624 v4.AuxInt = int64(udivisible(64, c).max)
20625 v.AddArg(v4)
20626 return true
20627 }
20628
20629
20630
20631 for {
20632 _ = v.Args[1]
20633 x := v.Args[0]
20634 v_1 := v.Args[1]
20635 if v_1.Op != OpMul64 {
20636 break
20637 }
20638 _ = v_1.Args[1]
20639 v_1_0 := v_1.Args[0]
20640 if v_1_0.Op != OpRsh64Ux64 {
20641 break
20642 }
20643 _ = v_1_0.Args[1]
20644 mul := v_1_0.Args[0]
20645 if mul.Op != OpHmul64u {
20646 break
20647 }
20648 _ = mul.Args[1]
20649 mul_0 := mul.Args[0]
20650 if mul_0.Op != OpRsh64Ux64 {
20651 break
20652 }
20653 _ = mul_0.Args[1]
20654 if x != mul_0.Args[0] {
20655 break
20656 }
20657 mul_0_1 := mul_0.Args[1]
20658 if mul_0_1.Op != OpConst64 {
20659 break
20660 }
20661 if mul_0_1.AuxInt != 1 {
20662 break
20663 }
20664 mul_1 := mul.Args[1]
20665 if mul_1.Op != OpConst64 {
20666 break
20667 }
20668 m := mul_1.AuxInt
20669 v_1_0_1 := v_1_0.Args[1]
20670 if v_1_0_1.Op != OpConst64 {
20671 break
20672 }
20673 s := v_1_0_1.AuxInt
20674 v_1_1 := v_1.Args[1]
20675 if v_1_1.Op != OpConst64 {
20676 break
20677 }
20678 c := v_1_1.AuxInt
20679 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20680 break
20681 }
20682 v.reset(OpLeq64U)
20683 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20684 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20685 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20686 v2.AuxInt = int64(udivisible(64, c).m)
20687 v1.AddArg(v2)
20688 v1.AddArg(x)
20689 v0.AddArg(v1)
20690 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20691 v3.AuxInt = int64(64 - udivisible(64, c).k)
20692 v0.AddArg(v3)
20693 v.AddArg(v0)
20694 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20695 v4.AuxInt = int64(udivisible(64, c).max)
20696 v.AddArg(v4)
20697 return true
20698 }
20699
20700
20701
20702 for {
20703 x := v.Args[1]
20704 v_0 := v.Args[0]
20705 if v_0.Op != OpMul64 {
20706 break
20707 }
20708 _ = v_0.Args[1]
20709 v_0_0 := v_0.Args[0]
20710 if v_0_0.Op != OpConst64 {
20711 break
20712 }
20713 c := v_0_0.AuxInt
20714 v_0_1 := v_0.Args[1]
20715 if v_0_1.Op != OpRsh64Ux64 {
20716 break
20717 }
20718 _ = v_0_1.Args[1]
20719 mul := v_0_1.Args[0]
20720 if mul.Op != OpHmul64u {
20721 break
20722 }
20723 _ = mul.Args[1]
20724 mul_0 := mul.Args[0]
20725 if mul_0.Op != OpConst64 {
20726 break
20727 }
20728 m := mul_0.AuxInt
20729 mul_1 := mul.Args[1]
20730 if mul_1.Op != OpRsh64Ux64 {
20731 break
20732 }
20733 _ = mul_1.Args[1]
20734 if x != mul_1.Args[0] {
20735 break
20736 }
20737 mul_1_1 := mul_1.Args[1]
20738 if mul_1_1.Op != OpConst64 {
20739 break
20740 }
20741 if mul_1_1.AuxInt != 1 {
20742 break
20743 }
20744 v_0_1_1 := v_0_1.Args[1]
20745 if v_0_1_1.Op != OpConst64 {
20746 break
20747 }
20748 s := v_0_1_1.AuxInt
20749 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20750 break
20751 }
20752 v.reset(OpLeq64U)
20753 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20754 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20755 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20756 v2.AuxInt = int64(udivisible(64, c).m)
20757 v1.AddArg(v2)
20758 v1.AddArg(x)
20759 v0.AddArg(v1)
20760 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20761 v3.AuxInt = int64(64 - udivisible(64, c).k)
20762 v0.AddArg(v3)
20763 v.AddArg(v0)
20764 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20765 v4.AuxInt = int64(udivisible(64, c).max)
20766 v.AddArg(v4)
20767 return true
20768 }
20769 return false
20770 }
20771 func rewriteValuegeneric_OpEq64_20(v *Value) bool {
20772 b := v.Block
20773 typ := &b.Func.Config.Types
20774
20775
20776
20777 for {
20778 x := v.Args[1]
20779 v_0 := v.Args[0]
20780 if v_0.Op != OpMul64 {
20781 break
20782 }
20783 _ = v_0.Args[1]
20784 v_0_0 := v_0.Args[0]
20785 if v_0_0.Op != OpConst64 {
20786 break
20787 }
20788 c := v_0_0.AuxInt
20789 v_0_1 := v_0.Args[1]
20790 if v_0_1.Op != OpRsh64Ux64 {
20791 break
20792 }
20793 _ = v_0_1.Args[1]
20794 mul := v_0_1.Args[0]
20795 if mul.Op != OpHmul64u {
20796 break
20797 }
20798 _ = mul.Args[1]
20799 mul_0 := mul.Args[0]
20800 if mul_0.Op != OpRsh64Ux64 {
20801 break
20802 }
20803 _ = mul_0.Args[1]
20804 if x != mul_0.Args[0] {
20805 break
20806 }
20807 mul_0_1 := mul_0.Args[1]
20808 if mul_0_1.Op != OpConst64 {
20809 break
20810 }
20811 if mul_0_1.AuxInt != 1 {
20812 break
20813 }
20814 mul_1 := mul.Args[1]
20815 if mul_1.Op != OpConst64 {
20816 break
20817 }
20818 m := mul_1.AuxInt
20819 v_0_1_1 := v_0_1.Args[1]
20820 if v_0_1_1.Op != OpConst64 {
20821 break
20822 }
20823 s := v_0_1_1.AuxInt
20824 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20825 break
20826 }
20827 v.reset(OpLeq64U)
20828 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20829 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20830 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20831 v2.AuxInt = int64(udivisible(64, c).m)
20832 v1.AddArg(v2)
20833 v1.AddArg(x)
20834 v0.AddArg(v1)
20835 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20836 v3.AuxInt = int64(64 - udivisible(64, c).k)
20837 v0.AddArg(v3)
20838 v.AddArg(v0)
20839 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20840 v4.AuxInt = int64(udivisible(64, c).max)
20841 v.AddArg(v4)
20842 return true
20843 }
20844
20845
20846
20847 for {
20848 x := v.Args[1]
20849 v_0 := v.Args[0]
20850 if v_0.Op != OpMul64 {
20851 break
20852 }
20853 _ = v_0.Args[1]
20854 v_0_0 := v_0.Args[0]
20855 if v_0_0.Op != OpRsh64Ux64 {
20856 break
20857 }
20858 _ = v_0_0.Args[1]
20859 mul := v_0_0.Args[0]
20860 if mul.Op != OpHmul64u {
20861 break
20862 }
20863 _ = mul.Args[1]
20864 mul_0 := mul.Args[0]
20865 if mul_0.Op != OpConst64 {
20866 break
20867 }
20868 m := mul_0.AuxInt
20869 mul_1 := mul.Args[1]
20870 if mul_1.Op != OpRsh64Ux64 {
20871 break
20872 }
20873 _ = mul_1.Args[1]
20874 if x != mul_1.Args[0] {
20875 break
20876 }
20877 mul_1_1 := mul_1.Args[1]
20878 if mul_1_1.Op != OpConst64 {
20879 break
20880 }
20881 if mul_1_1.AuxInt != 1 {
20882 break
20883 }
20884 v_0_0_1 := v_0_0.Args[1]
20885 if v_0_0_1.Op != OpConst64 {
20886 break
20887 }
20888 s := v_0_0_1.AuxInt
20889 v_0_1 := v_0.Args[1]
20890 if v_0_1.Op != OpConst64 {
20891 break
20892 }
20893 c := v_0_1.AuxInt
20894 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20895 break
20896 }
20897 v.reset(OpLeq64U)
20898 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20899 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20900 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20901 v2.AuxInt = int64(udivisible(64, c).m)
20902 v1.AddArg(v2)
20903 v1.AddArg(x)
20904 v0.AddArg(v1)
20905 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20906 v3.AuxInt = int64(64 - udivisible(64, c).k)
20907 v0.AddArg(v3)
20908 v.AddArg(v0)
20909 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20910 v4.AuxInt = int64(udivisible(64, c).max)
20911 v.AddArg(v4)
20912 return true
20913 }
20914
20915
20916
20917 for {
20918 x := v.Args[1]
20919 v_0 := v.Args[0]
20920 if v_0.Op != OpMul64 {
20921 break
20922 }
20923 _ = v_0.Args[1]
20924 v_0_0 := v_0.Args[0]
20925 if v_0_0.Op != OpRsh64Ux64 {
20926 break
20927 }
20928 _ = v_0_0.Args[1]
20929 mul := v_0_0.Args[0]
20930 if mul.Op != OpHmul64u {
20931 break
20932 }
20933 _ = mul.Args[1]
20934 mul_0 := mul.Args[0]
20935 if mul_0.Op != OpRsh64Ux64 {
20936 break
20937 }
20938 _ = mul_0.Args[1]
20939 if x != mul_0.Args[0] {
20940 break
20941 }
20942 mul_0_1 := mul_0.Args[1]
20943 if mul_0_1.Op != OpConst64 {
20944 break
20945 }
20946 if mul_0_1.AuxInt != 1 {
20947 break
20948 }
20949 mul_1 := mul.Args[1]
20950 if mul_1.Op != OpConst64 {
20951 break
20952 }
20953 m := mul_1.AuxInt
20954 v_0_0_1 := v_0_0.Args[1]
20955 if v_0_0_1.Op != OpConst64 {
20956 break
20957 }
20958 s := v_0_0_1.AuxInt
20959 v_0_1 := v_0.Args[1]
20960 if v_0_1.Op != OpConst64 {
20961 break
20962 }
20963 c := v_0_1.AuxInt
20964 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) {
20965 break
20966 }
20967 v.reset(OpLeq64U)
20968 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
20969 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
20970 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20971 v2.AuxInt = int64(udivisible(64, c).m)
20972 v1.AddArg(v2)
20973 v1.AddArg(x)
20974 v0.AddArg(v1)
20975 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20976 v3.AuxInt = int64(64 - udivisible(64, c).k)
20977 v0.AddArg(v3)
20978 v.AddArg(v0)
20979 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
20980 v4.AuxInt = int64(udivisible(64, c).max)
20981 v.AddArg(v4)
20982 return true
20983 }
20984
20985
20986
20987 for {
20988 _ = v.Args[1]
20989 x := v.Args[0]
20990 v_1 := v.Args[1]
20991 if v_1.Op != OpMul64 {
20992 break
20993 }
20994 _ = v_1.Args[1]
20995 v_1_0 := v_1.Args[0]
20996 if v_1_0.Op != OpConst64 {
20997 break
20998 }
20999 c := v_1_0.AuxInt
21000 v_1_1 := v_1.Args[1]
21001 if v_1_1.Op != OpRsh64Ux64 {
21002 break
21003 }
21004 _ = v_1_1.Args[1]
21005 v_1_1_0 := v_1_1.Args[0]
21006 if v_1_1_0.Op != OpAvg64u {
21007 break
21008 }
21009 _ = v_1_1_0.Args[1]
21010 if x != v_1_1_0.Args[0] {
21011 break
21012 }
21013 mul := v_1_1_0.Args[1]
21014 if mul.Op != OpHmul64u {
21015 break
21016 }
21017 _ = mul.Args[1]
21018 mul_0 := mul.Args[0]
21019 if mul_0.Op != OpConst64 {
21020 break
21021 }
21022 m := mul_0.AuxInt
21023 if x != mul.Args[1] {
21024 break
21025 }
21026 v_1_1_1 := v_1_1.Args[1]
21027 if v_1_1_1.Op != OpConst64 {
21028 break
21029 }
21030 s := v_1_1_1.AuxInt
21031 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21032 break
21033 }
21034 v.reset(OpLeq64U)
21035 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21036 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21037 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21038 v2.AuxInt = int64(udivisible(64, c).m)
21039 v1.AddArg(v2)
21040 v1.AddArg(x)
21041 v0.AddArg(v1)
21042 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21043 v3.AuxInt = int64(64 - udivisible(64, c).k)
21044 v0.AddArg(v3)
21045 v.AddArg(v0)
21046 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21047 v4.AuxInt = int64(udivisible(64, c).max)
21048 v.AddArg(v4)
21049 return true
21050 }
21051
21052
21053
21054 for {
21055 _ = v.Args[1]
21056 x := v.Args[0]
21057 v_1 := v.Args[1]
21058 if v_1.Op != OpMul64 {
21059 break
21060 }
21061 _ = v_1.Args[1]
21062 v_1_0 := v_1.Args[0]
21063 if v_1_0.Op != OpConst64 {
21064 break
21065 }
21066 c := v_1_0.AuxInt
21067 v_1_1 := v_1.Args[1]
21068 if v_1_1.Op != OpRsh64Ux64 {
21069 break
21070 }
21071 _ = v_1_1.Args[1]
21072 v_1_1_0 := v_1_1.Args[0]
21073 if v_1_1_0.Op != OpAvg64u {
21074 break
21075 }
21076 _ = v_1_1_0.Args[1]
21077 if x != v_1_1_0.Args[0] {
21078 break
21079 }
21080 mul := v_1_1_0.Args[1]
21081 if mul.Op != OpHmul64u {
21082 break
21083 }
21084 _ = mul.Args[1]
21085 if x != mul.Args[0] {
21086 break
21087 }
21088 mul_1 := mul.Args[1]
21089 if mul_1.Op != OpConst64 {
21090 break
21091 }
21092 m := mul_1.AuxInt
21093 v_1_1_1 := v_1_1.Args[1]
21094 if v_1_1_1.Op != OpConst64 {
21095 break
21096 }
21097 s := v_1_1_1.AuxInt
21098 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21099 break
21100 }
21101 v.reset(OpLeq64U)
21102 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21103 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21104 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21105 v2.AuxInt = int64(udivisible(64, c).m)
21106 v1.AddArg(v2)
21107 v1.AddArg(x)
21108 v0.AddArg(v1)
21109 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21110 v3.AuxInt = int64(64 - udivisible(64, c).k)
21111 v0.AddArg(v3)
21112 v.AddArg(v0)
21113 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21114 v4.AuxInt = int64(udivisible(64, c).max)
21115 v.AddArg(v4)
21116 return true
21117 }
21118
21119
21120
21121 for {
21122 _ = v.Args[1]
21123 x := v.Args[0]
21124 v_1 := v.Args[1]
21125 if v_1.Op != OpMul64 {
21126 break
21127 }
21128 _ = v_1.Args[1]
21129 v_1_0 := v_1.Args[0]
21130 if v_1_0.Op != OpRsh64Ux64 {
21131 break
21132 }
21133 _ = v_1_0.Args[1]
21134 v_1_0_0 := v_1_0.Args[0]
21135 if v_1_0_0.Op != OpAvg64u {
21136 break
21137 }
21138 _ = v_1_0_0.Args[1]
21139 if x != v_1_0_0.Args[0] {
21140 break
21141 }
21142 mul := v_1_0_0.Args[1]
21143 if mul.Op != OpHmul64u {
21144 break
21145 }
21146 _ = mul.Args[1]
21147 mul_0 := mul.Args[0]
21148 if mul_0.Op != OpConst64 {
21149 break
21150 }
21151 m := mul_0.AuxInt
21152 if x != mul.Args[1] {
21153 break
21154 }
21155 v_1_0_1 := v_1_0.Args[1]
21156 if v_1_0_1.Op != OpConst64 {
21157 break
21158 }
21159 s := v_1_0_1.AuxInt
21160 v_1_1 := v_1.Args[1]
21161 if v_1_1.Op != OpConst64 {
21162 break
21163 }
21164 c := v_1_1.AuxInt
21165 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21166 break
21167 }
21168 v.reset(OpLeq64U)
21169 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21170 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21171 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21172 v2.AuxInt = int64(udivisible(64, c).m)
21173 v1.AddArg(v2)
21174 v1.AddArg(x)
21175 v0.AddArg(v1)
21176 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21177 v3.AuxInt = int64(64 - udivisible(64, c).k)
21178 v0.AddArg(v3)
21179 v.AddArg(v0)
21180 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21181 v4.AuxInt = int64(udivisible(64, c).max)
21182 v.AddArg(v4)
21183 return true
21184 }
21185
21186
21187
21188 for {
21189 _ = v.Args[1]
21190 x := v.Args[0]
21191 v_1 := v.Args[1]
21192 if v_1.Op != OpMul64 {
21193 break
21194 }
21195 _ = v_1.Args[1]
21196 v_1_0 := v_1.Args[0]
21197 if v_1_0.Op != OpRsh64Ux64 {
21198 break
21199 }
21200 _ = v_1_0.Args[1]
21201 v_1_0_0 := v_1_0.Args[0]
21202 if v_1_0_0.Op != OpAvg64u {
21203 break
21204 }
21205 _ = v_1_0_0.Args[1]
21206 if x != v_1_0_0.Args[0] {
21207 break
21208 }
21209 mul := v_1_0_0.Args[1]
21210 if mul.Op != OpHmul64u {
21211 break
21212 }
21213 _ = mul.Args[1]
21214 if x != mul.Args[0] {
21215 break
21216 }
21217 mul_1 := mul.Args[1]
21218 if mul_1.Op != OpConst64 {
21219 break
21220 }
21221 m := mul_1.AuxInt
21222 v_1_0_1 := v_1_0.Args[1]
21223 if v_1_0_1.Op != OpConst64 {
21224 break
21225 }
21226 s := v_1_0_1.AuxInt
21227 v_1_1 := v_1.Args[1]
21228 if v_1_1.Op != OpConst64 {
21229 break
21230 }
21231 c := v_1_1.AuxInt
21232 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21233 break
21234 }
21235 v.reset(OpLeq64U)
21236 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21237 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21238 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21239 v2.AuxInt = int64(udivisible(64, c).m)
21240 v1.AddArg(v2)
21241 v1.AddArg(x)
21242 v0.AddArg(v1)
21243 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21244 v3.AuxInt = int64(64 - udivisible(64, c).k)
21245 v0.AddArg(v3)
21246 v.AddArg(v0)
21247 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21248 v4.AuxInt = int64(udivisible(64, c).max)
21249 v.AddArg(v4)
21250 return true
21251 }
21252
21253
21254
21255 for {
21256 x := v.Args[1]
21257 v_0 := v.Args[0]
21258 if v_0.Op != OpMul64 {
21259 break
21260 }
21261 _ = v_0.Args[1]
21262 v_0_0 := v_0.Args[0]
21263 if v_0_0.Op != OpConst64 {
21264 break
21265 }
21266 c := v_0_0.AuxInt
21267 v_0_1 := v_0.Args[1]
21268 if v_0_1.Op != OpRsh64Ux64 {
21269 break
21270 }
21271 _ = v_0_1.Args[1]
21272 v_0_1_0 := v_0_1.Args[0]
21273 if v_0_1_0.Op != OpAvg64u {
21274 break
21275 }
21276 _ = v_0_1_0.Args[1]
21277 if x != v_0_1_0.Args[0] {
21278 break
21279 }
21280 mul := v_0_1_0.Args[1]
21281 if mul.Op != OpHmul64u {
21282 break
21283 }
21284 _ = mul.Args[1]
21285 mul_0 := mul.Args[0]
21286 if mul_0.Op != OpConst64 {
21287 break
21288 }
21289 m := mul_0.AuxInt
21290 if x != mul.Args[1] {
21291 break
21292 }
21293 v_0_1_1 := v_0_1.Args[1]
21294 if v_0_1_1.Op != OpConst64 {
21295 break
21296 }
21297 s := v_0_1_1.AuxInt
21298 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21299 break
21300 }
21301 v.reset(OpLeq64U)
21302 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21303 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21304 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21305 v2.AuxInt = int64(udivisible(64, c).m)
21306 v1.AddArg(v2)
21307 v1.AddArg(x)
21308 v0.AddArg(v1)
21309 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21310 v3.AuxInt = int64(64 - udivisible(64, c).k)
21311 v0.AddArg(v3)
21312 v.AddArg(v0)
21313 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21314 v4.AuxInt = int64(udivisible(64, c).max)
21315 v.AddArg(v4)
21316 return true
21317 }
21318
21319
21320
21321 for {
21322 x := v.Args[1]
21323 v_0 := v.Args[0]
21324 if v_0.Op != OpMul64 {
21325 break
21326 }
21327 _ = v_0.Args[1]
21328 v_0_0 := v_0.Args[0]
21329 if v_0_0.Op != OpConst64 {
21330 break
21331 }
21332 c := v_0_0.AuxInt
21333 v_0_1 := v_0.Args[1]
21334 if v_0_1.Op != OpRsh64Ux64 {
21335 break
21336 }
21337 _ = v_0_1.Args[1]
21338 v_0_1_0 := v_0_1.Args[0]
21339 if v_0_1_0.Op != OpAvg64u {
21340 break
21341 }
21342 _ = v_0_1_0.Args[1]
21343 if x != v_0_1_0.Args[0] {
21344 break
21345 }
21346 mul := v_0_1_0.Args[1]
21347 if mul.Op != OpHmul64u {
21348 break
21349 }
21350 _ = mul.Args[1]
21351 if x != mul.Args[0] {
21352 break
21353 }
21354 mul_1 := mul.Args[1]
21355 if mul_1.Op != OpConst64 {
21356 break
21357 }
21358 m := mul_1.AuxInt
21359 v_0_1_1 := v_0_1.Args[1]
21360 if v_0_1_1.Op != OpConst64 {
21361 break
21362 }
21363 s := v_0_1_1.AuxInt
21364 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21365 break
21366 }
21367 v.reset(OpLeq64U)
21368 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21369 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21370 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21371 v2.AuxInt = int64(udivisible(64, c).m)
21372 v1.AddArg(v2)
21373 v1.AddArg(x)
21374 v0.AddArg(v1)
21375 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21376 v3.AuxInt = int64(64 - udivisible(64, c).k)
21377 v0.AddArg(v3)
21378 v.AddArg(v0)
21379 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21380 v4.AuxInt = int64(udivisible(64, c).max)
21381 v.AddArg(v4)
21382 return true
21383 }
21384
21385
21386
21387 for {
21388 x := v.Args[1]
21389 v_0 := v.Args[0]
21390 if v_0.Op != OpMul64 {
21391 break
21392 }
21393 _ = v_0.Args[1]
21394 v_0_0 := v_0.Args[0]
21395 if v_0_0.Op != OpRsh64Ux64 {
21396 break
21397 }
21398 _ = v_0_0.Args[1]
21399 v_0_0_0 := v_0_0.Args[0]
21400 if v_0_0_0.Op != OpAvg64u {
21401 break
21402 }
21403 _ = v_0_0_0.Args[1]
21404 if x != v_0_0_0.Args[0] {
21405 break
21406 }
21407 mul := v_0_0_0.Args[1]
21408 if mul.Op != OpHmul64u {
21409 break
21410 }
21411 _ = mul.Args[1]
21412 mul_0 := mul.Args[0]
21413 if mul_0.Op != OpConst64 {
21414 break
21415 }
21416 m := mul_0.AuxInt
21417 if x != mul.Args[1] {
21418 break
21419 }
21420 v_0_0_1 := v_0_0.Args[1]
21421 if v_0_0_1.Op != OpConst64 {
21422 break
21423 }
21424 s := v_0_0_1.AuxInt
21425 v_0_1 := v_0.Args[1]
21426 if v_0_1.Op != OpConst64 {
21427 break
21428 }
21429 c := v_0_1.AuxInt
21430 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21431 break
21432 }
21433 v.reset(OpLeq64U)
21434 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21435 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21436 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21437 v2.AuxInt = int64(udivisible(64, c).m)
21438 v1.AddArg(v2)
21439 v1.AddArg(x)
21440 v0.AddArg(v1)
21441 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21442 v3.AuxInt = int64(64 - udivisible(64, c).k)
21443 v0.AddArg(v3)
21444 v.AddArg(v0)
21445 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21446 v4.AuxInt = int64(udivisible(64, c).max)
21447 v.AddArg(v4)
21448 return true
21449 }
21450 return false
21451 }
21452 func rewriteValuegeneric_OpEq64_30(v *Value) bool {
21453 b := v.Block
21454 typ := &b.Func.Config.Types
21455
21456
21457
21458 for {
21459 x := v.Args[1]
21460 v_0 := v.Args[0]
21461 if v_0.Op != OpMul64 {
21462 break
21463 }
21464 _ = v_0.Args[1]
21465 v_0_0 := v_0.Args[0]
21466 if v_0_0.Op != OpRsh64Ux64 {
21467 break
21468 }
21469 _ = v_0_0.Args[1]
21470 v_0_0_0 := v_0_0.Args[0]
21471 if v_0_0_0.Op != OpAvg64u {
21472 break
21473 }
21474 _ = v_0_0_0.Args[1]
21475 if x != v_0_0_0.Args[0] {
21476 break
21477 }
21478 mul := v_0_0_0.Args[1]
21479 if mul.Op != OpHmul64u {
21480 break
21481 }
21482 _ = mul.Args[1]
21483 if x != mul.Args[0] {
21484 break
21485 }
21486 mul_1 := mul.Args[1]
21487 if mul_1.Op != OpConst64 {
21488 break
21489 }
21490 m := mul_1.AuxInt
21491 v_0_0_1 := v_0_0.Args[1]
21492 if v_0_0_1.Op != OpConst64 {
21493 break
21494 }
21495 s := v_0_0_1.AuxInt
21496 v_0_1 := v_0.Args[1]
21497 if v_0_1.Op != OpConst64 {
21498 break
21499 }
21500 c := v_0_1.AuxInt
21501 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) {
21502 break
21503 }
21504 v.reset(OpLeq64U)
21505 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21506 v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21507 v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21508 v2.AuxInt = int64(udivisible(64, c).m)
21509 v1.AddArg(v2)
21510 v1.AddArg(x)
21511 v0.AddArg(v1)
21512 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21513 v3.AuxInt = int64(64 - udivisible(64, c).k)
21514 v0.AddArg(v3)
21515 v.AddArg(v0)
21516 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21517 v4.AuxInt = int64(udivisible(64, c).max)
21518 v.AddArg(v4)
21519 return true
21520 }
21521
21522
21523
21524 for {
21525 _ = v.Args[1]
21526 x := v.Args[0]
21527 v_1 := v.Args[1]
21528 if v_1.Op != OpMul64 {
21529 break
21530 }
21531 _ = v_1.Args[1]
21532 v_1_0 := v_1.Args[0]
21533 if v_1_0.Op != OpConst64 {
21534 break
21535 }
21536 c := v_1_0.AuxInt
21537 v_1_1 := v_1.Args[1]
21538 if v_1_1.Op != OpSub64 {
21539 break
21540 }
21541 _ = v_1_1.Args[1]
21542 v_1_1_0 := v_1_1.Args[0]
21543 if v_1_1_0.Op != OpRsh64x64 {
21544 break
21545 }
21546 _ = v_1_1_0.Args[1]
21547 mul := v_1_1_0.Args[0]
21548 if mul.Op != OpHmul64 {
21549 break
21550 }
21551 _ = mul.Args[1]
21552 mul_0 := mul.Args[0]
21553 if mul_0.Op != OpConst64 {
21554 break
21555 }
21556 m := mul_0.AuxInt
21557 if x != mul.Args[1] {
21558 break
21559 }
21560 v_1_1_0_1 := v_1_1_0.Args[1]
21561 if v_1_1_0_1.Op != OpConst64 {
21562 break
21563 }
21564 s := v_1_1_0_1.AuxInt
21565 v_1_1_1 := v_1_1.Args[1]
21566 if v_1_1_1.Op != OpRsh64x64 {
21567 break
21568 }
21569 _ = v_1_1_1.Args[1]
21570 if x != v_1_1_1.Args[0] {
21571 break
21572 }
21573 v_1_1_1_1 := v_1_1_1.Args[1]
21574 if v_1_1_1_1.Op != OpConst64 {
21575 break
21576 }
21577 if v_1_1_1_1.AuxInt != 63 {
21578 break
21579 }
21580 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21581 break
21582 }
21583 v.reset(OpLeq64U)
21584 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21585 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
21586 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21587 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21588 v3.AuxInt = int64(sdivisible(64, c).m)
21589 v2.AddArg(v3)
21590 v2.AddArg(x)
21591 v1.AddArg(v2)
21592 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21593 v4.AuxInt = int64(sdivisible(64, c).a)
21594 v1.AddArg(v4)
21595 v0.AddArg(v1)
21596 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21597 v5.AuxInt = int64(64 - sdivisible(64, c).k)
21598 v0.AddArg(v5)
21599 v.AddArg(v0)
21600 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21601 v6.AuxInt = int64(sdivisible(64, c).max)
21602 v.AddArg(v6)
21603 return true
21604 }
21605
21606
21607
21608 for {
21609 _ = v.Args[1]
21610 x := v.Args[0]
21611 v_1 := v.Args[1]
21612 if v_1.Op != OpMul64 {
21613 break
21614 }
21615 _ = v_1.Args[1]
21616 v_1_0 := v_1.Args[0]
21617 if v_1_0.Op != OpConst64 {
21618 break
21619 }
21620 c := v_1_0.AuxInt
21621 v_1_1 := v_1.Args[1]
21622 if v_1_1.Op != OpSub64 {
21623 break
21624 }
21625 _ = v_1_1.Args[1]
21626 v_1_1_0 := v_1_1.Args[0]
21627 if v_1_1_0.Op != OpRsh64x64 {
21628 break
21629 }
21630 _ = v_1_1_0.Args[1]
21631 mul := v_1_1_0.Args[0]
21632 if mul.Op != OpHmul64 {
21633 break
21634 }
21635 _ = mul.Args[1]
21636 if x != mul.Args[0] {
21637 break
21638 }
21639 mul_1 := mul.Args[1]
21640 if mul_1.Op != OpConst64 {
21641 break
21642 }
21643 m := mul_1.AuxInt
21644 v_1_1_0_1 := v_1_1_0.Args[1]
21645 if v_1_1_0_1.Op != OpConst64 {
21646 break
21647 }
21648 s := v_1_1_0_1.AuxInt
21649 v_1_1_1 := v_1_1.Args[1]
21650 if v_1_1_1.Op != OpRsh64x64 {
21651 break
21652 }
21653 _ = v_1_1_1.Args[1]
21654 if x != v_1_1_1.Args[0] {
21655 break
21656 }
21657 v_1_1_1_1 := v_1_1_1.Args[1]
21658 if v_1_1_1_1.Op != OpConst64 {
21659 break
21660 }
21661 if v_1_1_1_1.AuxInt != 63 {
21662 break
21663 }
21664 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21665 break
21666 }
21667 v.reset(OpLeq64U)
21668 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21669 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
21670 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21671 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21672 v3.AuxInt = int64(sdivisible(64, c).m)
21673 v2.AddArg(v3)
21674 v2.AddArg(x)
21675 v1.AddArg(v2)
21676 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21677 v4.AuxInt = int64(sdivisible(64, c).a)
21678 v1.AddArg(v4)
21679 v0.AddArg(v1)
21680 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21681 v5.AuxInt = int64(64 - sdivisible(64, c).k)
21682 v0.AddArg(v5)
21683 v.AddArg(v0)
21684 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21685 v6.AuxInt = int64(sdivisible(64, c).max)
21686 v.AddArg(v6)
21687 return true
21688 }
21689
21690
21691
21692 for {
21693 _ = v.Args[1]
21694 x := v.Args[0]
21695 v_1 := v.Args[1]
21696 if v_1.Op != OpMul64 {
21697 break
21698 }
21699 _ = v_1.Args[1]
21700 v_1_0 := v_1.Args[0]
21701 if v_1_0.Op != OpSub64 {
21702 break
21703 }
21704 _ = v_1_0.Args[1]
21705 v_1_0_0 := v_1_0.Args[0]
21706 if v_1_0_0.Op != OpRsh64x64 {
21707 break
21708 }
21709 _ = v_1_0_0.Args[1]
21710 mul := v_1_0_0.Args[0]
21711 if mul.Op != OpHmul64 {
21712 break
21713 }
21714 _ = mul.Args[1]
21715 mul_0 := mul.Args[0]
21716 if mul_0.Op != OpConst64 {
21717 break
21718 }
21719 m := mul_0.AuxInt
21720 if x != mul.Args[1] {
21721 break
21722 }
21723 v_1_0_0_1 := v_1_0_0.Args[1]
21724 if v_1_0_0_1.Op != OpConst64 {
21725 break
21726 }
21727 s := v_1_0_0_1.AuxInt
21728 v_1_0_1 := v_1_0.Args[1]
21729 if v_1_0_1.Op != OpRsh64x64 {
21730 break
21731 }
21732 _ = v_1_0_1.Args[1]
21733 if x != v_1_0_1.Args[0] {
21734 break
21735 }
21736 v_1_0_1_1 := v_1_0_1.Args[1]
21737 if v_1_0_1_1.Op != OpConst64 {
21738 break
21739 }
21740 if v_1_0_1_1.AuxInt != 63 {
21741 break
21742 }
21743 v_1_1 := v_1.Args[1]
21744 if v_1_1.Op != OpConst64 {
21745 break
21746 }
21747 c := v_1_1.AuxInt
21748 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21749 break
21750 }
21751 v.reset(OpLeq64U)
21752 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21753 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
21754 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21755 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21756 v3.AuxInt = int64(sdivisible(64, c).m)
21757 v2.AddArg(v3)
21758 v2.AddArg(x)
21759 v1.AddArg(v2)
21760 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21761 v4.AuxInt = int64(sdivisible(64, c).a)
21762 v1.AddArg(v4)
21763 v0.AddArg(v1)
21764 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21765 v5.AuxInt = int64(64 - sdivisible(64, c).k)
21766 v0.AddArg(v5)
21767 v.AddArg(v0)
21768 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21769 v6.AuxInt = int64(sdivisible(64, c).max)
21770 v.AddArg(v6)
21771 return true
21772 }
21773
21774
21775
21776 for {
21777 _ = v.Args[1]
21778 x := v.Args[0]
21779 v_1 := v.Args[1]
21780 if v_1.Op != OpMul64 {
21781 break
21782 }
21783 _ = v_1.Args[1]
21784 v_1_0 := v_1.Args[0]
21785 if v_1_0.Op != OpSub64 {
21786 break
21787 }
21788 _ = v_1_0.Args[1]
21789 v_1_0_0 := v_1_0.Args[0]
21790 if v_1_0_0.Op != OpRsh64x64 {
21791 break
21792 }
21793 _ = v_1_0_0.Args[1]
21794 mul := v_1_0_0.Args[0]
21795 if mul.Op != OpHmul64 {
21796 break
21797 }
21798 _ = mul.Args[1]
21799 if x != mul.Args[0] {
21800 break
21801 }
21802 mul_1 := mul.Args[1]
21803 if mul_1.Op != OpConst64 {
21804 break
21805 }
21806 m := mul_1.AuxInt
21807 v_1_0_0_1 := v_1_0_0.Args[1]
21808 if v_1_0_0_1.Op != OpConst64 {
21809 break
21810 }
21811 s := v_1_0_0_1.AuxInt
21812 v_1_0_1 := v_1_0.Args[1]
21813 if v_1_0_1.Op != OpRsh64x64 {
21814 break
21815 }
21816 _ = v_1_0_1.Args[1]
21817 if x != v_1_0_1.Args[0] {
21818 break
21819 }
21820 v_1_0_1_1 := v_1_0_1.Args[1]
21821 if v_1_0_1_1.Op != OpConst64 {
21822 break
21823 }
21824 if v_1_0_1_1.AuxInt != 63 {
21825 break
21826 }
21827 v_1_1 := v_1.Args[1]
21828 if v_1_1.Op != OpConst64 {
21829 break
21830 }
21831 c := v_1_1.AuxInt
21832 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21833 break
21834 }
21835 v.reset(OpLeq64U)
21836 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21837 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
21838 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21839 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21840 v3.AuxInt = int64(sdivisible(64, c).m)
21841 v2.AddArg(v3)
21842 v2.AddArg(x)
21843 v1.AddArg(v2)
21844 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21845 v4.AuxInt = int64(sdivisible(64, c).a)
21846 v1.AddArg(v4)
21847 v0.AddArg(v1)
21848 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21849 v5.AuxInt = int64(64 - sdivisible(64, c).k)
21850 v0.AddArg(v5)
21851 v.AddArg(v0)
21852 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21853 v6.AuxInt = int64(sdivisible(64, c).max)
21854 v.AddArg(v6)
21855 return true
21856 }
21857
21858
21859
21860 for {
21861 x := v.Args[1]
21862 v_0 := v.Args[0]
21863 if v_0.Op != OpMul64 {
21864 break
21865 }
21866 _ = v_0.Args[1]
21867 v_0_0 := v_0.Args[0]
21868 if v_0_0.Op != OpConst64 {
21869 break
21870 }
21871 c := v_0_0.AuxInt
21872 v_0_1 := v_0.Args[1]
21873 if v_0_1.Op != OpSub64 {
21874 break
21875 }
21876 _ = v_0_1.Args[1]
21877 v_0_1_0 := v_0_1.Args[0]
21878 if v_0_1_0.Op != OpRsh64x64 {
21879 break
21880 }
21881 _ = v_0_1_0.Args[1]
21882 mul := v_0_1_0.Args[0]
21883 if mul.Op != OpHmul64 {
21884 break
21885 }
21886 _ = mul.Args[1]
21887 mul_0 := mul.Args[0]
21888 if mul_0.Op != OpConst64 {
21889 break
21890 }
21891 m := mul_0.AuxInt
21892 if x != mul.Args[1] {
21893 break
21894 }
21895 v_0_1_0_1 := v_0_1_0.Args[1]
21896 if v_0_1_0_1.Op != OpConst64 {
21897 break
21898 }
21899 s := v_0_1_0_1.AuxInt
21900 v_0_1_1 := v_0_1.Args[1]
21901 if v_0_1_1.Op != OpRsh64x64 {
21902 break
21903 }
21904 _ = v_0_1_1.Args[1]
21905 if x != v_0_1_1.Args[0] {
21906 break
21907 }
21908 v_0_1_1_1 := v_0_1_1.Args[1]
21909 if v_0_1_1_1.Op != OpConst64 {
21910 break
21911 }
21912 if v_0_1_1_1.AuxInt != 63 {
21913 break
21914 }
21915 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21916 break
21917 }
21918 v.reset(OpLeq64U)
21919 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
21920 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
21921 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
21922 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21923 v3.AuxInt = int64(sdivisible(64, c).m)
21924 v2.AddArg(v3)
21925 v2.AddArg(x)
21926 v1.AddArg(v2)
21927 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21928 v4.AuxInt = int64(sdivisible(64, c).a)
21929 v1.AddArg(v4)
21930 v0.AddArg(v1)
21931 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21932 v5.AuxInt = int64(64 - sdivisible(64, c).k)
21933 v0.AddArg(v5)
21934 v.AddArg(v0)
21935 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
21936 v6.AuxInt = int64(sdivisible(64, c).max)
21937 v.AddArg(v6)
21938 return true
21939 }
21940
21941
21942
21943 for {
21944 x := v.Args[1]
21945 v_0 := v.Args[0]
21946 if v_0.Op != OpMul64 {
21947 break
21948 }
21949 _ = v_0.Args[1]
21950 v_0_0 := v_0.Args[0]
21951 if v_0_0.Op != OpConst64 {
21952 break
21953 }
21954 c := v_0_0.AuxInt
21955 v_0_1 := v_0.Args[1]
21956 if v_0_1.Op != OpSub64 {
21957 break
21958 }
21959 _ = v_0_1.Args[1]
21960 v_0_1_0 := v_0_1.Args[0]
21961 if v_0_1_0.Op != OpRsh64x64 {
21962 break
21963 }
21964 _ = v_0_1_0.Args[1]
21965 mul := v_0_1_0.Args[0]
21966 if mul.Op != OpHmul64 {
21967 break
21968 }
21969 _ = mul.Args[1]
21970 if x != mul.Args[0] {
21971 break
21972 }
21973 mul_1 := mul.Args[1]
21974 if mul_1.Op != OpConst64 {
21975 break
21976 }
21977 m := mul_1.AuxInt
21978 v_0_1_0_1 := v_0_1_0.Args[1]
21979 if v_0_1_0_1.Op != OpConst64 {
21980 break
21981 }
21982 s := v_0_1_0_1.AuxInt
21983 v_0_1_1 := v_0_1.Args[1]
21984 if v_0_1_1.Op != OpRsh64x64 {
21985 break
21986 }
21987 _ = v_0_1_1.Args[1]
21988 if x != v_0_1_1.Args[0] {
21989 break
21990 }
21991 v_0_1_1_1 := v_0_1_1.Args[1]
21992 if v_0_1_1_1.Op != OpConst64 {
21993 break
21994 }
21995 if v_0_1_1_1.AuxInt != 63 {
21996 break
21997 }
21998 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
21999 break
22000 }
22001 v.reset(OpLeq64U)
22002 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22003 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22004 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22005 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22006 v3.AuxInt = int64(sdivisible(64, c).m)
22007 v2.AddArg(v3)
22008 v2.AddArg(x)
22009 v1.AddArg(v2)
22010 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22011 v4.AuxInt = int64(sdivisible(64, c).a)
22012 v1.AddArg(v4)
22013 v0.AddArg(v1)
22014 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22015 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22016 v0.AddArg(v5)
22017 v.AddArg(v0)
22018 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22019 v6.AuxInt = int64(sdivisible(64, c).max)
22020 v.AddArg(v6)
22021 return true
22022 }
22023
22024
22025
22026 for {
22027 x := v.Args[1]
22028 v_0 := v.Args[0]
22029 if v_0.Op != OpMul64 {
22030 break
22031 }
22032 _ = v_0.Args[1]
22033 v_0_0 := v_0.Args[0]
22034 if v_0_0.Op != OpSub64 {
22035 break
22036 }
22037 _ = v_0_0.Args[1]
22038 v_0_0_0 := v_0_0.Args[0]
22039 if v_0_0_0.Op != OpRsh64x64 {
22040 break
22041 }
22042 _ = v_0_0_0.Args[1]
22043 mul := v_0_0_0.Args[0]
22044 if mul.Op != OpHmul64 {
22045 break
22046 }
22047 _ = mul.Args[1]
22048 mul_0 := mul.Args[0]
22049 if mul_0.Op != OpConst64 {
22050 break
22051 }
22052 m := mul_0.AuxInt
22053 if x != mul.Args[1] {
22054 break
22055 }
22056 v_0_0_0_1 := v_0_0_0.Args[1]
22057 if v_0_0_0_1.Op != OpConst64 {
22058 break
22059 }
22060 s := v_0_0_0_1.AuxInt
22061 v_0_0_1 := v_0_0.Args[1]
22062 if v_0_0_1.Op != OpRsh64x64 {
22063 break
22064 }
22065 _ = v_0_0_1.Args[1]
22066 if x != v_0_0_1.Args[0] {
22067 break
22068 }
22069 v_0_0_1_1 := v_0_0_1.Args[1]
22070 if v_0_0_1_1.Op != OpConst64 {
22071 break
22072 }
22073 if v_0_0_1_1.AuxInt != 63 {
22074 break
22075 }
22076 v_0_1 := v_0.Args[1]
22077 if v_0_1.Op != OpConst64 {
22078 break
22079 }
22080 c := v_0_1.AuxInt
22081 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22082 break
22083 }
22084 v.reset(OpLeq64U)
22085 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22086 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22087 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22088 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22089 v3.AuxInt = int64(sdivisible(64, c).m)
22090 v2.AddArg(v3)
22091 v2.AddArg(x)
22092 v1.AddArg(v2)
22093 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22094 v4.AuxInt = int64(sdivisible(64, c).a)
22095 v1.AddArg(v4)
22096 v0.AddArg(v1)
22097 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22098 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22099 v0.AddArg(v5)
22100 v.AddArg(v0)
22101 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22102 v6.AuxInt = int64(sdivisible(64, c).max)
22103 v.AddArg(v6)
22104 return true
22105 }
22106
22107
22108
22109 for {
22110 x := v.Args[1]
22111 v_0 := v.Args[0]
22112 if v_0.Op != OpMul64 {
22113 break
22114 }
22115 _ = v_0.Args[1]
22116 v_0_0 := v_0.Args[0]
22117 if v_0_0.Op != OpSub64 {
22118 break
22119 }
22120 _ = v_0_0.Args[1]
22121 v_0_0_0 := v_0_0.Args[0]
22122 if v_0_0_0.Op != OpRsh64x64 {
22123 break
22124 }
22125 _ = v_0_0_0.Args[1]
22126 mul := v_0_0_0.Args[0]
22127 if mul.Op != OpHmul64 {
22128 break
22129 }
22130 _ = mul.Args[1]
22131 if x != mul.Args[0] {
22132 break
22133 }
22134 mul_1 := mul.Args[1]
22135 if mul_1.Op != OpConst64 {
22136 break
22137 }
22138 m := mul_1.AuxInt
22139 v_0_0_0_1 := v_0_0_0.Args[1]
22140 if v_0_0_0_1.Op != OpConst64 {
22141 break
22142 }
22143 s := v_0_0_0_1.AuxInt
22144 v_0_0_1 := v_0_0.Args[1]
22145 if v_0_0_1.Op != OpRsh64x64 {
22146 break
22147 }
22148 _ = v_0_0_1.Args[1]
22149 if x != v_0_0_1.Args[0] {
22150 break
22151 }
22152 v_0_0_1_1 := v_0_0_1.Args[1]
22153 if v_0_0_1_1.Op != OpConst64 {
22154 break
22155 }
22156 if v_0_0_1_1.AuxInt != 63 {
22157 break
22158 }
22159 v_0_1 := v_0.Args[1]
22160 if v_0_1.Op != OpConst64 {
22161 break
22162 }
22163 c := v_0_1.AuxInt
22164 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22165 break
22166 }
22167 v.reset(OpLeq64U)
22168 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22169 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22170 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22171 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22172 v3.AuxInt = int64(sdivisible(64, c).m)
22173 v2.AddArg(v3)
22174 v2.AddArg(x)
22175 v1.AddArg(v2)
22176 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22177 v4.AuxInt = int64(sdivisible(64, c).a)
22178 v1.AddArg(v4)
22179 v0.AddArg(v1)
22180 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22181 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22182 v0.AddArg(v5)
22183 v.AddArg(v0)
22184 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22185 v6.AuxInt = int64(sdivisible(64, c).max)
22186 v.AddArg(v6)
22187 return true
22188 }
22189
22190
22191
22192 for {
22193 _ = v.Args[1]
22194 x := v.Args[0]
22195 v_1 := v.Args[1]
22196 if v_1.Op != OpMul64 {
22197 break
22198 }
22199 _ = v_1.Args[1]
22200 v_1_0 := v_1.Args[0]
22201 if v_1_0.Op != OpConst64 {
22202 break
22203 }
22204 c := v_1_0.AuxInt
22205 v_1_1 := v_1.Args[1]
22206 if v_1_1.Op != OpSub64 {
22207 break
22208 }
22209 _ = v_1_1.Args[1]
22210 v_1_1_0 := v_1_1.Args[0]
22211 if v_1_1_0.Op != OpRsh64x64 {
22212 break
22213 }
22214 _ = v_1_1_0.Args[1]
22215 v_1_1_0_0 := v_1_1_0.Args[0]
22216 if v_1_1_0_0.Op != OpAdd64 {
22217 break
22218 }
22219 _ = v_1_1_0_0.Args[1]
22220 mul := v_1_1_0_0.Args[0]
22221 if mul.Op != OpHmul64 {
22222 break
22223 }
22224 _ = mul.Args[1]
22225 mul_0 := mul.Args[0]
22226 if mul_0.Op != OpConst64 {
22227 break
22228 }
22229 m := mul_0.AuxInt
22230 if x != mul.Args[1] {
22231 break
22232 }
22233 if x != v_1_1_0_0.Args[1] {
22234 break
22235 }
22236 v_1_1_0_1 := v_1_1_0.Args[1]
22237 if v_1_1_0_1.Op != OpConst64 {
22238 break
22239 }
22240 s := v_1_1_0_1.AuxInt
22241 v_1_1_1 := v_1_1.Args[1]
22242 if v_1_1_1.Op != OpRsh64x64 {
22243 break
22244 }
22245 _ = v_1_1_1.Args[1]
22246 if x != v_1_1_1.Args[0] {
22247 break
22248 }
22249 v_1_1_1_1 := v_1_1_1.Args[1]
22250 if v_1_1_1_1.Op != OpConst64 {
22251 break
22252 }
22253 if v_1_1_1_1.AuxInt != 63 {
22254 break
22255 }
22256 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22257 break
22258 }
22259 v.reset(OpLeq64U)
22260 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22261 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22262 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22263 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22264 v3.AuxInt = int64(sdivisible(64, c).m)
22265 v2.AddArg(v3)
22266 v2.AddArg(x)
22267 v1.AddArg(v2)
22268 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22269 v4.AuxInt = int64(sdivisible(64, c).a)
22270 v1.AddArg(v4)
22271 v0.AddArg(v1)
22272 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22273 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22274 v0.AddArg(v5)
22275 v.AddArg(v0)
22276 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22277 v6.AuxInt = int64(sdivisible(64, c).max)
22278 v.AddArg(v6)
22279 return true
22280 }
22281 return false
22282 }
22283 func rewriteValuegeneric_OpEq64_40(v *Value) bool {
22284 b := v.Block
22285 typ := &b.Func.Config.Types
22286
22287
22288
22289 for {
22290 _ = v.Args[1]
22291 x := v.Args[0]
22292 v_1 := v.Args[1]
22293 if v_1.Op != OpMul64 {
22294 break
22295 }
22296 _ = v_1.Args[1]
22297 v_1_0 := v_1.Args[0]
22298 if v_1_0.Op != OpConst64 {
22299 break
22300 }
22301 c := v_1_0.AuxInt
22302 v_1_1 := v_1.Args[1]
22303 if v_1_1.Op != OpSub64 {
22304 break
22305 }
22306 _ = v_1_1.Args[1]
22307 v_1_1_0 := v_1_1.Args[0]
22308 if v_1_1_0.Op != OpRsh64x64 {
22309 break
22310 }
22311 _ = v_1_1_0.Args[1]
22312 v_1_1_0_0 := v_1_1_0.Args[0]
22313 if v_1_1_0_0.Op != OpAdd64 {
22314 break
22315 }
22316 _ = v_1_1_0_0.Args[1]
22317 mul := v_1_1_0_0.Args[0]
22318 if mul.Op != OpHmul64 {
22319 break
22320 }
22321 _ = mul.Args[1]
22322 if x != mul.Args[0] {
22323 break
22324 }
22325 mul_1 := mul.Args[1]
22326 if mul_1.Op != OpConst64 {
22327 break
22328 }
22329 m := mul_1.AuxInt
22330 if x != v_1_1_0_0.Args[1] {
22331 break
22332 }
22333 v_1_1_0_1 := v_1_1_0.Args[1]
22334 if v_1_1_0_1.Op != OpConst64 {
22335 break
22336 }
22337 s := v_1_1_0_1.AuxInt
22338 v_1_1_1 := v_1_1.Args[1]
22339 if v_1_1_1.Op != OpRsh64x64 {
22340 break
22341 }
22342 _ = v_1_1_1.Args[1]
22343 if x != v_1_1_1.Args[0] {
22344 break
22345 }
22346 v_1_1_1_1 := v_1_1_1.Args[1]
22347 if v_1_1_1_1.Op != OpConst64 {
22348 break
22349 }
22350 if v_1_1_1_1.AuxInt != 63 {
22351 break
22352 }
22353 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22354 break
22355 }
22356 v.reset(OpLeq64U)
22357 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22358 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22359 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22360 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22361 v3.AuxInt = int64(sdivisible(64, c).m)
22362 v2.AddArg(v3)
22363 v2.AddArg(x)
22364 v1.AddArg(v2)
22365 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22366 v4.AuxInt = int64(sdivisible(64, c).a)
22367 v1.AddArg(v4)
22368 v0.AddArg(v1)
22369 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22370 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22371 v0.AddArg(v5)
22372 v.AddArg(v0)
22373 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22374 v6.AuxInt = int64(sdivisible(64, c).max)
22375 v.AddArg(v6)
22376 return true
22377 }
22378
22379
22380
22381 for {
22382 _ = v.Args[1]
22383 x := v.Args[0]
22384 v_1 := v.Args[1]
22385 if v_1.Op != OpMul64 {
22386 break
22387 }
22388 _ = v_1.Args[1]
22389 v_1_0 := v_1.Args[0]
22390 if v_1_0.Op != OpConst64 {
22391 break
22392 }
22393 c := v_1_0.AuxInt
22394 v_1_1 := v_1.Args[1]
22395 if v_1_1.Op != OpSub64 {
22396 break
22397 }
22398 _ = v_1_1.Args[1]
22399 v_1_1_0 := v_1_1.Args[0]
22400 if v_1_1_0.Op != OpRsh64x64 {
22401 break
22402 }
22403 _ = v_1_1_0.Args[1]
22404 v_1_1_0_0 := v_1_1_0.Args[0]
22405 if v_1_1_0_0.Op != OpAdd64 {
22406 break
22407 }
22408 _ = v_1_1_0_0.Args[1]
22409 if x != v_1_1_0_0.Args[0] {
22410 break
22411 }
22412 mul := v_1_1_0_0.Args[1]
22413 if mul.Op != OpHmul64 {
22414 break
22415 }
22416 _ = mul.Args[1]
22417 mul_0 := mul.Args[0]
22418 if mul_0.Op != OpConst64 {
22419 break
22420 }
22421 m := mul_0.AuxInt
22422 if x != mul.Args[1] {
22423 break
22424 }
22425 v_1_1_0_1 := v_1_1_0.Args[1]
22426 if v_1_1_0_1.Op != OpConst64 {
22427 break
22428 }
22429 s := v_1_1_0_1.AuxInt
22430 v_1_1_1 := v_1_1.Args[1]
22431 if v_1_1_1.Op != OpRsh64x64 {
22432 break
22433 }
22434 _ = v_1_1_1.Args[1]
22435 if x != v_1_1_1.Args[0] {
22436 break
22437 }
22438 v_1_1_1_1 := v_1_1_1.Args[1]
22439 if v_1_1_1_1.Op != OpConst64 {
22440 break
22441 }
22442 if v_1_1_1_1.AuxInt != 63 {
22443 break
22444 }
22445 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22446 break
22447 }
22448 v.reset(OpLeq64U)
22449 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22450 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22451 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22452 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22453 v3.AuxInt = int64(sdivisible(64, c).m)
22454 v2.AddArg(v3)
22455 v2.AddArg(x)
22456 v1.AddArg(v2)
22457 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22458 v4.AuxInt = int64(sdivisible(64, c).a)
22459 v1.AddArg(v4)
22460 v0.AddArg(v1)
22461 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22462 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22463 v0.AddArg(v5)
22464 v.AddArg(v0)
22465 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22466 v6.AuxInt = int64(sdivisible(64, c).max)
22467 v.AddArg(v6)
22468 return true
22469 }
22470
22471
22472
22473 for {
22474 _ = v.Args[1]
22475 x := v.Args[0]
22476 v_1 := v.Args[1]
22477 if v_1.Op != OpMul64 {
22478 break
22479 }
22480 _ = v_1.Args[1]
22481 v_1_0 := v_1.Args[0]
22482 if v_1_0.Op != OpConst64 {
22483 break
22484 }
22485 c := v_1_0.AuxInt
22486 v_1_1 := v_1.Args[1]
22487 if v_1_1.Op != OpSub64 {
22488 break
22489 }
22490 _ = v_1_1.Args[1]
22491 v_1_1_0 := v_1_1.Args[0]
22492 if v_1_1_0.Op != OpRsh64x64 {
22493 break
22494 }
22495 _ = v_1_1_0.Args[1]
22496 v_1_1_0_0 := v_1_1_0.Args[0]
22497 if v_1_1_0_0.Op != OpAdd64 {
22498 break
22499 }
22500 _ = v_1_1_0_0.Args[1]
22501 if x != v_1_1_0_0.Args[0] {
22502 break
22503 }
22504 mul := v_1_1_0_0.Args[1]
22505 if mul.Op != OpHmul64 {
22506 break
22507 }
22508 _ = mul.Args[1]
22509 if x != mul.Args[0] {
22510 break
22511 }
22512 mul_1 := mul.Args[1]
22513 if mul_1.Op != OpConst64 {
22514 break
22515 }
22516 m := mul_1.AuxInt
22517 v_1_1_0_1 := v_1_1_0.Args[1]
22518 if v_1_1_0_1.Op != OpConst64 {
22519 break
22520 }
22521 s := v_1_1_0_1.AuxInt
22522 v_1_1_1 := v_1_1.Args[1]
22523 if v_1_1_1.Op != OpRsh64x64 {
22524 break
22525 }
22526 _ = v_1_1_1.Args[1]
22527 if x != v_1_1_1.Args[0] {
22528 break
22529 }
22530 v_1_1_1_1 := v_1_1_1.Args[1]
22531 if v_1_1_1_1.Op != OpConst64 {
22532 break
22533 }
22534 if v_1_1_1_1.AuxInt != 63 {
22535 break
22536 }
22537 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22538 break
22539 }
22540 v.reset(OpLeq64U)
22541 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22542 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22543 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22544 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22545 v3.AuxInt = int64(sdivisible(64, c).m)
22546 v2.AddArg(v3)
22547 v2.AddArg(x)
22548 v1.AddArg(v2)
22549 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22550 v4.AuxInt = int64(sdivisible(64, c).a)
22551 v1.AddArg(v4)
22552 v0.AddArg(v1)
22553 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22554 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22555 v0.AddArg(v5)
22556 v.AddArg(v0)
22557 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22558 v6.AuxInt = int64(sdivisible(64, c).max)
22559 v.AddArg(v6)
22560 return true
22561 }
22562
22563
22564
22565 for {
22566 _ = v.Args[1]
22567 x := v.Args[0]
22568 v_1 := v.Args[1]
22569 if v_1.Op != OpMul64 {
22570 break
22571 }
22572 _ = v_1.Args[1]
22573 v_1_0 := v_1.Args[0]
22574 if v_1_0.Op != OpSub64 {
22575 break
22576 }
22577 _ = v_1_0.Args[1]
22578 v_1_0_0 := v_1_0.Args[0]
22579 if v_1_0_0.Op != OpRsh64x64 {
22580 break
22581 }
22582 _ = v_1_0_0.Args[1]
22583 v_1_0_0_0 := v_1_0_0.Args[0]
22584 if v_1_0_0_0.Op != OpAdd64 {
22585 break
22586 }
22587 _ = v_1_0_0_0.Args[1]
22588 mul := v_1_0_0_0.Args[0]
22589 if mul.Op != OpHmul64 {
22590 break
22591 }
22592 _ = mul.Args[1]
22593 mul_0 := mul.Args[0]
22594 if mul_0.Op != OpConst64 {
22595 break
22596 }
22597 m := mul_0.AuxInt
22598 if x != mul.Args[1] {
22599 break
22600 }
22601 if x != v_1_0_0_0.Args[1] {
22602 break
22603 }
22604 v_1_0_0_1 := v_1_0_0.Args[1]
22605 if v_1_0_0_1.Op != OpConst64 {
22606 break
22607 }
22608 s := v_1_0_0_1.AuxInt
22609 v_1_0_1 := v_1_0.Args[1]
22610 if v_1_0_1.Op != OpRsh64x64 {
22611 break
22612 }
22613 _ = v_1_0_1.Args[1]
22614 if x != v_1_0_1.Args[0] {
22615 break
22616 }
22617 v_1_0_1_1 := v_1_0_1.Args[1]
22618 if v_1_0_1_1.Op != OpConst64 {
22619 break
22620 }
22621 if v_1_0_1_1.AuxInt != 63 {
22622 break
22623 }
22624 v_1_1 := v_1.Args[1]
22625 if v_1_1.Op != OpConst64 {
22626 break
22627 }
22628 c := v_1_1.AuxInt
22629 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22630 break
22631 }
22632 v.reset(OpLeq64U)
22633 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22634 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22635 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22636 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22637 v3.AuxInt = int64(sdivisible(64, c).m)
22638 v2.AddArg(v3)
22639 v2.AddArg(x)
22640 v1.AddArg(v2)
22641 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22642 v4.AuxInt = int64(sdivisible(64, c).a)
22643 v1.AddArg(v4)
22644 v0.AddArg(v1)
22645 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22646 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22647 v0.AddArg(v5)
22648 v.AddArg(v0)
22649 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22650 v6.AuxInt = int64(sdivisible(64, c).max)
22651 v.AddArg(v6)
22652 return true
22653 }
22654
22655
22656
22657 for {
22658 _ = v.Args[1]
22659 x := v.Args[0]
22660 v_1 := v.Args[1]
22661 if v_1.Op != OpMul64 {
22662 break
22663 }
22664 _ = v_1.Args[1]
22665 v_1_0 := v_1.Args[0]
22666 if v_1_0.Op != OpSub64 {
22667 break
22668 }
22669 _ = v_1_0.Args[1]
22670 v_1_0_0 := v_1_0.Args[0]
22671 if v_1_0_0.Op != OpRsh64x64 {
22672 break
22673 }
22674 _ = v_1_0_0.Args[1]
22675 v_1_0_0_0 := v_1_0_0.Args[0]
22676 if v_1_0_0_0.Op != OpAdd64 {
22677 break
22678 }
22679 _ = v_1_0_0_0.Args[1]
22680 mul := v_1_0_0_0.Args[0]
22681 if mul.Op != OpHmul64 {
22682 break
22683 }
22684 _ = mul.Args[1]
22685 if x != mul.Args[0] {
22686 break
22687 }
22688 mul_1 := mul.Args[1]
22689 if mul_1.Op != OpConst64 {
22690 break
22691 }
22692 m := mul_1.AuxInt
22693 if x != v_1_0_0_0.Args[1] {
22694 break
22695 }
22696 v_1_0_0_1 := v_1_0_0.Args[1]
22697 if v_1_0_0_1.Op != OpConst64 {
22698 break
22699 }
22700 s := v_1_0_0_1.AuxInt
22701 v_1_0_1 := v_1_0.Args[1]
22702 if v_1_0_1.Op != OpRsh64x64 {
22703 break
22704 }
22705 _ = v_1_0_1.Args[1]
22706 if x != v_1_0_1.Args[0] {
22707 break
22708 }
22709 v_1_0_1_1 := v_1_0_1.Args[1]
22710 if v_1_0_1_1.Op != OpConst64 {
22711 break
22712 }
22713 if v_1_0_1_1.AuxInt != 63 {
22714 break
22715 }
22716 v_1_1 := v_1.Args[1]
22717 if v_1_1.Op != OpConst64 {
22718 break
22719 }
22720 c := v_1_1.AuxInt
22721 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22722 break
22723 }
22724 v.reset(OpLeq64U)
22725 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22726 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22727 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22728 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22729 v3.AuxInt = int64(sdivisible(64, c).m)
22730 v2.AddArg(v3)
22731 v2.AddArg(x)
22732 v1.AddArg(v2)
22733 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22734 v4.AuxInt = int64(sdivisible(64, c).a)
22735 v1.AddArg(v4)
22736 v0.AddArg(v1)
22737 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22738 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22739 v0.AddArg(v5)
22740 v.AddArg(v0)
22741 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22742 v6.AuxInt = int64(sdivisible(64, c).max)
22743 v.AddArg(v6)
22744 return true
22745 }
22746
22747
22748
22749 for {
22750 _ = v.Args[1]
22751 x := v.Args[0]
22752 v_1 := v.Args[1]
22753 if v_1.Op != OpMul64 {
22754 break
22755 }
22756 _ = v_1.Args[1]
22757 v_1_0 := v_1.Args[0]
22758 if v_1_0.Op != OpSub64 {
22759 break
22760 }
22761 _ = v_1_0.Args[1]
22762 v_1_0_0 := v_1_0.Args[0]
22763 if v_1_0_0.Op != OpRsh64x64 {
22764 break
22765 }
22766 _ = v_1_0_0.Args[1]
22767 v_1_0_0_0 := v_1_0_0.Args[0]
22768 if v_1_0_0_0.Op != OpAdd64 {
22769 break
22770 }
22771 _ = v_1_0_0_0.Args[1]
22772 if x != v_1_0_0_0.Args[0] {
22773 break
22774 }
22775 mul := v_1_0_0_0.Args[1]
22776 if mul.Op != OpHmul64 {
22777 break
22778 }
22779 _ = mul.Args[1]
22780 mul_0 := mul.Args[0]
22781 if mul_0.Op != OpConst64 {
22782 break
22783 }
22784 m := mul_0.AuxInt
22785 if x != mul.Args[1] {
22786 break
22787 }
22788 v_1_0_0_1 := v_1_0_0.Args[1]
22789 if v_1_0_0_1.Op != OpConst64 {
22790 break
22791 }
22792 s := v_1_0_0_1.AuxInt
22793 v_1_0_1 := v_1_0.Args[1]
22794 if v_1_0_1.Op != OpRsh64x64 {
22795 break
22796 }
22797 _ = v_1_0_1.Args[1]
22798 if x != v_1_0_1.Args[0] {
22799 break
22800 }
22801 v_1_0_1_1 := v_1_0_1.Args[1]
22802 if v_1_0_1_1.Op != OpConst64 {
22803 break
22804 }
22805 if v_1_0_1_1.AuxInt != 63 {
22806 break
22807 }
22808 v_1_1 := v_1.Args[1]
22809 if v_1_1.Op != OpConst64 {
22810 break
22811 }
22812 c := v_1_1.AuxInt
22813 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22814 break
22815 }
22816 v.reset(OpLeq64U)
22817 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22818 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22819 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22820 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22821 v3.AuxInt = int64(sdivisible(64, c).m)
22822 v2.AddArg(v3)
22823 v2.AddArg(x)
22824 v1.AddArg(v2)
22825 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22826 v4.AuxInt = int64(sdivisible(64, c).a)
22827 v1.AddArg(v4)
22828 v0.AddArg(v1)
22829 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22830 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22831 v0.AddArg(v5)
22832 v.AddArg(v0)
22833 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22834 v6.AuxInt = int64(sdivisible(64, c).max)
22835 v.AddArg(v6)
22836 return true
22837 }
22838
22839
22840
22841 for {
22842 _ = v.Args[1]
22843 x := v.Args[0]
22844 v_1 := v.Args[1]
22845 if v_1.Op != OpMul64 {
22846 break
22847 }
22848 _ = v_1.Args[1]
22849 v_1_0 := v_1.Args[0]
22850 if v_1_0.Op != OpSub64 {
22851 break
22852 }
22853 _ = v_1_0.Args[1]
22854 v_1_0_0 := v_1_0.Args[0]
22855 if v_1_0_0.Op != OpRsh64x64 {
22856 break
22857 }
22858 _ = v_1_0_0.Args[1]
22859 v_1_0_0_0 := v_1_0_0.Args[0]
22860 if v_1_0_0_0.Op != OpAdd64 {
22861 break
22862 }
22863 _ = v_1_0_0_0.Args[1]
22864 if x != v_1_0_0_0.Args[0] {
22865 break
22866 }
22867 mul := v_1_0_0_0.Args[1]
22868 if mul.Op != OpHmul64 {
22869 break
22870 }
22871 _ = mul.Args[1]
22872 if x != mul.Args[0] {
22873 break
22874 }
22875 mul_1 := mul.Args[1]
22876 if mul_1.Op != OpConst64 {
22877 break
22878 }
22879 m := mul_1.AuxInt
22880 v_1_0_0_1 := v_1_0_0.Args[1]
22881 if v_1_0_0_1.Op != OpConst64 {
22882 break
22883 }
22884 s := v_1_0_0_1.AuxInt
22885 v_1_0_1 := v_1_0.Args[1]
22886 if v_1_0_1.Op != OpRsh64x64 {
22887 break
22888 }
22889 _ = v_1_0_1.Args[1]
22890 if x != v_1_0_1.Args[0] {
22891 break
22892 }
22893 v_1_0_1_1 := v_1_0_1.Args[1]
22894 if v_1_0_1_1.Op != OpConst64 {
22895 break
22896 }
22897 if v_1_0_1_1.AuxInt != 63 {
22898 break
22899 }
22900 v_1_1 := v_1.Args[1]
22901 if v_1_1.Op != OpConst64 {
22902 break
22903 }
22904 c := v_1_1.AuxInt
22905 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22906 break
22907 }
22908 v.reset(OpLeq64U)
22909 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
22910 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
22911 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
22912 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22913 v3.AuxInt = int64(sdivisible(64, c).m)
22914 v2.AddArg(v3)
22915 v2.AddArg(x)
22916 v1.AddArg(v2)
22917 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22918 v4.AuxInt = int64(sdivisible(64, c).a)
22919 v1.AddArg(v4)
22920 v0.AddArg(v1)
22921 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22922 v5.AuxInt = int64(64 - sdivisible(64, c).k)
22923 v0.AddArg(v5)
22924 v.AddArg(v0)
22925 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
22926 v6.AuxInt = int64(sdivisible(64, c).max)
22927 v.AddArg(v6)
22928 return true
22929 }
22930
22931
22932
22933 for {
22934 x := v.Args[1]
22935 v_0 := v.Args[0]
22936 if v_0.Op != OpMul64 {
22937 break
22938 }
22939 _ = v_0.Args[1]
22940 v_0_0 := v_0.Args[0]
22941 if v_0_0.Op != OpConst64 {
22942 break
22943 }
22944 c := v_0_0.AuxInt
22945 v_0_1 := v_0.Args[1]
22946 if v_0_1.Op != OpSub64 {
22947 break
22948 }
22949 _ = v_0_1.Args[1]
22950 v_0_1_0 := v_0_1.Args[0]
22951 if v_0_1_0.Op != OpRsh64x64 {
22952 break
22953 }
22954 _ = v_0_1_0.Args[1]
22955 v_0_1_0_0 := v_0_1_0.Args[0]
22956 if v_0_1_0_0.Op != OpAdd64 {
22957 break
22958 }
22959 _ = v_0_1_0_0.Args[1]
22960 mul := v_0_1_0_0.Args[0]
22961 if mul.Op != OpHmul64 {
22962 break
22963 }
22964 _ = mul.Args[1]
22965 mul_0 := mul.Args[0]
22966 if mul_0.Op != OpConst64 {
22967 break
22968 }
22969 m := mul_0.AuxInt
22970 if x != mul.Args[1] {
22971 break
22972 }
22973 if x != v_0_1_0_0.Args[1] {
22974 break
22975 }
22976 v_0_1_0_1 := v_0_1_0.Args[1]
22977 if v_0_1_0_1.Op != OpConst64 {
22978 break
22979 }
22980 s := v_0_1_0_1.AuxInt
22981 v_0_1_1 := v_0_1.Args[1]
22982 if v_0_1_1.Op != OpRsh64x64 {
22983 break
22984 }
22985 _ = v_0_1_1.Args[1]
22986 if x != v_0_1_1.Args[0] {
22987 break
22988 }
22989 v_0_1_1_1 := v_0_1_1.Args[1]
22990 if v_0_1_1_1.Op != OpConst64 {
22991 break
22992 }
22993 if v_0_1_1_1.AuxInt != 63 {
22994 break
22995 }
22996 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
22997 break
22998 }
22999 v.reset(OpLeq64U)
23000 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23001 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23002 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23003 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23004 v3.AuxInt = int64(sdivisible(64, c).m)
23005 v2.AddArg(v3)
23006 v2.AddArg(x)
23007 v1.AddArg(v2)
23008 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23009 v4.AuxInt = int64(sdivisible(64, c).a)
23010 v1.AddArg(v4)
23011 v0.AddArg(v1)
23012 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23013 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23014 v0.AddArg(v5)
23015 v.AddArg(v0)
23016 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23017 v6.AuxInt = int64(sdivisible(64, c).max)
23018 v.AddArg(v6)
23019 return true
23020 }
23021
23022
23023
23024 for {
23025 x := v.Args[1]
23026 v_0 := v.Args[0]
23027 if v_0.Op != OpMul64 {
23028 break
23029 }
23030 _ = v_0.Args[1]
23031 v_0_0 := v_0.Args[0]
23032 if v_0_0.Op != OpConst64 {
23033 break
23034 }
23035 c := v_0_0.AuxInt
23036 v_0_1 := v_0.Args[1]
23037 if v_0_1.Op != OpSub64 {
23038 break
23039 }
23040 _ = v_0_1.Args[1]
23041 v_0_1_0 := v_0_1.Args[0]
23042 if v_0_1_0.Op != OpRsh64x64 {
23043 break
23044 }
23045 _ = v_0_1_0.Args[1]
23046 v_0_1_0_0 := v_0_1_0.Args[0]
23047 if v_0_1_0_0.Op != OpAdd64 {
23048 break
23049 }
23050 _ = v_0_1_0_0.Args[1]
23051 mul := v_0_1_0_0.Args[0]
23052 if mul.Op != OpHmul64 {
23053 break
23054 }
23055 _ = mul.Args[1]
23056 if x != mul.Args[0] {
23057 break
23058 }
23059 mul_1 := mul.Args[1]
23060 if mul_1.Op != OpConst64 {
23061 break
23062 }
23063 m := mul_1.AuxInt
23064 if x != v_0_1_0_0.Args[1] {
23065 break
23066 }
23067 v_0_1_0_1 := v_0_1_0.Args[1]
23068 if v_0_1_0_1.Op != OpConst64 {
23069 break
23070 }
23071 s := v_0_1_0_1.AuxInt
23072 v_0_1_1 := v_0_1.Args[1]
23073 if v_0_1_1.Op != OpRsh64x64 {
23074 break
23075 }
23076 _ = v_0_1_1.Args[1]
23077 if x != v_0_1_1.Args[0] {
23078 break
23079 }
23080 v_0_1_1_1 := v_0_1_1.Args[1]
23081 if v_0_1_1_1.Op != OpConst64 {
23082 break
23083 }
23084 if v_0_1_1_1.AuxInt != 63 {
23085 break
23086 }
23087 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23088 break
23089 }
23090 v.reset(OpLeq64U)
23091 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23092 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23093 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23094 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23095 v3.AuxInt = int64(sdivisible(64, c).m)
23096 v2.AddArg(v3)
23097 v2.AddArg(x)
23098 v1.AddArg(v2)
23099 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23100 v4.AuxInt = int64(sdivisible(64, c).a)
23101 v1.AddArg(v4)
23102 v0.AddArg(v1)
23103 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23104 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23105 v0.AddArg(v5)
23106 v.AddArg(v0)
23107 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23108 v6.AuxInt = int64(sdivisible(64, c).max)
23109 v.AddArg(v6)
23110 return true
23111 }
23112
23113
23114
23115 for {
23116 x := v.Args[1]
23117 v_0 := v.Args[0]
23118 if v_0.Op != OpMul64 {
23119 break
23120 }
23121 _ = v_0.Args[1]
23122 v_0_0 := v_0.Args[0]
23123 if v_0_0.Op != OpConst64 {
23124 break
23125 }
23126 c := v_0_0.AuxInt
23127 v_0_1 := v_0.Args[1]
23128 if v_0_1.Op != OpSub64 {
23129 break
23130 }
23131 _ = v_0_1.Args[1]
23132 v_0_1_0 := v_0_1.Args[0]
23133 if v_0_1_0.Op != OpRsh64x64 {
23134 break
23135 }
23136 _ = v_0_1_0.Args[1]
23137 v_0_1_0_0 := v_0_1_0.Args[0]
23138 if v_0_1_0_0.Op != OpAdd64 {
23139 break
23140 }
23141 _ = v_0_1_0_0.Args[1]
23142 if x != v_0_1_0_0.Args[0] {
23143 break
23144 }
23145 mul := v_0_1_0_0.Args[1]
23146 if mul.Op != OpHmul64 {
23147 break
23148 }
23149 _ = mul.Args[1]
23150 mul_0 := mul.Args[0]
23151 if mul_0.Op != OpConst64 {
23152 break
23153 }
23154 m := mul_0.AuxInt
23155 if x != mul.Args[1] {
23156 break
23157 }
23158 v_0_1_0_1 := v_0_1_0.Args[1]
23159 if v_0_1_0_1.Op != OpConst64 {
23160 break
23161 }
23162 s := v_0_1_0_1.AuxInt
23163 v_0_1_1 := v_0_1.Args[1]
23164 if v_0_1_1.Op != OpRsh64x64 {
23165 break
23166 }
23167 _ = v_0_1_1.Args[1]
23168 if x != v_0_1_1.Args[0] {
23169 break
23170 }
23171 v_0_1_1_1 := v_0_1_1.Args[1]
23172 if v_0_1_1_1.Op != OpConst64 {
23173 break
23174 }
23175 if v_0_1_1_1.AuxInt != 63 {
23176 break
23177 }
23178 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23179 break
23180 }
23181 v.reset(OpLeq64U)
23182 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23183 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23184 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23185 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23186 v3.AuxInt = int64(sdivisible(64, c).m)
23187 v2.AddArg(v3)
23188 v2.AddArg(x)
23189 v1.AddArg(v2)
23190 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23191 v4.AuxInt = int64(sdivisible(64, c).a)
23192 v1.AddArg(v4)
23193 v0.AddArg(v1)
23194 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23195 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23196 v0.AddArg(v5)
23197 v.AddArg(v0)
23198 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23199 v6.AuxInt = int64(sdivisible(64, c).max)
23200 v.AddArg(v6)
23201 return true
23202 }
23203 return false
23204 }
23205 func rewriteValuegeneric_OpEq64_50(v *Value) bool {
23206 b := v.Block
23207 typ := &b.Func.Config.Types
23208
23209
23210
23211 for {
23212 x := v.Args[1]
23213 v_0 := v.Args[0]
23214 if v_0.Op != OpMul64 {
23215 break
23216 }
23217 _ = v_0.Args[1]
23218 v_0_0 := v_0.Args[0]
23219 if v_0_0.Op != OpConst64 {
23220 break
23221 }
23222 c := v_0_0.AuxInt
23223 v_0_1 := v_0.Args[1]
23224 if v_0_1.Op != OpSub64 {
23225 break
23226 }
23227 _ = v_0_1.Args[1]
23228 v_0_1_0 := v_0_1.Args[0]
23229 if v_0_1_0.Op != OpRsh64x64 {
23230 break
23231 }
23232 _ = v_0_1_0.Args[1]
23233 v_0_1_0_0 := v_0_1_0.Args[0]
23234 if v_0_1_0_0.Op != OpAdd64 {
23235 break
23236 }
23237 _ = v_0_1_0_0.Args[1]
23238 if x != v_0_1_0_0.Args[0] {
23239 break
23240 }
23241 mul := v_0_1_0_0.Args[1]
23242 if mul.Op != OpHmul64 {
23243 break
23244 }
23245 _ = mul.Args[1]
23246 if x != mul.Args[0] {
23247 break
23248 }
23249 mul_1 := mul.Args[1]
23250 if mul_1.Op != OpConst64 {
23251 break
23252 }
23253 m := mul_1.AuxInt
23254 v_0_1_0_1 := v_0_1_0.Args[1]
23255 if v_0_1_0_1.Op != OpConst64 {
23256 break
23257 }
23258 s := v_0_1_0_1.AuxInt
23259 v_0_1_1 := v_0_1.Args[1]
23260 if v_0_1_1.Op != OpRsh64x64 {
23261 break
23262 }
23263 _ = v_0_1_1.Args[1]
23264 if x != v_0_1_1.Args[0] {
23265 break
23266 }
23267 v_0_1_1_1 := v_0_1_1.Args[1]
23268 if v_0_1_1_1.Op != OpConst64 {
23269 break
23270 }
23271 if v_0_1_1_1.AuxInt != 63 {
23272 break
23273 }
23274 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23275 break
23276 }
23277 v.reset(OpLeq64U)
23278 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23279 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23280 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23281 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23282 v3.AuxInt = int64(sdivisible(64, c).m)
23283 v2.AddArg(v3)
23284 v2.AddArg(x)
23285 v1.AddArg(v2)
23286 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23287 v4.AuxInt = int64(sdivisible(64, c).a)
23288 v1.AddArg(v4)
23289 v0.AddArg(v1)
23290 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23291 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23292 v0.AddArg(v5)
23293 v.AddArg(v0)
23294 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23295 v6.AuxInt = int64(sdivisible(64, c).max)
23296 v.AddArg(v6)
23297 return true
23298 }
23299
23300
23301
23302 for {
23303 x := v.Args[1]
23304 v_0 := v.Args[0]
23305 if v_0.Op != OpMul64 {
23306 break
23307 }
23308 _ = v_0.Args[1]
23309 v_0_0 := v_0.Args[0]
23310 if v_0_0.Op != OpSub64 {
23311 break
23312 }
23313 _ = v_0_0.Args[1]
23314 v_0_0_0 := v_0_0.Args[0]
23315 if v_0_0_0.Op != OpRsh64x64 {
23316 break
23317 }
23318 _ = v_0_0_0.Args[1]
23319 v_0_0_0_0 := v_0_0_0.Args[0]
23320 if v_0_0_0_0.Op != OpAdd64 {
23321 break
23322 }
23323 _ = v_0_0_0_0.Args[1]
23324 mul := v_0_0_0_0.Args[0]
23325 if mul.Op != OpHmul64 {
23326 break
23327 }
23328 _ = mul.Args[1]
23329 mul_0 := mul.Args[0]
23330 if mul_0.Op != OpConst64 {
23331 break
23332 }
23333 m := mul_0.AuxInt
23334 if x != mul.Args[1] {
23335 break
23336 }
23337 if x != v_0_0_0_0.Args[1] {
23338 break
23339 }
23340 v_0_0_0_1 := v_0_0_0.Args[1]
23341 if v_0_0_0_1.Op != OpConst64 {
23342 break
23343 }
23344 s := v_0_0_0_1.AuxInt
23345 v_0_0_1 := v_0_0.Args[1]
23346 if v_0_0_1.Op != OpRsh64x64 {
23347 break
23348 }
23349 _ = v_0_0_1.Args[1]
23350 if x != v_0_0_1.Args[0] {
23351 break
23352 }
23353 v_0_0_1_1 := v_0_0_1.Args[1]
23354 if v_0_0_1_1.Op != OpConst64 {
23355 break
23356 }
23357 if v_0_0_1_1.AuxInt != 63 {
23358 break
23359 }
23360 v_0_1 := v_0.Args[1]
23361 if v_0_1.Op != OpConst64 {
23362 break
23363 }
23364 c := v_0_1.AuxInt
23365 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23366 break
23367 }
23368 v.reset(OpLeq64U)
23369 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23370 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23371 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23372 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23373 v3.AuxInt = int64(sdivisible(64, c).m)
23374 v2.AddArg(v3)
23375 v2.AddArg(x)
23376 v1.AddArg(v2)
23377 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23378 v4.AuxInt = int64(sdivisible(64, c).a)
23379 v1.AddArg(v4)
23380 v0.AddArg(v1)
23381 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23382 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23383 v0.AddArg(v5)
23384 v.AddArg(v0)
23385 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23386 v6.AuxInt = int64(sdivisible(64, c).max)
23387 v.AddArg(v6)
23388 return true
23389 }
23390
23391
23392
23393 for {
23394 x := v.Args[1]
23395 v_0 := v.Args[0]
23396 if v_0.Op != OpMul64 {
23397 break
23398 }
23399 _ = v_0.Args[1]
23400 v_0_0 := v_0.Args[0]
23401 if v_0_0.Op != OpSub64 {
23402 break
23403 }
23404 _ = v_0_0.Args[1]
23405 v_0_0_0 := v_0_0.Args[0]
23406 if v_0_0_0.Op != OpRsh64x64 {
23407 break
23408 }
23409 _ = v_0_0_0.Args[1]
23410 v_0_0_0_0 := v_0_0_0.Args[0]
23411 if v_0_0_0_0.Op != OpAdd64 {
23412 break
23413 }
23414 _ = v_0_0_0_0.Args[1]
23415 mul := v_0_0_0_0.Args[0]
23416 if mul.Op != OpHmul64 {
23417 break
23418 }
23419 _ = mul.Args[1]
23420 if x != mul.Args[0] {
23421 break
23422 }
23423 mul_1 := mul.Args[1]
23424 if mul_1.Op != OpConst64 {
23425 break
23426 }
23427 m := mul_1.AuxInt
23428 if x != v_0_0_0_0.Args[1] {
23429 break
23430 }
23431 v_0_0_0_1 := v_0_0_0.Args[1]
23432 if v_0_0_0_1.Op != OpConst64 {
23433 break
23434 }
23435 s := v_0_0_0_1.AuxInt
23436 v_0_0_1 := v_0_0.Args[1]
23437 if v_0_0_1.Op != OpRsh64x64 {
23438 break
23439 }
23440 _ = v_0_0_1.Args[1]
23441 if x != v_0_0_1.Args[0] {
23442 break
23443 }
23444 v_0_0_1_1 := v_0_0_1.Args[1]
23445 if v_0_0_1_1.Op != OpConst64 {
23446 break
23447 }
23448 if v_0_0_1_1.AuxInt != 63 {
23449 break
23450 }
23451 v_0_1 := v_0.Args[1]
23452 if v_0_1.Op != OpConst64 {
23453 break
23454 }
23455 c := v_0_1.AuxInt
23456 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23457 break
23458 }
23459 v.reset(OpLeq64U)
23460 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23461 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23462 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23463 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23464 v3.AuxInt = int64(sdivisible(64, c).m)
23465 v2.AddArg(v3)
23466 v2.AddArg(x)
23467 v1.AddArg(v2)
23468 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23469 v4.AuxInt = int64(sdivisible(64, c).a)
23470 v1.AddArg(v4)
23471 v0.AddArg(v1)
23472 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23473 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23474 v0.AddArg(v5)
23475 v.AddArg(v0)
23476 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23477 v6.AuxInt = int64(sdivisible(64, c).max)
23478 v.AddArg(v6)
23479 return true
23480 }
23481
23482
23483
23484 for {
23485 x := v.Args[1]
23486 v_0 := v.Args[0]
23487 if v_0.Op != OpMul64 {
23488 break
23489 }
23490 _ = v_0.Args[1]
23491 v_0_0 := v_0.Args[0]
23492 if v_0_0.Op != OpSub64 {
23493 break
23494 }
23495 _ = v_0_0.Args[1]
23496 v_0_0_0 := v_0_0.Args[0]
23497 if v_0_0_0.Op != OpRsh64x64 {
23498 break
23499 }
23500 _ = v_0_0_0.Args[1]
23501 v_0_0_0_0 := v_0_0_0.Args[0]
23502 if v_0_0_0_0.Op != OpAdd64 {
23503 break
23504 }
23505 _ = v_0_0_0_0.Args[1]
23506 if x != v_0_0_0_0.Args[0] {
23507 break
23508 }
23509 mul := v_0_0_0_0.Args[1]
23510 if mul.Op != OpHmul64 {
23511 break
23512 }
23513 _ = mul.Args[1]
23514 mul_0 := mul.Args[0]
23515 if mul_0.Op != OpConst64 {
23516 break
23517 }
23518 m := mul_0.AuxInt
23519 if x != mul.Args[1] {
23520 break
23521 }
23522 v_0_0_0_1 := v_0_0_0.Args[1]
23523 if v_0_0_0_1.Op != OpConst64 {
23524 break
23525 }
23526 s := v_0_0_0_1.AuxInt
23527 v_0_0_1 := v_0_0.Args[1]
23528 if v_0_0_1.Op != OpRsh64x64 {
23529 break
23530 }
23531 _ = v_0_0_1.Args[1]
23532 if x != v_0_0_1.Args[0] {
23533 break
23534 }
23535 v_0_0_1_1 := v_0_0_1.Args[1]
23536 if v_0_0_1_1.Op != OpConst64 {
23537 break
23538 }
23539 if v_0_0_1_1.AuxInt != 63 {
23540 break
23541 }
23542 v_0_1 := v_0.Args[1]
23543 if v_0_1.Op != OpConst64 {
23544 break
23545 }
23546 c := v_0_1.AuxInt
23547 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23548 break
23549 }
23550 v.reset(OpLeq64U)
23551 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23552 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23553 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23554 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23555 v3.AuxInt = int64(sdivisible(64, c).m)
23556 v2.AddArg(v3)
23557 v2.AddArg(x)
23558 v1.AddArg(v2)
23559 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23560 v4.AuxInt = int64(sdivisible(64, c).a)
23561 v1.AddArg(v4)
23562 v0.AddArg(v1)
23563 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23564 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23565 v0.AddArg(v5)
23566 v.AddArg(v0)
23567 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23568 v6.AuxInt = int64(sdivisible(64, c).max)
23569 v.AddArg(v6)
23570 return true
23571 }
23572
23573
23574
23575 for {
23576 x := v.Args[1]
23577 v_0 := v.Args[0]
23578 if v_0.Op != OpMul64 {
23579 break
23580 }
23581 _ = v_0.Args[1]
23582 v_0_0 := v_0.Args[0]
23583 if v_0_0.Op != OpSub64 {
23584 break
23585 }
23586 _ = v_0_0.Args[1]
23587 v_0_0_0 := v_0_0.Args[0]
23588 if v_0_0_0.Op != OpRsh64x64 {
23589 break
23590 }
23591 _ = v_0_0_0.Args[1]
23592 v_0_0_0_0 := v_0_0_0.Args[0]
23593 if v_0_0_0_0.Op != OpAdd64 {
23594 break
23595 }
23596 _ = v_0_0_0_0.Args[1]
23597 if x != v_0_0_0_0.Args[0] {
23598 break
23599 }
23600 mul := v_0_0_0_0.Args[1]
23601 if mul.Op != OpHmul64 {
23602 break
23603 }
23604 _ = mul.Args[1]
23605 if x != mul.Args[0] {
23606 break
23607 }
23608 mul_1 := mul.Args[1]
23609 if mul_1.Op != OpConst64 {
23610 break
23611 }
23612 m := mul_1.AuxInt
23613 v_0_0_0_1 := v_0_0_0.Args[1]
23614 if v_0_0_0_1.Op != OpConst64 {
23615 break
23616 }
23617 s := v_0_0_0_1.AuxInt
23618 v_0_0_1 := v_0_0.Args[1]
23619 if v_0_0_1.Op != OpRsh64x64 {
23620 break
23621 }
23622 _ = v_0_0_1.Args[1]
23623 if x != v_0_0_1.Args[0] {
23624 break
23625 }
23626 v_0_0_1_1 := v_0_0_1.Args[1]
23627 if v_0_0_1_1.Op != OpConst64 {
23628 break
23629 }
23630 if v_0_0_1_1.AuxInt != 63 {
23631 break
23632 }
23633 v_0_1 := v_0.Args[1]
23634 if v_0_1.Op != OpConst64 {
23635 break
23636 }
23637 c := v_0_1.AuxInt
23638 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) {
23639 break
23640 }
23641 v.reset(OpLeq64U)
23642 v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64)
23643 v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64)
23644 v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64)
23645 v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23646 v3.AuxInt = int64(sdivisible(64, c).m)
23647 v2.AddArg(v3)
23648 v2.AddArg(x)
23649 v1.AddArg(v2)
23650 v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23651 v4.AuxInt = int64(sdivisible(64, c).a)
23652 v1.AddArg(v4)
23653 v0.AddArg(v1)
23654 v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23655 v5.AuxInt = int64(64 - sdivisible(64, c).k)
23656 v0.AddArg(v5)
23657 v.AddArg(v0)
23658 v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
23659 v6.AuxInt = int64(sdivisible(64, c).max)
23660 v.AddArg(v6)
23661 return true
23662 }
23663
23664
23665
23666 for {
23667 _ = v.Args[1]
23668 n := v.Args[0]
23669 v_1 := v.Args[1]
23670 if v_1.Op != OpLsh64x64 {
23671 break
23672 }
23673 _ = v_1.Args[1]
23674 v_1_0 := v_1.Args[0]
23675 if v_1_0.Op != OpRsh64x64 {
23676 break
23677 }
23678 _ = v_1_0.Args[1]
23679 v_1_0_0 := v_1_0.Args[0]
23680 if v_1_0_0.Op != OpAdd64 {
23681 break
23682 }
23683 t := v_1_0_0.Type
23684 _ = v_1_0_0.Args[1]
23685 if n != v_1_0_0.Args[0] {
23686 break
23687 }
23688 v_1_0_0_1 := v_1_0_0.Args[1]
23689 if v_1_0_0_1.Op != OpRsh64Ux64 {
23690 break
23691 }
23692 if v_1_0_0_1.Type != t {
23693 break
23694 }
23695 _ = v_1_0_0_1.Args[1]
23696 v_1_0_0_1_0 := v_1_0_0_1.Args[0]
23697 if v_1_0_0_1_0.Op != OpRsh64x64 {
23698 break
23699 }
23700 if v_1_0_0_1_0.Type != t {
23701 break
23702 }
23703 _ = v_1_0_0_1_0.Args[1]
23704 if n != v_1_0_0_1_0.Args[0] {
23705 break
23706 }
23707 v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1]
23708 if v_1_0_0_1_0_1.Op != OpConst64 {
23709 break
23710 }
23711 if v_1_0_0_1_0_1.Type != typ.UInt64 {
23712 break
23713 }
23714 if v_1_0_0_1_0_1.AuxInt != 63 {
23715 break
23716 }
23717 v_1_0_0_1_1 := v_1_0_0_1.Args[1]
23718 if v_1_0_0_1_1.Op != OpConst64 {
23719 break
23720 }
23721 if v_1_0_0_1_1.Type != typ.UInt64 {
23722 break
23723 }
23724 kbar := v_1_0_0_1_1.AuxInt
23725 v_1_0_1 := v_1_0.Args[1]
23726 if v_1_0_1.Op != OpConst64 {
23727 break
23728 }
23729 if v_1_0_1.Type != typ.UInt64 {
23730 break
23731 }
23732 k := v_1_0_1.AuxInt
23733 v_1_1 := v_1.Args[1]
23734 if v_1_1.Op != OpConst64 {
23735 break
23736 }
23737 if v_1_1.Type != typ.UInt64 {
23738 break
23739 }
23740 if v_1_1.AuxInt != k {
23741 break
23742 }
23743 if !(k > 0 && k < 63 && kbar == 64-k) {
23744 break
23745 }
23746 v.reset(OpEq64)
23747 v0 := b.NewValue0(v.Pos, OpAnd64, t)
23748 v0.AddArg(n)
23749 v1 := b.NewValue0(v.Pos, OpConst64, t)
23750 v1.AuxInt = int64(1<<uint(k) - 1)
23751 v0.AddArg(v1)
23752 v.AddArg(v0)
23753 v2 := b.NewValue0(v.Pos, OpConst64, t)
23754 v2.AuxInt = 0
23755 v.AddArg(v2)
23756 return true
23757 }
23758
23759
23760
23761 for {
23762 _ = v.Args[1]
23763 n := v.Args[0]
23764 v_1 := v.Args[1]
23765 if v_1.Op != OpLsh64x64 {
23766 break
23767 }
23768 _ = v_1.Args[1]
23769 v_1_0 := v_1.Args[0]
23770 if v_1_0.Op != OpRsh64x64 {
23771 break
23772 }
23773 _ = v_1_0.Args[1]
23774 v_1_0_0 := v_1_0.Args[0]
23775 if v_1_0_0.Op != OpAdd64 {
23776 break
23777 }
23778 t := v_1_0_0.Type
23779 _ = v_1_0_0.Args[1]
23780 v_1_0_0_0 := v_1_0_0.Args[0]
23781 if v_1_0_0_0.Op != OpRsh64Ux64 {
23782 break
23783 }
23784 if v_1_0_0_0.Type != t {
23785 break
23786 }
23787 _ = v_1_0_0_0.Args[1]
23788 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
23789 if v_1_0_0_0_0.Op != OpRsh64x64 {
23790 break
23791 }
23792 if v_1_0_0_0_0.Type != t {
23793 break
23794 }
23795 _ = v_1_0_0_0_0.Args[1]
23796 if n != v_1_0_0_0_0.Args[0] {
23797 break
23798 }
23799 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
23800 if v_1_0_0_0_0_1.Op != OpConst64 {
23801 break
23802 }
23803 if v_1_0_0_0_0_1.Type != typ.UInt64 {
23804 break
23805 }
23806 if v_1_0_0_0_0_1.AuxInt != 63 {
23807 break
23808 }
23809 v_1_0_0_0_1 := v_1_0_0_0.Args[1]
23810 if v_1_0_0_0_1.Op != OpConst64 {
23811 break
23812 }
23813 if v_1_0_0_0_1.Type != typ.UInt64 {
23814 break
23815 }
23816 kbar := v_1_0_0_0_1.AuxInt
23817 if n != v_1_0_0.Args[1] {
23818 break
23819 }
23820 v_1_0_1 := v_1_0.Args[1]
23821 if v_1_0_1.Op != OpConst64 {
23822 break
23823 }
23824 if v_1_0_1.Type != typ.UInt64 {
23825 break
23826 }
23827 k := v_1_0_1.AuxInt
23828 v_1_1 := v_1.Args[1]
23829 if v_1_1.Op != OpConst64 {
23830 break
23831 }
23832 if v_1_1.Type != typ.UInt64 {
23833 break
23834 }
23835 if v_1_1.AuxInt != k {
23836 break
23837 }
23838 if !(k > 0 && k < 63 && kbar == 64-k) {
23839 break
23840 }
23841 v.reset(OpEq64)
23842 v0 := b.NewValue0(v.Pos, OpAnd64, t)
23843 v0.AddArg(n)
23844 v1 := b.NewValue0(v.Pos, OpConst64, t)
23845 v1.AuxInt = int64(1<<uint(k) - 1)
23846 v0.AddArg(v1)
23847 v.AddArg(v0)
23848 v2 := b.NewValue0(v.Pos, OpConst64, t)
23849 v2.AuxInt = 0
23850 v.AddArg(v2)
23851 return true
23852 }
23853
23854
23855
23856 for {
23857 n := v.Args[1]
23858 v_0 := v.Args[0]
23859 if v_0.Op != OpLsh64x64 {
23860 break
23861 }
23862 _ = v_0.Args[1]
23863 v_0_0 := v_0.Args[0]
23864 if v_0_0.Op != OpRsh64x64 {
23865 break
23866 }
23867 _ = v_0_0.Args[1]
23868 v_0_0_0 := v_0_0.Args[0]
23869 if v_0_0_0.Op != OpAdd64 {
23870 break
23871 }
23872 t := v_0_0_0.Type
23873 _ = v_0_0_0.Args[1]
23874 if n != v_0_0_0.Args[0] {
23875 break
23876 }
23877 v_0_0_0_1 := v_0_0_0.Args[1]
23878 if v_0_0_0_1.Op != OpRsh64Ux64 {
23879 break
23880 }
23881 if v_0_0_0_1.Type != t {
23882 break
23883 }
23884 _ = v_0_0_0_1.Args[1]
23885 v_0_0_0_1_0 := v_0_0_0_1.Args[0]
23886 if v_0_0_0_1_0.Op != OpRsh64x64 {
23887 break
23888 }
23889 if v_0_0_0_1_0.Type != t {
23890 break
23891 }
23892 _ = v_0_0_0_1_0.Args[1]
23893 if n != v_0_0_0_1_0.Args[0] {
23894 break
23895 }
23896 v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1]
23897 if v_0_0_0_1_0_1.Op != OpConst64 {
23898 break
23899 }
23900 if v_0_0_0_1_0_1.Type != typ.UInt64 {
23901 break
23902 }
23903 if v_0_0_0_1_0_1.AuxInt != 63 {
23904 break
23905 }
23906 v_0_0_0_1_1 := v_0_0_0_1.Args[1]
23907 if v_0_0_0_1_1.Op != OpConst64 {
23908 break
23909 }
23910 if v_0_0_0_1_1.Type != typ.UInt64 {
23911 break
23912 }
23913 kbar := v_0_0_0_1_1.AuxInt
23914 v_0_0_1 := v_0_0.Args[1]
23915 if v_0_0_1.Op != OpConst64 {
23916 break
23917 }
23918 if v_0_0_1.Type != typ.UInt64 {
23919 break
23920 }
23921 k := v_0_0_1.AuxInt
23922 v_0_1 := v_0.Args[1]
23923 if v_0_1.Op != OpConst64 {
23924 break
23925 }
23926 if v_0_1.Type != typ.UInt64 {
23927 break
23928 }
23929 if v_0_1.AuxInt != k {
23930 break
23931 }
23932 if !(k > 0 && k < 63 && kbar == 64-k) {
23933 break
23934 }
23935 v.reset(OpEq64)
23936 v0 := b.NewValue0(v.Pos, OpAnd64, t)
23937 v0.AddArg(n)
23938 v1 := b.NewValue0(v.Pos, OpConst64, t)
23939 v1.AuxInt = int64(1<<uint(k) - 1)
23940 v0.AddArg(v1)
23941 v.AddArg(v0)
23942 v2 := b.NewValue0(v.Pos, OpConst64, t)
23943 v2.AuxInt = 0
23944 v.AddArg(v2)
23945 return true
23946 }
23947
23948
23949
23950 for {
23951 n := v.Args[1]
23952 v_0 := v.Args[0]
23953 if v_0.Op != OpLsh64x64 {
23954 break
23955 }
23956 _ = v_0.Args[1]
23957 v_0_0 := v_0.Args[0]
23958 if v_0_0.Op != OpRsh64x64 {
23959 break
23960 }
23961 _ = v_0_0.Args[1]
23962 v_0_0_0 := v_0_0.Args[0]
23963 if v_0_0_0.Op != OpAdd64 {
23964 break
23965 }
23966 t := v_0_0_0.Type
23967 _ = v_0_0_0.Args[1]
23968 v_0_0_0_0 := v_0_0_0.Args[0]
23969 if v_0_0_0_0.Op != OpRsh64Ux64 {
23970 break
23971 }
23972 if v_0_0_0_0.Type != t {
23973 break
23974 }
23975 _ = v_0_0_0_0.Args[1]
23976 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
23977 if v_0_0_0_0_0.Op != OpRsh64x64 {
23978 break
23979 }
23980 if v_0_0_0_0_0.Type != t {
23981 break
23982 }
23983 _ = v_0_0_0_0_0.Args[1]
23984 if n != v_0_0_0_0_0.Args[0] {
23985 break
23986 }
23987 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
23988 if v_0_0_0_0_0_1.Op != OpConst64 {
23989 break
23990 }
23991 if v_0_0_0_0_0_1.Type != typ.UInt64 {
23992 break
23993 }
23994 if v_0_0_0_0_0_1.AuxInt != 63 {
23995 break
23996 }
23997 v_0_0_0_0_1 := v_0_0_0_0.Args[1]
23998 if v_0_0_0_0_1.Op != OpConst64 {
23999 break
24000 }
24001 if v_0_0_0_0_1.Type != typ.UInt64 {
24002 break
24003 }
24004 kbar := v_0_0_0_0_1.AuxInt
24005 if n != v_0_0_0.Args[1] {
24006 break
24007 }
24008 v_0_0_1 := v_0_0.Args[1]
24009 if v_0_0_1.Op != OpConst64 {
24010 break
24011 }
24012 if v_0_0_1.Type != typ.UInt64 {
24013 break
24014 }
24015 k := v_0_0_1.AuxInt
24016 v_0_1 := v_0.Args[1]
24017 if v_0_1.Op != OpConst64 {
24018 break
24019 }
24020 if v_0_1.Type != typ.UInt64 {
24021 break
24022 }
24023 if v_0_1.AuxInt != k {
24024 break
24025 }
24026 if !(k > 0 && k < 63 && kbar == 64-k) {
24027 break
24028 }
24029 v.reset(OpEq64)
24030 v0 := b.NewValue0(v.Pos, OpAnd64, t)
24031 v0.AddArg(n)
24032 v1 := b.NewValue0(v.Pos, OpConst64, t)
24033 v1.AuxInt = int64(1<<uint(k) - 1)
24034 v0.AddArg(v1)
24035 v.AddArg(v0)
24036 v2 := b.NewValue0(v.Pos, OpConst64, t)
24037 v2.AuxInt = 0
24038 v.AddArg(v2)
24039 return true
24040 }
24041
24042
24043
24044 for {
24045 _ = v.Args[1]
24046 s := v.Args[0]
24047 if s.Op != OpSub64 {
24048 break
24049 }
24050 y := s.Args[1]
24051 x := s.Args[0]
24052 v_1 := v.Args[1]
24053 if v_1.Op != OpConst64 {
24054 break
24055 }
24056 if v_1.AuxInt != 0 {
24057 break
24058 }
24059 if !(s.Uses == 1) {
24060 break
24061 }
24062 v.reset(OpEq64)
24063 v.AddArg(x)
24064 v.AddArg(y)
24065 return true
24066 }
24067 return false
24068 }
24069 func rewriteValuegeneric_OpEq64_60(v *Value) bool {
24070
24071
24072
24073 for {
24074 _ = v.Args[1]
24075 v_0 := v.Args[0]
24076 if v_0.Op != OpConst64 {
24077 break
24078 }
24079 if v_0.AuxInt != 0 {
24080 break
24081 }
24082 s := v.Args[1]
24083 if s.Op != OpSub64 {
24084 break
24085 }
24086 y := s.Args[1]
24087 x := s.Args[0]
24088 if !(s.Uses == 1) {
24089 break
24090 }
24091 v.reset(OpEq64)
24092 v.AddArg(x)
24093 v.AddArg(y)
24094 return true
24095 }
24096 return false
24097 }
24098 func rewriteValuegeneric_OpEq64F_0(v *Value) bool {
24099
24100
24101
24102 for {
24103 _ = v.Args[1]
24104 v_0 := v.Args[0]
24105 if v_0.Op != OpConst64F {
24106 break
24107 }
24108 c := v_0.AuxInt
24109 v_1 := v.Args[1]
24110 if v_1.Op != OpConst64F {
24111 break
24112 }
24113 d := v_1.AuxInt
24114 v.reset(OpConstBool)
24115 v.AuxInt = b2i(auxTo64F(c) == auxTo64F(d))
24116 return true
24117 }
24118
24119
24120
24121 for {
24122 _ = v.Args[1]
24123 v_0 := v.Args[0]
24124 if v_0.Op != OpConst64F {
24125 break
24126 }
24127 d := v_0.AuxInt
24128 v_1 := v.Args[1]
24129 if v_1.Op != OpConst64F {
24130 break
24131 }
24132 c := v_1.AuxInt
24133 v.reset(OpConstBool)
24134 v.AuxInt = b2i(auxTo64F(c) == auxTo64F(d))
24135 return true
24136 }
24137 return false
24138 }
24139 func rewriteValuegeneric_OpEq8_0(v *Value) bool {
24140 b := v.Block
24141 config := b.Func.Config
24142 typ := &b.Func.Config.Types
24143
24144
24145
24146 for {
24147 x := v.Args[1]
24148 if x != v.Args[0] {
24149 break
24150 }
24151 v.reset(OpConstBool)
24152 v.AuxInt = 1
24153 return true
24154 }
24155
24156
24157
24158 for {
24159 _ = v.Args[1]
24160 v_0 := v.Args[0]
24161 if v_0.Op != OpConst8 {
24162 break
24163 }
24164 t := v_0.Type
24165 c := v_0.AuxInt
24166 v_1 := v.Args[1]
24167 if v_1.Op != OpAdd8 {
24168 break
24169 }
24170 x := v_1.Args[1]
24171 v_1_0 := v_1.Args[0]
24172 if v_1_0.Op != OpConst8 {
24173 break
24174 }
24175 if v_1_0.Type != t {
24176 break
24177 }
24178 d := v_1_0.AuxInt
24179 v.reset(OpEq8)
24180 v0 := b.NewValue0(v.Pos, OpConst8, t)
24181 v0.AuxInt = int64(int8(c - d))
24182 v.AddArg(v0)
24183 v.AddArg(x)
24184 return true
24185 }
24186
24187
24188
24189 for {
24190 _ = v.Args[1]
24191 v_0 := v.Args[0]
24192 if v_0.Op != OpConst8 {
24193 break
24194 }
24195 t := v_0.Type
24196 c := v_0.AuxInt
24197 v_1 := v.Args[1]
24198 if v_1.Op != OpAdd8 {
24199 break
24200 }
24201 _ = v_1.Args[1]
24202 x := v_1.Args[0]
24203 v_1_1 := v_1.Args[1]
24204 if v_1_1.Op != OpConst8 {
24205 break
24206 }
24207 if v_1_1.Type != t {
24208 break
24209 }
24210 d := v_1_1.AuxInt
24211 v.reset(OpEq8)
24212 v0 := b.NewValue0(v.Pos, OpConst8, t)
24213 v0.AuxInt = int64(int8(c - d))
24214 v.AddArg(v0)
24215 v.AddArg(x)
24216 return true
24217 }
24218
24219
24220
24221 for {
24222 _ = v.Args[1]
24223 v_0 := v.Args[0]
24224 if v_0.Op != OpAdd8 {
24225 break
24226 }
24227 x := v_0.Args[1]
24228 v_0_0 := v_0.Args[0]
24229 if v_0_0.Op != OpConst8 {
24230 break
24231 }
24232 t := v_0_0.Type
24233 d := v_0_0.AuxInt
24234 v_1 := v.Args[1]
24235 if v_1.Op != OpConst8 {
24236 break
24237 }
24238 if v_1.Type != t {
24239 break
24240 }
24241 c := v_1.AuxInt
24242 v.reset(OpEq8)
24243 v0 := b.NewValue0(v.Pos, OpConst8, t)
24244 v0.AuxInt = int64(int8(c - d))
24245 v.AddArg(v0)
24246 v.AddArg(x)
24247 return true
24248 }
24249
24250
24251
24252 for {
24253 _ = v.Args[1]
24254 v_0 := v.Args[0]
24255 if v_0.Op != OpAdd8 {
24256 break
24257 }
24258 _ = v_0.Args[1]
24259 x := v_0.Args[0]
24260 v_0_1 := v_0.Args[1]
24261 if v_0_1.Op != OpConst8 {
24262 break
24263 }
24264 t := v_0_1.Type
24265 d := v_0_1.AuxInt
24266 v_1 := v.Args[1]
24267 if v_1.Op != OpConst8 {
24268 break
24269 }
24270 if v_1.Type != t {
24271 break
24272 }
24273 c := v_1.AuxInt
24274 v.reset(OpEq8)
24275 v0 := b.NewValue0(v.Pos, OpConst8, t)
24276 v0.AuxInt = int64(int8(c - d))
24277 v.AddArg(v0)
24278 v.AddArg(x)
24279 return true
24280 }
24281
24282
24283
24284 for {
24285 _ = v.Args[1]
24286 v_0 := v.Args[0]
24287 if v_0.Op != OpConst8 {
24288 break
24289 }
24290 c := v_0.AuxInt
24291 v_1 := v.Args[1]
24292 if v_1.Op != OpConst8 {
24293 break
24294 }
24295 d := v_1.AuxInt
24296 v.reset(OpConstBool)
24297 v.AuxInt = b2i(c == d)
24298 return true
24299 }
24300
24301
24302
24303 for {
24304 _ = v.Args[1]
24305 v_0 := v.Args[0]
24306 if v_0.Op != OpConst8 {
24307 break
24308 }
24309 d := v_0.AuxInt
24310 v_1 := v.Args[1]
24311 if v_1.Op != OpConst8 {
24312 break
24313 }
24314 c := v_1.AuxInt
24315 v.reset(OpConstBool)
24316 v.AuxInt = b2i(c == d)
24317 return true
24318 }
24319
24320
24321
24322 for {
24323 _ = v.Args[1]
24324 v_0 := v.Args[0]
24325 if v_0.Op != OpMod8u {
24326 break
24327 }
24328 _ = v_0.Args[1]
24329 x := v_0.Args[0]
24330 v_0_1 := v_0.Args[1]
24331 if v_0_1.Op != OpConst8 {
24332 break
24333 }
24334 c := v_0_1.AuxInt
24335 v_1 := v.Args[1]
24336 if v_1.Op != OpConst8 {
24337 break
24338 }
24339 if v_1.AuxInt != 0 {
24340 break
24341 }
24342 if !(x.Op != OpConst8 && udivisibleOK(8, c) && !hasSmallRotate(config)) {
24343 break
24344 }
24345 v.reset(OpEq32)
24346 v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32)
24347 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
24348 v1.AddArg(x)
24349 v0.AddArg(v1)
24350 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
24351 v2.AuxInt = c & 0xff
24352 v0.AddArg(v2)
24353 v.AddArg(v0)
24354 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
24355 v3.AuxInt = 0
24356 v.AddArg(v3)
24357 return true
24358 }
24359
24360
24361
24362 for {
24363 _ = v.Args[1]
24364 v_0 := v.Args[0]
24365 if v_0.Op != OpConst8 {
24366 break
24367 }
24368 if v_0.AuxInt != 0 {
24369 break
24370 }
24371 v_1 := v.Args[1]
24372 if v_1.Op != OpMod8u {
24373 break
24374 }
24375 _ = v_1.Args[1]
24376 x := v_1.Args[0]
24377 v_1_1 := v_1.Args[1]
24378 if v_1_1.Op != OpConst8 {
24379 break
24380 }
24381 c := v_1_1.AuxInt
24382 if !(x.Op != OpConst8 && udivisibleOK(8, c) && !hasSmallRotate(config)) {
24383 break
24384 }
24385 v.reset(OpEq32)
24386 v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32)
24387 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
24388 v1.AddArg(x)
24389 v0.AddArg(v1)
24390 v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
24391 v2.AuxInt = c & 0xff
24392 v0.AddArg(v2)
24393 v.AddArg(v0)
24394 v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32)
24395 v3.AuxInt = 0
24396 v.AddArg(v3)
24397 return true
24398 }
24399
24400
24401
24402 for {
24403 _ = v.Args[1]
24404 v_0 := v.Args[0]
24405 if v_0.Op != OpMod8 {
24406 break
24407 }
24408 _ = v_0.Args[1]
24409 x := v_0.Args[0]
24410 v_0_1 := v_0.Args[1]
24411 if v_0_1.Op != OpConst8 {
24412 break
24413 }
24414 c := v_0_1.AuxInt
24415 v_1 := v.Args[1]
24416 if v_1.Op != OpConst8 {
24417 break
24418 }
24419 if v_1.AuxInt != 0 {
24420 break
24421 }
24422 if !(x.Op != OpConst8 && sdivisibleOK(8, c) && !hasSmallRotate(config)) {
24423 break
24424 }
24425 v.reset(OpEq32)
24426 v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32)
24427 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
24428 v1.AddArg(x)
24429 v0.AddArg(v1)
24430 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
24431 v2.AuxInt = c
24432 v0.AddArg(v2)
24433 v.AddArg(v0)
24434 v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
24435 v3.AuxInt = 0
24436 v.AddArg(v3)
24437 return true
24438 }
24439 return false
24440 }
24441 func rewriteValuegeneric_OpEq8_10(v *Value) bool {
24442 b := v.Block
24443 config := b.Func.Config
24444 typ := &b.Func.Config.Types
24445
24446
24447
24448 for {
24449 _ = v.Args[1]
24450 v_0 := v.Args[0]
24451 if v_0.Op != OpConst8 {
24452 break
24453 }
24454 if v_0.AuxInt != 0 {
24455 break
24456 }
24457 v_1 := v.Args[1]
24458 if v_1.Op != OpMod8 {
24459 break
24460 }
24461 _ = v_1.Args[1]
24462 x := v_1.Args[0]
24463 v_1_1 := v_1.Args[1]
24464 if v_1_1.Op != OpConst8 {
24465 break
24466 }
24467 c := v_1_1.AuxInt
24468 if !(x.Op != OpConst8 && sdivisibleOK(8, c) && !hasSmallRotate(config)) {
24469 break
24470 }
24471 v.reset(OpEq32)
24472 v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32)
24473 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
24474 v1.AddArg(x)
24475 v0.AddArg(v1)
24476 v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
24477 v2.AuxInt = c
24478 v0.AddArg(v2)
24479 v.AddArg(v0)
24480 v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32)
24481 v3.AuxInt = 0
24482 v.AddArg(v3)
24483 return true
24484 }
24485
24486
24487
24488 for {
24489 _ = v.Args[1]
24490 x := v.Args[0]
24491 v_1 := v.Args[1]
24492 if v_1.Op != OpMul8 {
24493 break
24494 }
24495 _ = v_1.Args[1]
24496 v_1_0 := v_1.Args[0]
24497 if v_1_0.Op != OpConst8 {
24498 break
24499 }
24500 c := v_1_0.AuxInt
24501 v_1_1 := v_1.Args[1]
24502 if v_1_1.Op != OpTrunc32to8 {
24503 break
24504 }
24505 v_1_1_0 := v_1_1.Args[0]
24506 if v_1_1_0.Op != OpRsh32Ux64 {
24507 break
24508 }
24509 _ = v_1_1_0.Args[1]
24510 mul := v_1_1_0.Args[0]
24511 if mul.Op != OpMul32 {
24512 break
24513 }
24514 _ = mul.Args[1]
24515 mul_0 := mul.Args[0]
24516 if mul_0.Op != OpConst32 {
24517 break
24518 }
24519 m := mul_0.AuxInt
24520 mul_1 := mul.Args[1]
24521 if mul_1.Op != OpZeroExt8to32 {
24522 break
24523 }
24524 if x != mul_1.Args[0] {
24525 break
24526 }
24527 v_1_1_0_1 := v_1_1_0.Args[1]
24528 if v_1_1_0_1.Op != OpConst64 {
24529 break
24530 }
24531 s := v_1_1_0_1.AuxInt
24532 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24533 break
24534 }
24535 v.reset(OpLeq8U)
24536 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24537 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24538 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24539 v2.AuxInt = int64(int8(udivisible(8, c).m))
24540 v1.AddArg(v2)
24541 v1.AddArg(x)
24542 v0.AddArg(v1)
24543 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24544 v3.AuxInt = int64(8 - udivisible(8, c).k)
24545 v0.AddArg(v3)
24546 v.AddArg(v0)
24547 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24548 v4.AuxInt = int64(int8(udivisible(8, c).max))
24549 v.AddArg(v4)
24550 return true
24551 }
24552
24553
24554
24555 for {
24556 _ = v.Args[1]
24557 x := v.Args[0]
24558 v_1 := v.Args[1]
24559 if v_1.Op != OpMul8 {
24560 break
24561 }
24562 _ = v_1.Args[1]
24563 v_1_0 := v_1.Args[0]
24564 if v_1_0.Op != OpConst8 {
24565 break
24566 }
24567 c := v_1_0.AuxInt
24568 v_1_1 := v_1.Args[1]
24569 if v_1_1.Op != OpTrunc32to8 {
24570 break
24571 }
24572 v_1_1_0 := v_1_1.Args[0]
24573 if v_1_1_0.Op != OpRsh32Ux64 {
24574 break
24575 }
24576 _ = v_1_1_0.Args[1]
24577 mul := v_1_1_0.Args[0]
24578 if mul.Op != OpMul32 {
24579 break
24580 }
24581 _ = mul.Args[1]
24582 mul_0 := mul.Args[0]
24583 if mul_0.Op != OpZeroExt8to32 {
24584 break
24585 }
24586 if x != mul_0.Args[0] {
24587 break
24588 }
24589 mul_1 := mul.Args[1]
24590 if mul_1.Op != OpConst32 {
24591 break
24592 }
24593 m := mul_1.AuxInt
24594 v_1_1_0_1 := v_1_1_0.Args[1]
24595 if v_1_1_0_1.Op != OpConst64 {
24596 break
24597 }
24598 s := v_1_1_0_1.AuxInt
24599 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24600 break
24601 }
24602 v.reset(OpLeq8U)
24603 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24604 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24605 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24606 v2.AuxInt = int64(int8(udivisible(8, c).m))
24607 v1.AddArg(v2)
24608 v1.AddArg(x)
24609 v0.AddArg(v1)
24610 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24611 v3.AuxInt = int64(8 - udivisible(8, c).k)
24612 v0.AddArg(v3)
24613 v.AddArg(v0)
24614 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24615 v4.AuxInt = int64(int8(udivisible(8, c).max))
24616 v.AddArg(v4)
24617 return true
24618 }
24619
24620
24621
24622 for {
24623 _ = v.Args[1]
24624 x := v.Args[0]
24625 v_1 := v.Args[1]
24626 if v_1.Op != OpMul8 {
24627 break
24628 }
24629 _ = v_1.Args[1]
24630 v_1_0 := v_1.Args[0]
24631 if v_1_0.Op != OpTrunc32to8 {
24632 break
24633 }
24634 v_1_0_0 := v_1_0.Args[0]
24635 if v_1_0_0.Op != OpRsh32Ux64 {
24636 break
24637 }
24638 _ = v_1_0_0.Args[1]
24639 mul := v_1_0_0.Args[0]
24640 if mul.Op != OpMul32 {
24641 break
24642 }
24643 _ = mul.Args[1]
24644 mul_0 := mul.Args[0]
24645 if mul_0.Op != OpConst32 {
24646 break
24647 }
24648 m := mul_0.AuxInt
24649 mul_1 := mul.Args[1]
24650 if mul_1.Op != OpZeroExt8to32 {
24651 break
24652 }
24653 if x != mul_1.Args[0] {
24654 break
24655 }
24656 v_1_0_0_1 := v_1_0_0.Args[1]
24657 if v_1_0_0_1.Op != OpConst64 {
24658 break
24659 }
24660 s := v_1_0_0_1.AuxInt
24661 v_1_1 := v_1.Args[1]
24662 if v_1_1.Op != OpConst8 {
24663 break
24664 }
24665 c := v_1_1.AuxInt
24666 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24667 break
24668 }
24669 v.reset(OpLeq8U)
24670 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24671 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24672 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24673 v2.AuxInt = int64(int8(udivisible(8, c).m))
24674 v1.AddArg(v2)
24675 v1.AddArg(x)
24676 v0.AddArg(v1)
24677 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24678 v3.AuxInt = int64(8 - udivisible(8, c).k)
24679 v0.AddArg(v3)
24680 v.AddArg(v0)
24681 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24682 v4.AuxInt = int64(int8(udivisible(8, c).max))
24683 v.AddArg(v4)
24684 return true
24685 }
24686
24687
24688
24689 for {
24690 _ = v.Args[1]
24691 x := v.Args[0]
24692 v_1 := v.Args[1]
24693 if v_1.Op != OpMul8 {
24694 break
24695 }
24696 _ = v_1.Args[1]
24697 v_1_0 := v_1.Args[0]
24698 if v_1_0.Op != OpTrunc32to8 {
24699 break
24700 }
24701 v_1_0_0 := v_1_0.Args[0]
24702 if v_1_0_0.Op != OpRsh32Ux64 {
24703 break
24704 }
24705 _ = v_1_0_0.Args[1]
24706 mul := v_1_0_0.Args[0]
24707 if mul.Op != OpMul32 {
24708 break
24709 }
24710 _ = mul.Args[1]
24711 mul_0 := mul.Args[0]
24712 if mul_0.Op != OpZeroExt8to32 {
24713 break
24714 }
24715 if x != mul_0.Args[0] {
24716 break
24717 }
24718 mul_1 := mul.Args[1]
24719 if mul_1.Op != OpConst32 {
24720 break
24721 }
24722 m := mul_1.AuxInt
24723 v_1_0_0_1 := v_1_0_0.Args[1]
24724 if v_1_0_0_1.Op != OpConst64 {
24725 break
24726 }
24727 s := v_1_0_0_1.AuxInt
24728 v_1_1 := v_1.Args[1]
24729 if v_1_1.Op != OpConst8 {
24730 break
24731 }
24732 c := v_1_1.AuxInt
24733 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24734 break
24735 }
24736 v.reset(OpLeq8U)
24737 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24738 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24739 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24740 v2.AuxInt = int64(int8(udivisible(8, c).m))
24741 v1.AddArg(v2)
24742 v1.AddArg(x)
24743 v0.AddArg(v1)
24744 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24745 v3.AuxInt = int64(8 - udivisible(8, c).k)
24746 v0.AddArg(v3)
24747 v.AddArg(v0)
24748 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24749 v4.AuxInt = int64(int8(udivisible(8, c).max))
24750 v.AddArg(v4)
24751 return true
24752 }
24753
24754
24755
24756 for {
24757 x := v.Args[1]
24758 v_0 := v.Args[0]
24759 if v_0.Op != OpMul8 {
24760 break
24761 }
24762 _ = v_0.Args[1]
24763 v_0_0 := v_0.Args[0]
24764 if v_0_0.Op != OpConst8 {
24765 break
24766 }
24767 c := v_0_0.AuxInt
24768 v_0_1 := v_0.Args[1]
24769 if v_0_1.Op != OpTrunc32to8 {
24770 break
24771 }
24772 v_0_1_0 := v_0_1.Args[0]
24773 if v_0_1_0.Op != OpRsh32Ux64 {
24774 break
24775 }
24776 _ = v_0_1_0.Args[1]
24777 mul := v_0_1_0.Args[0]
24778 if mul.Op != OpMul32 {
24779 break
24780 }
24781 _ = mul.Args[1]
24782 mul_0 := mul.Args[0]
24783 if mul_0.Op != OpConst32 {
24784 break
24785 }
24786 m := mul_0.AuxInt
24787 mul_1 := mul.Args[1]
24788 if mul_1.Op != OpZeroExt8to32 {
24789 break
24790 }
24791 if x != mul_1.Args[0] {
24792 break
24793 }
24794 v_0_1_0_1 := v_0_1_0.Args[1]
24795 if v_0_1_0_1.Op != OpConst64 {
24796 break
24797 }
24798 s := v_0_1_0_1.AuxInt
24799 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24800 break
24801 }
24802 v.reset(OpLeq8U)
24803 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24804 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24805 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24806 v2.AuxInt = int64(int8(udivisible(8, c).m))
24807 v1.AddArg(v2)
24808 v1.AddArg(x)
24809 v0.AddArg(v1)
24810 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24811 v3.AuxInt = int64(8 - udivisible(8, c).k)
24812 v0.AddArg(v3)
24813 v.AddArg(v0)
24814 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24815 v4.AuxInt = int64(int8(udivisible(8, c).max))
24816 v.AddArg(v4)
24817 return true
24818 }
24819
24820
24821
24822 for {
24823 x := v.Args[1]
24824 v_0 := v.Args[0]
24825 if v_0.Op != OpMul8 {
24826 break
24827 }
24828 _ = v_0.Args[1]
24829 v_0_0 := v_0.Args[0]
24830 if v_0_0.Op != OpConst8 {
24831 break
24832 }
24833 c := v_0_0.AuxInt
24834 v_0_1 := v_0.Args[1]
24835 if v_0_1.Op != OpTrunc32to8 {
24836 break
24837 }
24838 v_0_1_0 := v_0_1.Args[0]
24839 if v_0_1_0.Op != OpRsh32Ux64 {
24840 break
24841 }
24842 _ = v_0_1_0.Args[1]
24843 mul := v_0_1_0.Args[0]
24844 if mul.Op != OpMul32 {
24845 break
24846 }
24847 _ = mul.Args[1]
24848 mul_0 := mul.Args[0]
24849 if mul_0.Op != OpZeroExt8to32 {
24850 break
24851 }
24852 if x != mul_0.Args[0] {
24853 break
24854 }
24855 mul_1 := mul.Args[1]
24856 if mul_1.Op != OpConst32 {
24857 break
24858 }
24859 m := mul_1.AuxInt
24860 v_0_1_0_1 := v_0_1_0.Args[1]
24861 if v_0_1_0_1.Op != OpConst64 {
24862 break
24863 }
24864 s := v_0_1_0_1.AuxInt
24865 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24866 break
24867 }
24868 v.reset(OpLeq8U)
24869 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24870 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24871 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24872 v2.AuxInt = int64(int8(udivisible(8, c).m))
24873 v1.AddArg(v2)
24874 v1.AddArg(x)
24875 v0.AddArg(v1)
24876 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24877 v3.AuxInt = int64(8 - udivisible(8, c).k)
24878 v0.AddArg(v3)
24879 v.AddArg(v0)
24880 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24881 v4.AuxInt = int64(int8(udivisible(8, c).max))
24882 v.AddArg(v4)
24883 return true
24884 }
24885
24886
24887
24888 for {
24889 x := v.Args[1]
24890 v_0 := v.Args[0]
24891 if v_0.Op != OpMul8 {
24892 break
24893 }
24894 _ = v_0.Args[1]
24895 v_0_0 := v_0.Args[0]
24896 if v_0_0.Op != OpTrunc32to8 {
24897 break
24898 }
24899 v_0_0_0 := v_0_0.Args[0]
24900 if v_0_0_0.Op != OpRsh32Ux64 {
24901 break
24902 }
24903 _ = v_0_0_0.Args[1]
24904 mul := v_0_0_0.Args[0]
24905 if mul.Op != OpMul32 {
24906 break
24907 }
24908 _ = mul.Args[1]
24909 mul_0 := mul.Args[0]
24910 if mul_0.Op != OpConst32 {
24911 break
24912 }
24913 m := mul_0.AuxInt
24914 mul_1 := mul.Args[1]
24915 if mul_1.Op != OpZeroExt8to32 {
24916 break
24917 }
24918 if x != mul_1.Args[0] {
24919 break
24920 }
24921 v_0_0_0_1 := v_0_0_0.Args[1]
24922 if v_0_0_0_1.Op != OpConst64 {
24923 break
24924 }
24925 s := v_0_0_0_1.AuxInt
24926 v_0_1 := v_0.Args[1]
24927 if v_0_1.Op != OpConst8 {
24928 break
24929 }
24930 c := v_0_1.AuxInt
24931 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24932 break
24933 }
24934 v.reset(OpLeq8U)
24935 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
24936 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
24937 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24938 v2.AuxInt = int64(int8(udivisible(8, c).m))
24939 v1.AddArg(v2)
24940 v1.AddArg(x)
24941 v0.AddArg(v1)
24942 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24943 v3.AuxInt = int64(8 - udivisible(8, c).k)
24944 v0.AddArg(v3)
24945 v.AddArg(v0)
24946 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
24947 v4.AuxInt = int64(int8(udivisible(8, c).max))
24948 v.AddArg(v4)
24949 return true
24950 }
24951
24952
24953
24954 for {
24955 x := v.Args[1]
24956 v_0 := v.Args[0]
24957 if v_0.Op != OpMul8 {
24958 break
24959 }
24960 _ = v_0.Args[1]
24961 v_0_0 := v_0.Args[0]
24962 if v_0_0.Op != OpTrunc32to8 {
24963 break
24964 }
24965 v_0_0_0 := v_0_0.Args[0]
24966 if v_0_0_0.Op != OpRsh32Ux64 {
24967 break
24968 }
24969 _ = v_0_0_0.Args[1]
24970 mul := v_0_0_0.Args[0]
24971 if mul.Op != OpMul32 {
24972 break
24973 }
24974 _ = mul.Args[1]
24975 mul_0 := mul.Args[0]
24976 if mul_0.Op != OpZeroExt8to32 {
24977 break
24978 }
24979 if x != mul_0.Args[0] {
24980 break
24981 }
24982 mul_1 := mul.Args[1]
24983 if mul_1.Op != OpConst32 {
24984 break
24985 }
24986 m := mul_1.AuxInt
24987 v_0_0_0_1 := v_0_0_0.Args[1]
24988 if v_0_0_0_1.Op != OpConst64 {
24989 break
24990 }
24991 s := v_0_0_0_1.AuxInt
24992 v_0_1 := v_0.Args[1]
24993 if v_0_1.Op != OpConst8 {
24994 break
24995 }
24996 c := v_0_1.AuxInt
24997 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) {
24998 break
24999 }
25000 v.reset(OpLeq8U)
25001 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25002 v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25003 v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25004 v2.AuxInt = int64(int8(udivisible(8, c).m))
25005 v1.AddArg(v2)
25006 v1.AddArg(x)
25007 v0.AddArg(v1)
25008 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25009 v3.AuxInt = int64(8 - udivisible(8, c).k)
25010 v0.AddArg(v3)
25011 v.AddArg(v0)
25012 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25013 v4.AuxInt = int64(int8(udivisible(8, c).max))
25014 v.AddArg(v4)
25015 return true
25016 }
25017
25018
25019
25020 for {
25021 _ = v.Args[1]
25022 x := v.Args[0]
25023 v_1 := v.Args[1]
25024 if v_1.Op != OpMul8 {
25025 break
25026 }
25027 _ = v_1.Args[1]
25028 v_1_0 := v_1.Args[0]
25029 if v_1_0.Op != OpConst8 {
25030 break
25031 }
25032 c := v_1_0.AuxInt
25033 v_1_1 := v_1.Args[1]
25034 if v_1_1.Op != OpSub8 {
25035 break
25036 }
25037 _ = v_1_1.Args[1]
25038 v_1_1_0 := v_1_1.Args[0]
25039 if v_1_1_0.Op != OpRsh32x64 {
25040 break
25041 }
25042 _ = v_1_1_0.Args[1]
25043 mul := v_1_1_0.Args[0]
25044 if mul.Op != OpMul32 {
25045 break
25046 }
25047 _ = mul.Args[1]
25048 mul_0 := mul.Args[0]
25049 if mul_0.Op != OpConst32 {
25050 break
25051 }
25052 m := mul_0.AuxInt
25053 mul_1 := mul.Args[1]
25054 if mul_1.Op != OpSignExt8to32 {
25055 break
25056 }
25057 if x != mul_1.Args[0] {
25058 break
25059 }
25060 v_1_1_0_1 := v_1_1_0.Args[1]
25061 if v_1_1_0_1.Op != OpConst64 {
25062 break
25063 }
25064 s := v_1_1_0_1.AuxInt
25065 v_1_1_1 := v_1_1.Args[1]
25066 if v_1_1_1.Op != OpRsh32x64 {
25067 break
25068 }
25069 _ = v_1_1_1.Args[1]
25070 v_1_1_1_0 := v_1_1_1.Args[0]
25071 if v_1_1_1_0.Op != OpSignExt8to32 {
25072 break
25073 }
25074 if x != v_1_1_1_0.Args[0] {
25075 break
25076 }
25077 v_1_1_1_1 := v_1_1_1.Args[1]
25078 if v_1_1_1_1.Op != OpConst64 {
25079 break
25080 }
25081 if v_1_1_1_1.AuxInt != 31 {
25082 break
25083 }
25084 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25085 break
25086 }
25087 v.reset(OpLeq8U)
25088 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25089 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25090 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25091 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25092 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25093 v2.AddArg(v3)
25094 v2.AddArg(x)
25095 v1.AddArg(v2)
25096 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25097 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25098 v1.AddArg(v4)
25099 v0.AddArg(v1)
25100 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25101 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25102 v0.AddArg(v5)
25103 v.AddArg(v0)
25104 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25105 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25106 v.AddArg(v6)
25107 return true
25108 }
25109 return false
25110 }
25111 func rewriteValuegeneric_OpEq8_20(v *Value) bool {
25112 b := v.Block
25113 typ := &b.Func.Config.Types
25114
25115
25116
25117 for {
25118 _ = v.Args[1]
25119 x := v.Args[0]
25120 v_1 := v.Args[1]
25121 if v_1.Op != OpMul8 {
25122 break
25123 }
25124 _ = v_1.Args[1]
25125 v_1_0 := v_1.Args[0]
25126 if v_1_0.Op != OpConst8 {
25127 break
25128 }
25129 c := v_1_0.AuxInt
25130 v_1_1 := v_1.Args[1]
25131 if v_1_1.Op != OpSub8 {
25132 break
25133 }
25134 _ = v_1_1.Args[1]
25135 v_1_1_0 := v_1_1.Args[0]
25136 if v_1_1_0.Op != OpRsh32x64 {
25137 break
25138 }
25139 _ = v_1_1_0.Args[1]
25140 mul := v_1_1_0.Args[0]
25141 if mul.Op != OpMul32 {
25142 break
25143 }
25144 _ = mul.Args[1]
25145 mul_0 := mul.Args[0]
25146 if mul_0.Op != OpSignExt8to32 {
25147 break
25148 }
25149 if x != mul_0.Args[0] {
25150 break
25151 }
25152 mul_1 := mul.Args[1]
25153 if mul_1.Op != OpConst32 {
25154 break
25155 }
25156 m := mul_1.AuxInt
25157 v_1_1_0_1 := v_1_1_0.Args[1]
25158 if v_1_1_0_1.Op != OpConst64 {
25159 break
25160 }
25161 s := v_1_1_0_1.AuxInt
25162 v_1_1_1 := v_1_1.Args[1]
25163 if v_1_1_1.Op != OpRsh32x64 {
25164 break
25165 }
25166 _ = v_1_1_1.Args[1]
25167 v_1_1_1_0 := v_1_1_1.Args[0]
25168 if v_1_1_1_0.Op != OpSignExt8to32 {
25169 break
25170 }
25171 if x != v_1_1_1_0.Args[0] {
25172 break
25173 }
25174 v_1_1_1_1 := v_1_1_1.Args[1]
25175 if v_1_1_1_1.Op != OpConst64 {
25176 break
25177 }
25178 if v_1_1_1_1.AuxInt != 31 {
25179 break
25180 }
25181 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25182 break
25183 }
25184 v.reset(OpLeq8U)
25185 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25186 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25187 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25188 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25189 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25190 v2.AddArg(v3)
25191 v2.AddArg(x)
25192 v1.AddArg(v2)
25193 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25194 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25195 v1.AddArg(v4)
25196 v0.AddArg(v1)
25197 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25198 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25199 v0.AddArg(v5)
25200 v.AddArg(v0)
25201 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25202 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25203 v.AddArg(v6)
25204 return true
25205 }
25206
25207
25208
25209 for {
25210 _ = v.Args[1]
25211 x := v.Args[0]
25212 v_1 := v.Args[1]
25213 if v_1.Op != OpMul8 {
25214 break
25215 }
25216 _ = v_1.Args[1]
25217 v_1_0 := v_1.Args[0]
25218 if v_1_0.Op != OpSub8 {
25219 break
25220 }
25221 _ = v_1_0.Args[1]
25222 v_1_0_0 := v_1_0.Args[0]
25223 if v_1_0_0.Op != OpRsh32x64 {
25224 break
25225 }
25226 _ = v_1_0_0.Args[1]
25227 mul := v_1_0_0.Args[0]
25228 if mul.Op != OpMul32 {
25229 break
25230 }
25231 _ = mul.Args[1]
25232 mul_0 := mul.Args[0]
25233 if mul_0.Op != OpConst32 {
25234 break
25235 }
25236 m := mul_0.AuxInt
25237 mul_1 := mul.Args[1]
25238 if mul_1.Op != OpSignExt8to32 {
25239 break
25240 }
25241 if x != mul_1.Args[0] {
25242 break
25243 }
25244 v_1_0_0_1 := v_1_0_0.Args[1]
25245 if v_1_0_0_1.Op != OpConst64 {
25246 break
25247 }
25248 s := v_1_0_0_1.AuxInt
25249 v_1_0_1 := v_1_0.Args[1]
25250 if v_1_0_1.Op != OpRsh32x64 {
25251 break
25252 }
25253 _ = v_1_0_1.Args[1]
25254 v_1_0_1_0 := v_1_0_1.Args[0]
25255 if v_1_0_1_0.Op != OpSignExt8to32 {
25256 break
25257 }
25258 if x != v_1_0_1_0.Args[0] {
25259 break
25260 }
25261 v_1_0_1_1 := v_1_0_1.Args[1]
25262 if v_1_0_1_1.Op != OpConst64 {
25263 break
25264 }
25265 if v_1_0_1_1.AuxInt != 31 {
25266 break
25267 }
25268 v_1_1 := v_1.Args[1]
25269 if v_1_1.Op != OpConst8 {
25270 break
25271 }
25272 c := v_1_1.AuxInt
25273 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25274 break
25275 }
25276 v.reset(OpLeq8U)
25277 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25278 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25279 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25280 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25281 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25282 v2.AddArg(v3)
25283 v2.AddArg(x)
25284 v1.AddArg(v2)
25285 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25286 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25287 v1.AddArg(v4)
25288 v0.AddArg(v1)
25289 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25290 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25291 v0.AddArg(v5)
25292 v.AddArg(v0)
25293 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25294 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25295 v.AddArg(v6)
25296 return true
25297 }
25298
25299
25300
25301 for {
25302 _ = v.Args[1]
25303 x := v.Args[0]
25304 v_1 := v.Args[1]
25305 if v_1.Op != OpMul8 {
25306 break
25307 }
25308 _ = v_1.Args[1]
25309 v_1_0 := v_1.Args[0]
25310 if v_1_0.Op != OpSub8 {
25311 break
25312 }
25313 _ = v_1_0.Args[1]
25314 v_1_0_0 := v_1_0.Args[0]
25315 if v_1_0_0.Op != OpRsh32x64 {
25316 break
25317 }
25318 _ = v_1_0_0.Args[1]
25319 mul := v_1_0_0.Args[0]
25320 if mul.Op != OpMul32 {
25321 break
25322 }
25323 _ = mul.Args[1]
25324 mul_0 := mul.Args[0]
25325 if mul_0.Op != OpSignExt8to32 {
25326 break
25327 }
25328 if x != mul_0.Args[0] {
25329 break
25330 }
25331 mul_1 := mul.Args[1]
25332 if mul_1.Op != OpConst32 {
25333 break
25334 }
25335 m := mul_1.AuxInt
25336 v_1_0_0_1 := v_1_0_0.Args[1]
25337 if v_1_0_0_1.Op != OpConst64 {
25338 break
25339 }
25340 s := v_1_0_0_1.AuxInt
25341 v_1_0_1 := v_1_0.Args[1]
25342 if v_1_0_1.Op != OpRsh32x64 {
25343 break
25344 }
25345 _ = v_1_0_1.Args[1]
25346 v_1_0_1_0 := v_1_0_1.Args[0]
25347 if v_1_0_1_0.Op != OpSignExt8to32 {
25348 break
25349 }
25350 if x != v_1_0_1_0.Args[0] {
25351 break
25352 }
25353 v_1_0_1_1 := v_1_0_1.Args[1]
25354 if v_1_0_1_1.Op != OpConst64 {
25355 break
25356 }
25357 if v_1_0_1_1.AuxInt != 31 {
25358 break
25359 }
25360 v_1_1 := v_1.Args[1]
25361 if v_1_1.Op != OpConst8 {
25362 break
25363 }
25364 c := v_1_1.AuxInt
25365 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25366 break
25367 }
25368 v.reset(OpLeq8U)
25369 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25370 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25371 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25372 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25373 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25374 v2.AddArg(v3)
25375 v2.AddArg(x)
25376 v1.AddArg(v2)
25377 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25378 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25379 v1.AddArg(v4)
25380 v0.AddArg(v1)
25381 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25382 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25383 v0.AddArg(v5)
25384 v.AddArg(v0)
25385 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25386 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25387 v.AddArg(v6)
25388 return true
25389 }
25390
25391
25392
25393 for {
25394 x := v.Args[1]
25395 v_0 := v.Args[0]
25396 if v_0.Op != OpMul8 {
25397 break
25398 }
25399 _ = v_0.Args[1]
25400 v_0_0 := v_0.Args[0]
25401 if v_0_0.Op != OpConst8 {
25402 break
25403 }
25404 c := v_0_0.AuxInt
25405 v_0_1 := v_0.Args[1]
25406 if v_0_1.Op != OpSub8 {
25407 break
25408 }
25409 _ = v_0_1.Args[1]
25410 v_0_1_0 := v_0_1.Args[0]
25411 if v_0_1_0.Op != OpRsh32x64 {
25412 break
25413 }
25414 _ = v_0_1_0.Args[1]
25415 mul := v_0_1_0.Args[0]
25416 if mul.Op != OpMul32 {
25417 break
25418 }
25419 _ = mul.Args[1]
25420 mul_0 := mul.Args[0]
25421 if mul_0.Op != OpConst32 {
25422 break
25423 }
25424 m := mul_0.AuxInt
25425 mul_1 := mul.Args[1]
25426 if mul_1.Op != OpSignExt8to32 {
25427 break
25428 }
25429 if x != mul_1.Args[0] {
25430 break
25431 }
25432 v_0_1_0_1 := v_0_1_0.Args[1]
25433 if v_0_1_0_1.Op != OpConst64 {
25434 break
25435 }
25436 s := v_0_1_0_1.AuxInt
25437 v_0_1_1 := v_0_1.Args[1]
25438 if v_0_1_1.Op != OpRsh32x64 {
25439 break
25440 }
25441 _ = v_0_1_1.Args[1]
25442 v_0_1_1_0 := v_0_1_1.Args[0]
25443 if v_0_1_1_0.Op != OpSignExt8to32 {
25444 break
25445 }
25446 if x != v_0_1_1_0.Args[0] {
25447 break
25448 }
25449 v_0_1_1_1 := v_0_1_1.Args[1]
25450 if v_0_1_1_1.Op != OpConst64 {
25451 break
25452 }
25453 if v_0_1_1_1.AuxInt != 31 {
25454 break
25455 }
25456 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25457 break
25458 }
25459 v.reset(OpLeq8U)
25460 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25461 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25462 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25463 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25464 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25465 v2.AddArg(v3)
25466 v2.AddArg(x)
25467 v1.AddArg(v2)
25468 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25469 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25470 v1.AddArg(v4)
25471 v0.AddArg(v1)
25472 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25473 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25474 v0.AddArg(v5)
25475 v.AddArg(v0)
25476 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25477 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25478 v.AddArg(v6)
25479 return true
25480 }
25481
25482
25483
25484 for {
25485 x := v.Args[1]
25486 v_0 := v.Args[0]
25487 if v_0.Op != OpMul8 {
25488 break
25489 }
25490 _ = v_0.Args[1]
25491 v_0_0 := v_0.Args[0]
25492 if v_0_0.Op != OpConst8 {
25493 break
25494 }
25495 c := v_0_0.AuxInt
25496 v_0_1 := v_0.Args[1]
25497 if v_0_1.Op != OpSub8 {
25498 break
25499 }
25500 _ = v_0_1.Args[1]
25501 v_0_1_0 := v_0_1.Args[0]
25502 if v_0_1_0.Op != OpRsh32x64 {
25503 break
25504 }
25505 _ = v_0_1_0.Args[1]
25506 mul := v_0_1_0.Args[0]
25507 if mul.Op != OpMul32 {
25508 break
25509 }
25510 _ = mul.Args[1]
25511 mul_0 := mul.Args[0]
25512 if mul_0.Op != OpSignExt8to32 {
25513 break
25514 }
25515 if x != mul_0.Args[0] {
25516 break
25517 }
25518 mul_1 := mul.Args[1]
25519 if mul_1.Op != OpConst32 {
25520 break
25521 }
25522 m := mul_1.AuxInt
25523 v_0_1_0_1 := v_0_1_0.Args[1]
25524 if v_0_1_0_1.Op != OpConst64 {
25525 break
25526 }
25527 s := v_0_1_0_1.AuxInt
25528 v_0_1_1 := v_0_1.Args[1]
25529 if v_0_1_1.Op != OpRsh32x64 {
25530 break
25531 }
25532 _ = v_0_1_1.Args[1]
25533 v_0_1_1_0 := v_0_1_1.Args[0]
25534 if v_0_1_1_0.Op != OpSignExt8to32 {
25535 break
25536 }
25537 if x != v_0_1_1_0.Args[0] {
25538 break
25539 }
25540 v_0_1_1_1 := v_0_1_1.Args[1]
25541 if v_0_1_1_1.Op != OpConst64 {
25542 break
25543 }
25544 if v_0_1_1_1.AuxInt != 31 {
25545 break
25546 }
25547 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25548 break
25549 }
25550 v.reset(OpLeq8U)
25551 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25552 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25553 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25554 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25555 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25556 v2.AddArg(v3)
25557 v2.AddArg(x)
25558 v1.AddArg(v2)
25559 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25560 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25561 v1.AddArg(v4)
25562 v0.AddArg(v1)
25563 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25564 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25565 v0.AddArg(v5)
25566 v.AddArg(v0)
25567 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25568 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25569 v.AddArg(v6)
25570 return true
25571 }
25572
25573
25574
25575 for {
25576 x := v.Args[1]
25577 v_0 := v.Args[0]
25578 if v_0.Op != OpMul8 {
25579 break
25580 }
25581 _ = v_0.Args[1]
25582 v_0_0 := v_0.Args[0]
25583 if v_0_0.Op != OpSub8 {
25584 break
25585 }
25586 _ = v_0_0.Args[1]
25587 v_0_0_0 := v_0_0.Args[0]
25588 if v_0_0_0.Op != OpRsh32x64 {
25589 break
25590 }
25591 _ = v_0_0_0.Args[1]
25592 mul := v_0_0_0.Args[0]
25593 if mul.Op != OpMul32 {
25594 break
25595 }
25596 _ = mul.Args[1]
25597 mul_0 := mul.Args[0]
25598 if mul_0.Op != OpConst32 {
25599 break
25600 }
25601 m := mul_0.AuxInt
25602 mul_1 := mul.Args[1]
25603 if mul_1.Op != OpSignExt8to32 {
25604 break
25605 }
25606 if x != mul_1.Args[0] {
25607 break
25608 }
25609 v_0_0_0_1 := v_0_0_0.Args[1]
25610 if v_0_0_0_1.Op != OpConst64 {
25611 break
25612 }
25613 s := v_0_0_0_1.AuxInt
25614 v_0_0_1 := v_0_0.Args[1]
25615 if v_0_0_1.Op != OpRsh32x64 {
25616 break
25617 }
25618 _ = v_0_0_1.Args[1]
25619 v_0_0_1_0 := v_0_0_1.Args[0]
25620 if v_0_0_1_0.Op != OpSignExt8to32 {
25621 break
25622 }
25623 if x != v_0_0_1_0.Args[0] {
25624 break
25625 }
25626 v_0_0_1_1 := v_0_0_1.Args[1]
25627 if v_0_0_1_1.Op != OpConst64 {
25628 break
25629 }
25630 if v_0_0_1_1.AuxInt != 31 {
25631 break
25632 }
25633 v_0_1 := v_0.Args[1]
25634 if v_0_1.Op != OpConst8 {
25635 break
25636 }
25637 c := v_0_1.AuxInt
25638 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25639 break
25640 }
25641 v.reset(OpLeq8U)
25642 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25643 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25644 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25645 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25646 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25647 v2.AddArg(v3)
25648 v2.AddArg(x)
25649 v1.AddArg(v2)
25650 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25651 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25652 v1.AddArg(v4)
25653 v0.AddArg(v1)
25654 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25655 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25656 v0.AddArg(v5)
25657 v.AddArg(v0)
25658 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25659 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25660 v.AddArg(v6)
25661 return true
25662 }
25663
25664
25665
25666 for {
25667 x := v.Args[1]
25668 v_0 := v.Args[0]
25669 if v_0.Op != OpMul8 {
25670 break
25671 }
25672 _ = v_0.Args[1]
25673 v_0_0 := v_0.Args[0]
25674 if v_0_0.Op != OpSub8 {
25675 break
25676 }
25677 _ = v_0_0.Args[1]
25678 v_0_0_0 := v_0_0.Args[0]
25679 if v_0_0_0.Op != OpRsh32x64 {
25680 break
25681 }
25682 _ = v_0_0_0.Args[1]
25683 mul := v_0_0_0.Args[0]
25684 if mul.Op != OpMul32 {
25685 break
25686 }
25687 _ = mul.Args[1]
25688 mul_0 := mul.Args[0]
25689 if mul_0.Op != OpSignExt8to32 {
25690 break
25691 }
25692 if x != mul_0.Args[0] {
25693 break
25694 }
25695 mul_1 := mul.Args[1]
25696 if mul_1.Op != OpConst32 {
25697 break
25698 }
25699 m := mul_1.AuxInt
25700 v_0_0_0_1 := v_0_0_0.Args[1]
25701 if v_0_0_0_1.Op != OpConst64 {
25702 break
25703 }
25704 s := v_0_0_0_1.AuxInt
25705 v_0_0_1 := v_0_0.Args[1]
25706 if v_0_0_1.Op != OpRsh32x64 {
25707 break
25708 }
25709 _ = v_0_0_1.Args[1]
25710 v_0_0_1_0 := v_0_0_1.Args[0]
25711 if v_0_0_1_0.Op != OpSignExt8to32 {
25712 break
25713 }
25714 if x != v_0_0_1_0.Args[0] {
25715 break
25716 }
25717 v_0_0_1_1 := v_0_0_1.Args[1]
25718 if v_0_0_1_1.Op != OpConst64 {
25719 break
25720 }
25721 if v_0_0_1_1.AuxInt != 31 {
25722 break
25723 }
25724 v_0_1 := v_0.Args[1]
25725 if v_0_1.Op != OpConst8 {
25726 break
25727 }
25728 c := v_0_1.AuxInt
25729 if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) {
25730 break
25731 }
25732 v.reset(OpLeq8U)
25733 v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8)
25734 v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8)
25735 v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8)
25736 v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25737 v3.AuxInt = int64(int8(sdivisible(8, c).m))
25738 v2.AddArg(v3)
25739 v2.AddArg(x)
25740 v1.AddArg(v2)
25741 v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25742 v4.AuxInt = int64(int8(sdivisible(8, c).a))
25743 v1.AddArg(v4)
25744 v0.AddArg(v1)
25745 v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25746 v5.AuxInt = int64(8 - sdivisible(8, c).k)
25747 v0.AddArg(v5)
25748 v.AddArg(v0)
25749 v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8)
25750 v6.AuxInt = int64(int8(sdivisible(8, c).max))
25751 v.AddArg(v6)
25752 return true
25753 }
25754
25755
25756
25757 for {
25758 _ = v.Args[1]
25759 n := v.Args[0]
25760 v_1 := v.Args[1]
25761 if v_1.Op != OpLsh8x64 {
25762 break
25763 }
25764 _ = v_1.Args[1]
25765 v_1_0 := v_1.Args[0]
25766 if v_1_0.Op != OpRsh8x64 {
25767 break
25768 }
25769 _ = v_1_0.Args[1]
25770 v_1_0_0 := v_1_0.Args[0]
25771 if v_1_0_0.Op != OpAdd8 {
25772 break
25773 }
25774 t := v_1_0_0.Type
25775 _ = v_1_0_0.Args[1]
25776 if n != v_1_0_0.Args[0] {
25777 break
25778 }
25779 v_1_0_0_1 := v_1_0_0.Args[1]
25780 if v_1_0_0_1.Op != OpRsh8Ux64 {
25781 break
25782 }
25783 if v_1_0_0_1.Type != t {
25784 break
25785 }
25786 _ = v_1_0_0_1.Args[1]
25787 v_1_0_0_1_0 := v_1_0_0_1.Args[0]
25788 if v_1_0_0_1_0.Op != OpRsh8x64 {
25789 break
25790 }
25791 if v_1_0_0_1_0.Type != t {
25792 break
25793 }
25794 _ = v_1_0_0_1_0.Args[1]
25795 if n != v_1_0_0_1_0.Args[0] {
25796 break
25797 }
25798 v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1]
25799 if v_1_0_0_1_0_1.Op != OpConst64 {
25800 break
25801 }
25802 if v_1_0_0_1_0_1.Type != typ.UInt64 {
25803 break
25804 }
25805 if v_1_0_0_1_0_1.AuxInt != 7 {
25806 break
25807 }
25808 v_1_0_0_1_1 := v_1_0_0_1.Args[1]
25809 if v_1_0_0_1_1.Op != OpConst64 {
25810 break
25811 }
25812 if v_1_0_0_1_1.Type != typ.UInt64 {
25813 break
25814 }
25815 kbar := v_1_0_0_1_1.AuxInt
25816 v_1_0_1 := v_1_0.Args[1]
25817 if v_1_0_1.Op != OpConst64 {
25818 break
25819 }
25820 if v_1_0_1.Type != typ.UInt64 {
25821 break
25822 }
25823 k := v_1_0_1.AuxInt
25824 v_1_1 := v_1.Args[1]
25825 if v_1_1.Op != OpConst64 {
25826 break
25827 }
25828 if v_1_1.Type != typ.UInt64 {
25829 break
25830 }
25831 if v_1_1.AuxInt != k {
25832 break
25833 }
25834 if !(k > 0 && k < 7 && kbar == 8-k) {
25835 break
25836 }
25837 v.reset(OpEq8)
25838 v0 := b.NewValue0(v.Pos, OpAnd8, t)
25839 v0.AddArg(n)
25840 v1 := b.NewValue0(v.Pos, OpConst8, t)
25841 v1.AuxInt = int64(1<<uint(k) - 1)
25842 v0.AddArg(v1)
25843 v.AddArg(v0)
25844 v2 := b.NewValue0(v.Pos, OpConst8, t)
25845 v2.AuxInt = 0
25846 v.AddArg(v2)
25847 return true
25848 }
25849
25850
25851
25852 for {
25853 _ = v.Args[1]
25854 n := v.Args[0]
25855 v_1 := v.Args[1]
25856 if v_1.Op != OpLsh8x64 {
25857 break
25858 }
25859 _ = v_1.Args[1]
25860 v_1_0 := v_1.Args[0]
25861 if v_1_0.Op != OpRsh8x64 {
25862 break
25863 }
25864 _ = v_1_0.Args[1]
25865 v_1_0_0 := v_1_0.Args[0]
25866 if v_1_0_0.Op != OpAdd8 {
25867 break
25868 }
25869 t := v_1_0_0.Type
25870 _ = v_1_0_0.Args[1]
25871 v_1_0_0_0 := v_1_0_0.Args[0]
25872 if v_1_0_0_0.Op != OpRsh8Ux64 {
25873 break
25874 }
25875 if v_1_0_0_0.Type != t {
25876 break
25877 }
25878 _ = v_1_0_0_0.Args[1]
25879 v_1_0_0_0_0 := v_1_0_0_0.Args[0]
25880 if v_1_0_0_0_0.Op != OpRsh8x64 {
25881 break
25882 }
25883 if v_1_0_0_0_0.Type != t {
25884 break
25885 }
25886 _ = v_1_0_0_0_0.Args[1]
25887 if n != v_1_0_0_0_0.Args[0] {
25888 break
25889 }
25890 v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1]
25891 if v_1_0_0_0_0_1.Op != OpConst64 {
25892 break
25893 }
25894 if v_1_0_0_0_0_1.Type != typ.UInt64 {
25895 break
25896 }
25897 if v_1_0_0_0_0_1.AuxInt != 7 {
25898 break
25899 }
25900 v_1_0_0_0_1 := v_1_0_0_0.Args[1]
25901 if v_1_0_0_0_1.Op != OpConst64 {
25902 break
25903 }
25904 if v_1_0_0_0_1.Type != typ.UInt64 {
25905 break
25906 }
25907 kbar := v_1_0_0_0_1.AuxInt
25908 if n != v_1_0_0.Args[1] {
25909 break
25910 }
25911 v_1_0_1 := v_1_0.Args[1]
25912 if v_1_0_1.Op != OpConst64 {
25913 break
25914 }
25915 if v_1_0_1.Type != typ.UInt64 {
25916 break
25917 }
25918 k := v_1_0_1.AuxInt
25919 v_1_1 := v_1.Args[1]
25920 if v_1_1.Op != OpConst64 {
25921 break
25922 }
25923 if v_1_1.Type != typ.UInt64 {
25924 break
25925 }
25926 if v_1_1.AuxInt != k {
25927 break
25928 }
25929 if !(k > 0 && k < 7 && kbar == 8-k) {
25930 break
25931 }
25932 v.reset(OpEq8)
25933 v0 := b.NewValue0(v.Pos, OpAnd8, t)
25934 v0.AddArg(n)
25935 v1 := b.NewValue0(v.Pos, OpConst8, t)
25936 v1.AuxInt = int64(1<<uint(k) - 1)
25937 v0.AddArg(v1)
25938 v.AddArg(v0)
25939 v2 := b.NewValue0(v.Pos, OpConst8, t)
25940 v2.AuxInt = 0
25941 v.AddArg(v2)
25942 return true
25943 }
25944
25945
25946
25947 for {
25948 n := v.Args[1]
25949 v_0 := v.Args[0]
25950 if v_0.Op != OpLsh8x64 {
25951 break
25952 }
25953 _ = v_0.Args[1]
25954 v_0_0 := v_0.Args[0]
25955 if v_0_0.Op != OpRsh8x64 {
25956 break
25957 }
25958 _ = v_0_0.Args[1]
25959 v_0_0_0 := v_0_0.Args[0]
25960 if v_0_0_0.Op != OpAdd8 {
25961 break
25962 }
25963 t := v_0_0_0.Type
25964 _ = v_0_0_0.Args[1]
25965 if n != v_0_0_0.Args[0] {
25966 break
25967 }
25968 v_0_0_0_1 := v_0_0_0.Args[1]
25969 if v_0_0_0_1.Op != OpRsh8Ux64 {
25970 break
25971 }
25972 if v_0_0_0_1.Type != t {
25973 break
25974 }
25975 _ = v_0_0_0_1.Args[1]
25976 v_0_0_0_1_0 := v_0_0_0_1.Args[0]
25977 if v_0_0_0_1_0.Op != OpRsh8x64 {
25978 break
25979 }
25980 if v_0_0_0_1_0.Type != t {
25981 break
25982 }
25983 _ = v_0_0_0_1_0.Args[1]
25984 if n != v_0_0_0_1_0.Args[0] {
25985 break
25986 }
25987 v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1]
25988 if v_0_0_0_1_0_1.Op != OpConst64 {
25989 break
25990 }
25991 if v_0_0_0_1_0_1.Type != typ.UInt64 {
25992 break
25993 }
25994 if v_0_0_0_1_0_1.AuxInt != 7 {
25995 break
25996 }
25997 v_0_0_0_1_1 := v_0_0_0_1.Args[1]
25998 if v_0_0_0_1_1.Op != OpConst64 {
25999 break
26000 }
26001 if v_0_0_0_1_1.Type != typ.UInt64 {
26002 break
26003 }
26004 kbar := v_0_0_0_1_1.AuxInt
26005 v_0_0_1 := v_0_0.Args[1]
26006 if v_0_0_1.Op != OpConst64 {
26007 break
26008 }
26009 if v_0_0_1.Type != typ.UInt64 {
26010 break
26011 }
26012 k := v_0_0_1.AuxInt
26013 v_0_1 := v_0.Args[1]
26014 if v_0_1.Op != OpConst64 {
26015 break
26016 }
26017 if v_0_1.Type != typ.UInt64 {
26018 break
26019 }
26020 if v_0_1.AuxInt != k {
26021 break
26022 }
26023 if !(k > 0 && k < 7 && kbar == 8-k) {
26024 break
26025 }
26026 v.reset(OpEq8)
26027 v0 := b.NewValue0(v.Pos, OpAnd8, t)
26028 v0.AddArg(n)
26029 v1 := b.NewValue0(v.Pos, OpConst8, t)
26030 v1.AuxInt = int64(1<<uint(k) - 1)
26031 v0.AddArg(v1)
26032 v.AddArg(v0)
26033 v2 := b.NewValue0(v.Pos, OpConst8, t)
26034 v2.AuxInt = 0
26035 v.AddArg(v2)
26036 return true
26037 }
26038 return false
26039 }
26040 func rewriteValuegeneric_OpEq8_30(v *Value) bool {
26041 b := v.Block
26042 typ := &b.Func.Config.Types
26043
26044
26045
26046 for {
26047 n := v.Args[1]
26048 v_0 := v.Args[0]
26049 if v_0.Op != OpLsh8x64 {
26050 break
26051 }
26052 _ = v_0.Args[1]
26053 v_0_0 := v_0.Args[0]
26054 if v_0_0.Op != OpRsh8x64 {
26055 break
26056 }
26057 _ = v_0_0.Args[1]
26058 v_0_0_0 := v_0_0.Args[0]
26059 if v_0_0_0.Op != OpAdd8 {
26060 break
26061 }
26062 t := v_0_0_0.Type
26063 _ = v_0_0_0.Args[1]
26064 v_0_0_0_0 := v_0_0_0.Args[0]
26065 if v_0_0_0_0.Op != OpRsh8Ux64 {
26066 break
26067 }
26068 if v_0_0_0_0.Type != t {
26069 break
26070 }
26071 _ = v_0_0_0_0.Args[1]
26072 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
26073 if v_0_0_0_0_0.Op != OpRsh8x64 {
26074 break
26075 }
26076 if v_0_0_0_0_0.Type != t {
26077 break
26078 }
26079 _ = v_0_0_0_0_0.Args[1]
26080 if n != v_0_0_0_0_0.Args[0] {
26081 break
26082 }
26083 v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1]
26084 if v_0_0_0_0_0_1.Op != OpConst64 {
26085 break
26086 }
26087 if v_0_0_0_0_0_1.Type != typ.UInt64 {
26088 break
26089 }
26090 if v_0_0_0_0_0_1.AuxInt != 7 {
26091 break
26092 }
26093 v_0_0_0_0_1 := v_0_0_0_0.Args[1]
26094 if v_0_0_0_0_1.Op != OpConst64 {
26095 break
26096 }
26097 if v_0_0_0_0_1.Type != typ.UInt64 {
26098 break
26099 }
26100 kbar := v_0_0_0_0_1.AuxInt
26101 if n != v_0_0_0.Args[1] {
26102 break
26103 }
26104 v_0_0_1 := v_0_0.Args[1]
26105 if v_0_0_1.Op != OpConst64 {
26106 break
26107 }
26108 if v_0_0_1.Type != typ.UInt64 {
26109 break
26110 }
26111 k := v_0_0_1.AuxInt
26112 v_0_1 := v_0.Args[1]
26113 if v_0_1.Op != OpConst64 {
26114 break
26115 }
26116 if v_0_1.Type != typ.UInt64 {
26117 break
26118 }
26119 if v_0_1.AuxInt != k {
26120 break
26121 }
26122 if !(k > 0 && k < 7 && kbar == 8-k) {
26123 break
26124 }
26125 v.reset(OpEq8)
26126 v0 := b.NewValue0(v.Pos, OpAnd8, t)
26127 v0.AddArg(n)
26128 v1 := b.NewValue0(v.Pos, OpConst8, t)
26129 v1.AuxInt = int64(1<<uint(k) - 1)
26130 v0.AddArg(v1)
26131 v.AddArg(v0)
26132 v2 := b.NewValue0(v.Pos, OpConst8, t)
26133 v2.AuxInt = 0
26134 v.AddArg(v2)
26135 return true
26136 }
26137
26138
26139
26140 for {
26141 _ = v.Args[1]
26142 s := v.Args[0]
26143 if s.Op != OpSub8 {
26144 break
26145 }
26146 y := s.Args[1]
26147 x := s.Args[0]
26148 v_1 := v.Args[1]
26149 if v_1.Op != OpConst8 {
26150 break
26151 }
26152 if v_1.AuxInt != 0 {
26153 break
26154 }
26155 if !(s.Uses == 1) {
26156 break
26157 }
26158 v.reset(OpEq8)
26159 v.AddArg(x)
26160 v.AddArg(y)
26161 return true
26162 }
26163
26164
26165
26166 for {
26167 _ = v.Args[1]
26168 v_0 := v.Args[0]
26169 if v_0.Op != OpConst8 {
26170 break
26171 }
26172 if v_0.AuxInt != 0 {
26173 break
26174 }
26175 s := v.Args[1]
26176 if s.Op != OpSub8 {
26177 break
26178 }
26179 y := s.Args[1]
26180 x := s.Args[0]
26181 if !(s.Uses == 1) {
26182 break
26183 }
26184 v.reset(OpEq8)
26185 v.AddArg(x)
26186 v.AddArg(y)
26187 return true
26188 }
26189 return false
26190 }
26191 func rewriteValuegeneric_OpEqB_0(v *Value) bool {
26192
26193
26194
26195 for {
26196 _ = v.Args[1]
26197 v_0 := v.Args[0]
26198 if v_0.Op != OpConstBool {
26199 break
26200 }
26201 c := v_0.AuxInt
26202 v_1 := v.Args[1]
26203 if v_1.Op != OpConstBool {
26204 break
26205 }
26206 d := v_1.AuxInt
26207 v.reset(OpConstBool)
26208 v.AuxInt = b2i(c == d)
26209 return true
26210 }
26211
26212
26213
26214 for {
26215 _ = v.Args[1]
26216 v_0 := v.Args[0]
26217 if v_0.Op != OpConstBool {
26218 break
26219 }
26220 d := v_0.AuxInt
26221 v_1 := v.Args[1]
26222 if v_1.Op != OpConstBool {
26223 break
26224 }
26225 c := v_1.AuxInt
26226 v.reset(OpConstBool)
26227 v.AuxInt = b2i(c == d)
26228 return true
26229 }
26230
26231
26232
26233 for {
26234 x := v.Args[1]
26235 v_0 := v.Args[0]
26236 if v_0.Op != OpConstBool {
26237 break
26238 }
26239 if v_0.AuxInt != 0 {
26240 break
26241 }
26242 v.reset(OpNot)
26243 v.AddArg(x)
26244 return true
26245 }
26246
26247
26248
26249 for {
26250 _ = v.Args[1]
26251 x := v.Args[0]
26252 v_1 := v.Args[1]
26253 if v_1.Op != OpConstBool {
26254 break
26255 }
26256 if v_1.AuxInt != 0 {
26257 break
26258 }
26259 v.reset(OpNot)
26260 v.AddArg(x)
26261 return true
26262 }
26263
26264
26265
26266 for {
26267 x := v.Args[1]
26268 v_0 := v.Args[0]
26269 if v_0.Op != OpConstBool {
26270 break
26271 }
26272 if v_0.AuxInt != 1 {
26273 break
26274 }
26275 v.reset(OpCopy)
26276 v.Type = x.Type
26277 v.AddArg(x)
26278 return true
26279 }
26280
26281
26282
26283 for {
26284 _ = v.Args[1]
26285 x := v.Args[0]
26286 v_1 := v.Args[1]
26287 if v_1.Op != OpConstBool {
26288 break
26289 }
26290 if v_1.AuxInt != 1 {
26291 break
26292 }
26293 v.reset(OpCopy)
26294 v.Type = x.Type
26295 v.AddArg(x)
26296 return true
26297 }
26298 return false
26299 }
26300 func rewriteValuegeneric_OpEqInter_0(v *Value) bool {
26301 b := v.Block
26302 typ := &b.Func.Config.Types
26303
26304
26305
26306 for {
26307 y := v.Args[1]
26308 x := v.Args[0]
26309 v.reset(OpEqPtr)
26310 v0 := b.NewValue0(v.Pos, OpITab, typ.Uintptr)
26311 v0.AddArg(x)
26312 v.AddArg(v0)
26313 v1 := b.NewValue0(v.Pos, OpITab, typ.Uintptr)
26314 v1.AddArg(y)
26315 v.AddArg(v1)
26316 return true
26317 }
26318 }
26319 func rewriteValuegeneric_OpEqPtr_0(v *Value) bool {
26320
26321
26322
26323 for {
26324 x := v.Args[1]
26325 if x != v.Args[0] {
26326 break
26327 }
26328 v.reset(OpConstBool)
26329 v.AuxInt = 1
26330 return true
26331 }
26332
26333
26334
26335 for {
26336 _ = v.Args[1]
26337 v_0 := v.Args[0]
26338 if v_0.Op != OpAddr {
26339 break
26340 }
26341 a := v_0.Aux
26342 v_1 := v.Args[1]
26343 if v_1.Op != OpAddr {
26344 break
26345 }
26346 b := v_1.Aux
26347 v.reset(OpConstBool)
26348 v.AuxInt = b2i(a == b)
26349 return true
26350 }
26351
26352
26353
26354 for {
26355 _ = v.Args[1]
26356 v_0 := v.Args[0]
26357 if v_0.Op != OpAddr {
26358 break
26359 }
26360 b := v_0.Aux
26361 v_1 := v.Args[1]
26362 if v_1.Op != OpAddr {
26363 break
26364 }
26365 a := v_1.Aux
26366 v.reset(OpConstBool)
26367 v.AuxInt = b2i(a == b)
26368 return true
26369 }
26370
26371
26372
26373 for {
26374 _ = v.Args[1]
26375 v_0 := v.Args[0]
26376 if v_0.Op != OpLocalAddr {
26377 break
26378 }
26379 a := v_0.Aux
26380 _ = v_0.Args[1]
26381 v_1 := v.Args[1]
26382 if v_1.Op != OpLocalAddr {
26383 break
26384 }
26385 b := v_1.Aux
26386 _ = v_1.Args[1]
26387 v.reset(OpConstBool)
26388 v.AuxInt = b2i(a == b)
26389 return true
26390 }
26391
26392
26393
26394 for {
26395 _ = v.Args[1]
26396 v_0 := v.Args[0]
26397 if v_0.Op != OpLocalAddr {
26398 break
26399 }
26400 b := v_0.Aux
26401 _ = v_0.Args[1]
26402 v_1 := v.Args[1]
26403 if v_1.Op != OpLocalAddr {
26404 break
26405 }
26406 a := v_1.Aux
26407 _ = v_1.Args[1]
26408 v.reset(OpConstBool)
26409 v.AuxInt = b2i(a == b)
26410 return true
26411 }
26412
26413
26414
26415 for {
26416 p2 := v.Args[1]
26417 v_0 := v.Args[0]
26418 if v_0.Op != OpOffPtr {
26419 break
26420 }
26421 o1 := v_0.AuxInt
26422 p1 := v_0.Args[0]
26423 if !(isSamePtr(p1, p2)) {
26424 break
26425 }
26426 v.reset(OpConstBool)
26427 v.AuxInt = b2i(o1 == 0)
26428 return true
26429 }
26430
26431
26432
26433 for {
26434 _ = v.Args[1]
26435 p2 := v.Args[0]
26436 v_1 := v.Args[1]
26437 if v_1.Op != OpOffPtr {
26438 break
26439 }
26440 o1 := v_1.AuxInt
26441 p1 := v_1.Args[0]
26442 if !(isSamePtr(p1, p2)) {
26443 break
26444 }
26445 v.reset(OpConstBool)
26446 v.AuxInt = b2i(o1 == 0)
26447 return true
26448 }
26449
26450
26451
26452 for {
26453 _ = v.Args[1]
26454 v_0 := v.Args[0]
26455 if v_0.Op != OpOffPtr {
26456 break
26457 }
26458 o1 := v_0.AuxInt
26459 p1 := v_0.Args[0]
26460 v_1 := v.Args[1]
26461 if v_1.Op != OpOffPtr {
26462 break
26463 }
26464 o2 := v_1.AuxInt
26465 p2 := v_1.Args[0]
26466 if !(isSamePtr(p1, p2)) {
26467 break
26468 }
26469 v.reset(OpConstBool)
26470 v.AuxInt = b2i(o1 == o2)
26471 return true
26472 }
26473
26474
26475
26476 for {
26477 _ = v.Args[1]
26478 v_0 := v.Args[0]
26479 if v_0.Op != OpOffPtr {
26480 break
26481 }
26482 o2 := v_0.AuxInt
26483 p2 := v_0.Args[0]
26484 v_1 := v.Args[1]
26485 if v_1.Op != OpOffPtr {
26486 break
26487 }
26488 o1 := v_1.AuxInt
26489 p1 := v_1.Args[0]
26490 if !(isSamePtr(p1, p2)) {
26491 break
26492 }
26493 v.reset(OpConstBool)
26494 v.AuxInt = b2i(o1 == o2)
26495 return true
26496 }
26497
26498
26499
26500 for {
26501 _ = v.Args[1]
26502 v_0 := v.Args[0]
26503 if v_0.Op != OpConst32 {
26504 break
26505 }
26506 c := v_0.AuxInt
26507 v_1 := v.Args[1]
26508 if v_1.Op != OpConst32 {
26509 break
26510 }
26511 d := v_1.AuxInt
26512 v.reset(OpConstBool)
26513 v.AuxInt = b2i(c == d)
26514 return true
26515 }
26516 return false
26517 }
26518 func rewriteValuegeneric_OpEqPtr_10(v *Value) bool {
26519 b := v.Block
26520 typ := &b.Func.Config.Types
26521
26522
26523
26524 for {
26525 _ = v.Args[1]
26526 v_0 := v.Args[0]
26527 if v_0.Op != OpConst32 {
26528 break
26529 }
26530 d := v_0.AuxInt
26531 v_1 := v.Args[1]
26532 if v_1.Op != OpConst32 {
26533 break
26534 }
26535 c := v_1.AuxInt
26536 v.reset(OpConstBool)
26537 v.AuxInt = b2i(c == d)
26538 return true
26539 }
26540
26541
26542
26543 for {
26544 _ = v.Args[1]
26545 v_0 := v.Args[0]
26546 if v_0.Op != OpConst64 {
26547 break
26548 }
26549 c := v_0.AuxInt
26550 v_1 := v.Args[1]
26551 if v_1.Op != OpConst64 {
26552 break
26553 }
26554 d := v_1.AuxInt
26555 v.reset(OpConstBool)
26556 v.AuxInt = b2i(c == d)
26557 return true
26558 }
26559
26560
26561
26562 for {
26563 _ = v.Args[1]
26564 v_0 := v.Args[0]
26565 if v_0.Op != OpConst64 {
26566 break
26567 }
26568 d := v_0.AuxInt
26569 v_1 := v.Args[1]
26570 if v_1.Op != OpConst64 {
26571 break
26572 }
26573 c := v_1.AuxInt
26574 v.reset(OpConstBool)
26575 v.AuxInt = b2i(c == d)
26576 return true
26577 }
26578
26579
26580
26581 for {
26582 _ = v.Args[1]
26583 v_0 := v.Args[0]
26584 if v_0.Op != OpLocalAddr {
26585 break
26586 }
26587 _ = v_0.Args[1]
26588 v_1 := v.Args[1]
26589 if v_1.Op != OpAddr {
26590 break
26591 }
26592 v.reset(OpConstBool)
26593 v.AuxInt = 0
26594 return true
26595 }
26596
26597
26598
26599 for {
26600 _ = v.Args[1]
26601 v_0 := v.Args[0]
26602 if v_0.Op != OpAddr {
26603 break
26604 }
26605 v_1 := v.Args[1]
26606 if v_1.Op != OpLocalAddr {
26607 break
26608 }
26609 _ = v_1.Args[1]
26610 v.reset(OpConstBool)
26611 v.AuxInt = 0
26612 return true
26613 }
26614
26615
26616
26617 for {
26618 _ = v.Args[1]
26619 v_0 := v.Args[0]
26620 if v_0.Op != OpAddr {
26621 break
26622 }
26623 v_1 := v.Args[1]
26624 if v_1.Op != OpLocalAddr {
26625 break
26626 }
26627 _ = v_1.Args[1]
26628 v.reset(OpConstBool)
26629 v.AuxInt = 0
26630 return true
26631 }
26632
26633
26634
26635 for {
26636 _ = v.Args[1]
26637 v_0 := v.Args[0]
26638 if v_0.Op != OpLocalAddr {
26639 break
26640 }
26641 _ = v_0.Args[1]
26642 v_1 := v.Args[1]
26643 if v_1.Op != OpAddr {
26644 break
26645 }
26646 v.reset(OpConstBool)
26647 v.AuxInt = 0
26648 return true
26649 }
26650
26651
26652
26653 for {
26654 p2 := v.Args[1]
26655 v_0 := v.Args[0]
26656 if v_0.Op != OpAddPtr {
26657 break
26658 }
26659 o1 := v_0.Args[1]
26660 p1 := v_0.Args[0]
26661 if !(isSamePtr(p1, p2)) {
26662 break
26663 }
26664 v.reset(OpNot)
26665 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26666 v0.AddArg(o1)
26667 v.AddArg(v0)
26668 return true
26669 }
26670
26671
26672
26673 for {
26674 _ = v.Args[1]
26675 p2 := v.Args[0]
26676 v_1 := v.Args[1]
26677 if v_1.Op != OpAddPtr {
26678 break
26679 }
26680 o1 := v_1.Args[1]
26681 p1 := v_1.Args[0]
26682 if !(isSamePtr(p1, p2)) {
26683 break
26684 }
26685 v.reset(OpNot)
26686 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26687 v0.AddArg(o1)
26688 v.AddArg(v0)
26689 return true
26690 }
26691
26692
26693
26694 for {
26695 p := v.Args[1]
26696 v_0 := v.Args[0]
26697 if v_0.Op != OpConst32 {
26698 break
26699 }
26700 if v_0.AuxInt != 0 {
26701 break
26702 }
26703 v.reset(OpNot)
26704 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26705 v0.AddArg(p)
26706 v.AddArg(v0)
26707 return true
26708 }
26709 return false
26710 }
26711 func rewriteValuegeneric_OpEqPtr_20(v *Value) bool {
26712 b := v.Block
26713 typ := &b.Func.Config.Types
26714
26715
26716
26717 for {
26718 _ = v.Args[1]
26719 p := v.Args[0]
26720 v_1 := v.Args[1]
26721 if v_1.Op != OpConst32 {
26722 break
26723 }
26724 if v_1.AuxInt != 0 {
26725 break
26726 }
26727 v.reset(OpNot)
26728 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26729 v0.AddArg(p)
26730 v.AddArg(v0)
26731 return true
26732 }
26733
26734
26735
26736 for {
26737 p := v.Args[1]
26738 v_0 := v.Args[0]
26739 if v_0.Op != OpConst64 {
26740 break
26741 }
26742 if v_0.AuxInt != 0 {
26743 break
26744 }
26745 v.reset(OpNot)
26746 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26747 v0.AddArg(p)
26748 v.AddArg(v0)
26749 return true
26750 }
26751
26752
26753
26754 for {
26755 _ = v.Args[1]
26756 p := v.Args[0]
26757 v_1 := v.Args[1]
26758 if v_1.Op != OpConst64 {
26759 break
26760 }
26761 if v_1.AuxInt != 0 {
26762 break
26763 }
26764 v.reset(OpNot)
26765 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26766 v0.AddArg(p)
26767 v.AddArg(v0)
26768 return true
26769 }
26770
26771
26772
26773 for {
26774 p := v.Args[1]
26775 v_0 := v.Args[0]
26776 if v_0.Op != OpConstNil {
26777 break
26778 }
26779 v.reset(OpNot)
26780 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26781 v0.AddArg(p)
26782 v.AddArg(v0)
26783 return true
26784 }
26785
26786
26787
26788 for {
26789 _ = v.Args[1]
26790 p := v.Args[0]
26791 v_1 := v.Args[1]
26792 if v_1.Op != OpConstNil {
26793 break
26794 }
26795 v.reset(OpNot)
26796 v0 := b.NewValue0(v.Pos, OpIsNonNil, typ.Bool)
26797 v0.AddArg(p)
26798 v.AddArg(v0)
26799 return true
26800 }
26801 return false
26802 }
26803 func rewriteValuegeneric_OpEqSlice_0(v *Value) bool {
26804 b := v.Block
26805 typ := &b.Func.Config.Types
26806
26807
26808
26809 for {
26810 y := v.Args[1]
26811 x := v.Args[0]
26812 v.reset(OpEqPtr)
26813 v0 := b.NewValue0(v.Pos, OpSlicePtr, typ.BytePtr)
26814 v0.AddArg(x)
26815 v.AddArg(v0)
26816 v1 := b.NewValue0(v.Pos, OpSlicePtr, typ.BytePtr)
26817 v1.AddArg(y)
26818 v.AddArg(v1)
26819 return true
26820 }
26821 }
26822 func rewriteValuegeneric_OpGeq16_0(v *Value) bool {
26823
26824
26825
26826 for {
26827 _ = v.Args[1]
26828 v_0 := v.Args[0]
26829 if v_0.Op != OpConst16 {
26830 break
26831 }
26832 c := v_0.AuxInt
26833 v_1 := v.Args[1]
26834 if v_1.Op != OpConst16 {
26835 break
26836 }
26837 d := v_1.AuxInt
26838 v.reset(OpConstBool)
26839 v.AuxInt = b2i(c >= d)
26840 return true
26841 }
26842
26843
26844
26845 for {
26846 _ = v.Args[1]
26847 v_0 := v.Args[0]
26848 if v_0.Op != OpAnd16 {
26849 break
26850 }
26851 _ = v_0.Args[1]
26852 v_0_1 := v_0.Args[1]
26853 if v_0_1.Op != OpConst16 {
26854 break
26855 }
26856 c := v_0_1.AuxInt
26857 v_1 := v.Args[1]
26858 if v_1.Op != OpConst16 {
26859 break
26860 }
26861 if v_1.AuxInt != 0 {
26862 break
26863 }
26864 if !(int16(c) >= 0) {
26865 break
26866 }
26867 v.reset(OpConstBool)
26868 v.AuxInt = 1
26869 return true
26870 }
26871
26872
26873
26874 for {
26875 _ = v.Args[1]
26876 v_0 := v.Args[0]
26877 if v_0.Op != OpAnd16 {
26878 break
26879 }
26880 _ = v_0.Args[1]
26881 v_0_0 := v_0.Args[0]
26882 if v_0_0.Op != OpConst16 {
26883 break
26884 }
26885 c := v_0_0.AuxInt
26886 v_1 := v.Args[1]
26887 if v_1.Op != OpConst16 {
26888 break
26889 }
26890 if v_1.AuxInt != 0 {
26891 break
26892 }
26893 if !(int16(c) >= 0) {
26894 break
26895 }
26896 v.reset(OpConstBool)
26897 v.AuxInt = 1
26898 return true
26899 }
26900 return false
26901 }
26902 func rewriteValuegeneric_OpGeq16U_0(v *Value) bool {
26903
26904
26905
26906 for {
26907 _ = v.Args[1]
26908 v_0 := v.Args[0]
26909 if v_0.Op != OpConst16 {
26910 break
26911 }
26912 c := v_0.AuxInt
26913 v_1 := v.Args[1]
26914 if v_1.Op != OpConst16 {
26915 break
26916 }
26917 d := v_1.AuxInt
26918 v.reset(OpConstBool)
26919 v.AuxInt = b2i(uint16(c) >= uint16(d))
26920 return true
26921 }
26922 return false
26923 }
26924 func rewriteValuegeneric_OpGeq32_0(v *Value) bool {
26925
26926
26927
26928 for {
26929 _ = v.Args[1]
26930 v_0 := v.Args[0]
26931 if v_0.Op != OpConst32 {
26932 break
26933 }
26934 c := v_0.AuxInt
26935 v_1 := v.Args[1]
26936 if v_1.Op != OpConst32 {
26937 break
26938 }
26939 d := v_1.AuxInt
26940 v.reset(OpConstBool)
26941 v.AuxInt = b2i(c >= d)
26942 return true
26943 }
26944
26945
26946
26947 for {
26948 _ = v.Args[1]
26949 v_0 := v.Args[0]
26950 if v_0.Op != OpAnd32 {
26951 break
26952 }
26953 _ = v_0.Args[1]
26954 v_0_1 := v_0.Args[1]
26955 if v_0_1.Op != OpConst32 {
26956 break
26957 }
26958 c := v_0_1.AuxInt
26959 v_1 := v.Args[1]
26960 if v_1.Op != OpConst32 {
26961 break
26962 }
26963 if v_1.AuxInt != 0 {
26964 break
26965 }
26966 if !(int32(c) >= 0) {
26967 break
26968 }
26969 v.reset(OpConstBool)
26970 v.AuxInt = 1
26971 return true
26972 }
26973
26974
26975
26976 for {
26977 _ = v.Args[1]
26978 v_0 := v.Args[0]
26979 if v_0.Op != OpAnd32 {
26980 break
26981 }
26982 _ = v_0.Args[1]
26983 v_0_0 := v_0.Args[0]
26984 if v_0_0.Op != OpConst32 {
26985 break
26986 }
26987 c := v_0_0.AuxInt
26988 v_1 := v.Args[1]
26989 if v_1.Op != OpConst32 {
26990 break
26991 }
26992 if v_1.AuxInt != 0 {
26993 break
26994 }
26995 if !(int32(c) >= 0) {
26996 break
26997 }
26998 v.reset(OpConstBool)
26999 v.AuxInt = 1
27000 return true
27001 }
27002 return false
27003 }
27004 func rewriteValuegeneric_OpGeq32F_0(v *Value) bool {
27005
27006
27007
27008 for {
27009 _ = v.Args[1]
27010 v_0 := v.Args[0]
27011 if v_0.Op != OpConst32F {
27012 break
27013 }
27014 c := v_0.AuxInt
27015 v_1 := v.Args[1]
27016 if v_1.Op != OpConst32F {
27017 break
27018 }
27019 d := v_1.AuxInt
27020 v.reset(OpConstBool)
27021 v.AuxInt = b2i(auxTo32F(c) >= auxTo32F(d))
27022 return true
27023 }
27024 return false
27025 }
27026 func rewriteValuegeneric_OpGeq32U_0(v *Value) bool {
27027
27028
27029
27030 for {
27031 _ = v.Args[1]
27032 v_0 := v.Args[0]
27033 if v_0.Op != OpConst32 {
27034 break
27035 }
27036 c := v_0.AuxInt
27037 v_1 := v.Args[1]
27038 if v_1.Op != OpConst32 {
27039 break
27040 }
27041 d := v_1.AuxInt
27042 v.reset(OpConstBool)
27043 v.AuxInt = b2i(uint32(c) >= uint32(d))
27044 return true
27045 }
27046 return false
27047 }
27048 func rewriteValuegeneric_OpGeq64_0(v *Value) bool {
27049
27050
27051
27052 for {
27053 _ = v.Args[1]
27054 v_0 := v.Args[0]
27055 if v_0.Op != OpConst64 {
27056 break
27057 }
27058 c := v_0.AuxInt
27059 v_1 := v.Args[1]
27060 if v_1.Op != OpConst64 {
27061 break
27062 }
27063 d := v_1.AuxInt
27064 v.reset(OpConstBool)
27065 v.AuxInt = b2i(c >= d)
27066 return true
27067 }
27068
27069
27070
27071 for {
27072 _ = v.Args[1]
27073 v_0 := v.Args[0]
27074 if v_0.Op != OpAnd64 {
27075 break
27076 }
27077 _ = v_0.Args[1]
27078 v_0_1 := v_0.Args[1]
27079 if v_0_1.Op != OpConst64 {
27080 break
27081 }
27082 c := v_0_1.AuxInt
27083 v_1 := v.Args[1]
27084 if v_1.Op != OpConst64 {
27085 break
27086 }
27087 if v_1.AuxInt != 0 {
27088 break
27089 }
27090 if !(int64(c) >= 0) {
27091 break
27092 }
27093 v.reset(OpConstBool)
27094 v.AuxInt = 1
27095 return true
27096 }
27097
27098
27099
27100 for {
27101 _ = v.Args[1]
27102 v_0 := v.Args[0]
27103 if v_0.Op != OpAnd64 {
27104 break
27105 }
27106 _ = v_0.Args[1]
27107 v_0_0 := v_0.Args[0]
27108 if v_0_0.Op != OpConst64 {
27109 break
27110 }
27111 c := v_0_0.AuxInt
27112 v_1 := v.Args[1]
27113 if v_1.Op != OpConst64 {
27114 break
27115 }
27116 if v_1.AuxInt != 0 {
27117 break
27118 }
27119 if !(int64(c) >= 0) {
27120 break
27121 }
27122 v.reset(OpConstBool)
27123 v.AuxInt = 1
27124 return true
27125 }
27126
27127
27128
27129 for {
27130 _ = v.Args[1]
27131 v_0 := v.Args[0]
27132 if v_0.Op != OpRsh64Ux64 {
27133 break
27134 }
27135 _ = v_0.Args[1]
27136 v_0_1 := v_0.Args[1]
27137 if v_0_1.Op != OpConst64 {
27138 break
27139 }
27140 c := v_0_1.AuxInt
27141 v_1 := v.Args[1]
27142 if v_1.Op != OpConst64 {
27143 break
27144 }
27145 if v_1.AuxInt != 0 {
27146 break
27147 }
27148 if !(c > 0) {
27149 break
27150 }
27151 v.reset(OpConstBool)
27152 v.AuxInt = 1
27153 return true
27154 }
27155 return false
27156 }
27157 func rewriteValuegeneric_OpGeq64F_0(v *Value) bool {
27158
27159
27160
27161 for {
27162 _ = v.Args[1]
27163 v_0 := v.Args[0]
27164 if v_0.Op != OpConst64F {
27165 break
27166 }
27167 c := v_0.AuxInt
27168 v_1 := v.Args[1]
27169 if v_1.Op != OpConst64F {
27170 break
27171 }
27172 d := v_1.AuxInt
27173 v.reset(OpConstBool)
27174 v.AuxInt = b2i(auxTo64F(c) >= auxTo64F(d))
27175 return true
27176 }
27177 return false
27178 }
27179 func rewriteValuegeneric_OpGeq64U_0(v *Value) bool {
27180
27181
27182
27183 for {
27184 _ = v.Args[1]
27185 v_0 := v.Args[0]
27186 if v_0.Op != OpConst64 {
27187 break
27188 }
27189 c := v_0.AuxInt
27190 v_1 := v.Args[1]
27191 if v_1.Op != OpConst64 {
27192 break
27193 }
27194 d := v_1.AuxInt
27195 v.reset(OpConstBool)
27196 v.AuxInt = b2i(uint64(c) >= uint64(d))
27197 return true
27198 }
27199 return false
27200 }
27201 func rewriteValuegeneric_OpGeq8_0(v *Value) bool {
27202
27203
27204
27205 for {
27206 _ = v.Args[1]
27207 v_0 := v.Args[0]
27208 if v_0.Op != OpConst8 {
27209 break
27210 }
27211 c := v_0.AuxInt
27212 v_1 := v.Args[1]
27213 if v_1.Op != OpConst8 {
27214 break
27215 }
27216 d := v_1.AuxInt
27217 v.reset(OpConstBool)
27218 v.AuxInt = b2i(c >= d)
27219 return true
27220 }
27221
27222
27223
27224 for {
27225 _ = v.Args[1]
27226 v_0 := v.Args[0]
27227 if v_0.Op != OpAnd8 {
27228 break
27229 }
27230 _ = v_0.Args[1]
27231 v_0_1 := v_0.Args[1]
27232 if v_0_1.Op != OpConst8 {
27233 break
27234 }
27235 c := v_0_1.AuxInt
27236 v_1 := v.Args[1]
27237 if v_1.Op != OpConst8 {
27238 break
27239 }
27240 if v_1.AuxInt != 0 {
27241 break
27242 }
27243 if !(int8(c) >= 0) {
27244 break
27245 }
27246 v.reset(OpConstBool)
27247 v.AuxInt = 1
27248 return true
27249 }
27250
27251
27252
27253 for {
27254 _ = v.Args[1]
27255 v_0 := v.Args[0]
27256 if v_0.Op != OpAnd8 {
27257 break
27258 }
27259 _ = v_0.Args[1]
27260 v_0_0 := v_0.Args[0]
27261 if v_0_0.Op != OpConst8 {
27262 break
27263 }
27264 c := v_0_0.AuxInt
27265 v_1 := v.Args[1]
27266 if v_1.Op != OpConst8 {
27267 break
27268 }
27269 if v_1.AuxInt != 0 {
27270 break
27271 }
27272 if !(int8(c) >= 0) {
27273 break
27274 }
27275 v.reset(OpConstBool)
27276 v.AuxInt = 1
27277 return true
27278 }
27279 return false
27280 }
27281 func rewriteValuegeneric_OpGeq8U_0(v *Value) bool {
27282
27283
27284
27285 for {
27286 _ = v.Args[1]
27287 v_0 := v.Args[0]
27288 if v_0.Op != OpConst8 {
27289 break
27290 }
27291 c := v_0.AuxInt
27292 v_1 := v.Args[1]
27293 if v_1.Op != OpConst8 {
27294 break
27295 }
27296 d := v_1.AuxInt
27297 v.reset(OpConstBool)
27298 v.AuxInt = b2i(uint8(c) >= uint8(d))
27299 return true
27300 }
27301 return false
27302 }
27303 func rewriteValuegeneric_OpGreater16_0(v *Value) bool {
27304
27305
27306
27307 for {
27308 _ = v.Args[1]
27309 v_0 := v.Args[0]
27310 if v_0.Op != OpConst16 {
27311 break
27312 }
27313 c := v_0.AuxInt
27314 v_1 := v.Args[1]
27315 if v_1.Op != OpConst16 {
27316 break
27317 }
27318 d := v_1.AuxInt
27319 v.reset(OpConstBool)
27320 v.AuxInt = b2i(c > d)
27321 return true
27322 }
27323 return false
27324 }
27325 func rewriteValuegeneric_OpGreater16U_0(v *Value) bool {
27326
27327
27328
27329 for {
27330 _ = v.Args[1]
27331 v_0 := v.Args[0]
27332 if v_0.Op != OpConst16 {
27333 break
27334 }
27335 c := v_0.AuxInt
27336 v_1 := v.Args[1]
27337 if v_1.Op != OpConst16 {
27338 break
27339 }
27340 d := v_1.AuxInt
27341 v.reset(OpConstBool)
27342 v.AuxInt = b2i(uint16(c) > uint16(d))
27343 return true
27344 }
27345 return false
27346 }
27347 func rewriteValuegeneric_OpGreater32_0(v *Value) bool {
27348
27349
27350
27351 for {
27352 _ = v.Args[1]
27353 v_0 := v.Args[0]
27354 if v_0.Op != OpConst32 {
27355 break
27356 }
27357 c := v_0.AuxInt
27358 v_1 := v.Args[1]
27359 if v_1.Op != OpConst32 {
27360 break
27361 }
27362 d := v_1.AuxInt
27363 v.reset(OpConstBool)
27364 v.AuxInt = b2i(c > d)
27365 return true
27366 }
27367 return false
27368 }
27369 func rewriteValuegeneric_OpGreater32F_0(v *Value) bool {
27370
27371
27372
27373 for {
27374 _ = v.Args[1]
27375 v_0 := v.Args[0]
27376 if v_0.Op != OpConst32F {
27377 break
27378 }
27379 c := v_0.AuxInt
27380 v_1 := v.Args[1]
27381 if v_1.Op != OpConst32F {
27382 break
27383 }
27384 d := v_1.AuxInt
27385 v.reset(OpConstBool)
27386 v.AuxInt = b2i(auxTo32F(c) > auxTo32F(d))
27387 return true
27388 }
27389 return false
27390 }
27391 func rewriteValuegeneric_OpGreater32U_0(v *Value) bool {
27392
27393
27394
27395 for {
27396 _ = v.Args[1]
27397 v_0 := v.Args[0]
27398 if v_0.Op != OpConst32 {
27399 break
27400 }
27401 c := v_0.AuxInt
27402 v_1 := v.Args[1]
27403 if v_1.Op != OpConst32 {
27404 break
27405 }
27406 d := v_1.AuxInt
27407 v.reset(OpConstBool)
27408 v.AuxInt = b2i(uint32(c) > uint32(d))
27409 return true
27410 }
27411 return false
27412 }
27413 func rewriteValuegeneric_OpGreater64_0(v *Value) bool {
27414
27415
27416
27417 for {
27418 _ = v.Args[1]
27419 v_0 := v.Args[0]
27420 if v_0.Op != OpConst64 {
27421 break
27422 }
27423 c := v_0.AuxInt
27424 v_1 := v.Args[1]
27425 if v_1.Op != OpConst64 {
27426 break
27427 }
27428 d := v_1.AuxInt
27429 v.reset(OpConstBool)
27430 v.AuxInt = b2i(c > d)
27431 return true
27432 }
27433 return false
27434 }
27435 func rewriteValuegeneric_OpGreater64F_0(v *Value) bool {
27436
27437
27438
27439 for {
27440 _ = v.Args[1]
27441 v_0 := v.Args[0]
27442 if v_0.Op != OpConst64F {
27443 break
27444 }
27445 c := v_0.AuxInt
27446 v_1 := v.Args[1]
27447 if v_1.Op != OpConst64F {
27448 break
27449 }
27450 d := v_1.AuxInt
27451 v.reset(OpConstBool)
27452 v.AuxInt = b2i(auxTo64F(c) > auxTo64F(d))
27453 return true
27454 }
27455 return false
27456 }
27457 func rewriteValuegeneric_OpGreater64U_0(v *Value) bool {
27458
27459
27460
27461 for {
27462 _ = v.Args[1]
27463 v_0 := v.Args[0]
27464 if v_0.Op != OpConst64 {
27465 break
27466 }
27467 c := v_0.AuxInt
27468 v_1 := v.Args[1]
27469 if v_1.Op != OpConst64 {
27470 break
27471 }
27472 d := v_1.AuxInt
27473 v.reset(OpConstBool)
27474 v.AuxInt = b2i(uint64(c) > uint64(d))
27475 return true
27476 }
27477 return false
27478 }
27479 func rewriteValuegeneric_OpGreater8_0(v *Value) bool {
27480
27481
27482
27483 for {
27484 _ = v.Args[1]
27485 v_0 := v.Args[0]
27486 if v_0.Op != OpConst8 {
27487 break
27488 }
27489 c := v_0.AuxInt
27490 v_1 := v.Args[1]
27491 if v_1.Op != OpConst8 {
27492 break
27493 }
27494 d := v_1.AuxInt
27495 v.reset(OpConstBool)
27496 v.AuxInt = b2i(c > d)
27497 return true
27498 }
27499 return false
27500 }
27501 func rewriteValuegeneric_OpGreater8U_0(v *Value) bool {
27502
27503
27504
27505 for {
27506 _ = v.Args[1]
27507 v_0 := v.Args[0]
27508 if v_0.Op != OpConst8 {
27509 break
27510 }
27511 c := v_0.AuxInt
27512 v_1 := v.Args[1]
27513 if v_1.Op != OpConst8 {
27514 break
27515 }
27516 d := v_1.AuxInt
27517 v.reset(OpConstBool)
27518 v.AuxInt = b2i(uint8(c) > uint8(d))
27519 return true
27520 }
27521 return false
27522 }
27523 func rewriteValuegeneric_OpIMake_0(v *Value) bool {
27524
27525
27526
27527 for {
27528 _ = v.Args[1]
27529 typ := v.Args[0]
27530 v_1 := v.Args[1]
27531 if v_1.Op != OpStructMake1 {
27532 break
27533 }
27534 val := v_1.Args[0]
27535 v.reset(OpIMake)
27536 v.AddArg(typ)
27537 v.AddArg(val)
27538 return true
27539 }
27540
27541
27542
27543 for {
27544 _ = v.Args[1]
27545 typ := v.Args[0]
27546 v_1 := v.Args[1]
27547 if v_1.Op != OpArrayMake1 {
27548 break
27549 }
27550 val := v_1.Args[0]
27551 v.reset(OpIMake)
27552 v.AddArg(typ)
27553 v.AddArg(val)
27554 return true
27555 }
27556 return false
27557 }
27558 func rewriteValuegeneric_OpInterCall_0(v *Value) bool {
27559
27560
27561
27562 for {
27563 argsize := v.AuxInt
27564 mem := v.Args[1]
27565 v_0 := v.Args[0]
27566 if v_0.Op != OpLoad {
27567 break
27568 }
27569 _ = v_0.Args[1]
27570 v_0_0 := v_0.Args[0]
27571 if v_0_0.Op != OpOffPtr {
27572 break
27573 }
27574 off := v_0_0.AuxInt
27575 v_0_0_0 := v_0_0.Args[0]
27576 if v_0_0_0.Op != OpITab {
27577 break
27578 }
27579 v_0_0_0_0 := v_0_0_0.Args[0]
27580 if v_0_0_0_0.Op != OpIMake {
27581 break
27582 }
27583 _ = v_0_0_0_0.Args[1]
27584 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
27585 if v_0_0_0_0_0.Op != OpAddr {
27586 break
27587 }
27588 itab := v_0_0_0_0_0.Aux
27589 v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0]
27590 if v_0_0_0_0_0_0.Op != OpSB {
27591 break
27592 }
27593 if !(devirt(v, itab, off) != nil) {
27594 break
27595 }
27596 v.reset(OpStaticCall)
27597 v.AuxInt = argsize
27598 v.Aux = devirt(v, itab, off)
27599 v.AddArg(mem)
27600 return true
27601 }
27602 return false
27603 }
27604 func rewriteValuegeneric_OpIsInBounds_0(v *Value) bool {
27605
27606
27607
27608 for {
27609 _ = v.Args[1]
27610 v_0 := v.Args[0]
27611 if v_0.Op != OpZeroExt8to32 {
27612 break
27613 }
27614 v_1 := v.Args[1]
27615 if v_1.Op != OpConst32 {
27616 break
27617 }
27618 c := v_1.AuxInt
27619 if !((1 << 8) <= c) {
27620 break
27621 }
27622 v.reset(OpConstBool)
27623 v.AuxInt = 1
27624 return true
27625 }
27626
27627
27628
27629 for {
27630 _ = v.Args[1]
27631 v_0 := v.Args[0]
27632 if v_0.Op != OpZeroExt8to64 {
27633 break
27634 }
27635 v_1 := v.Args[1]
27636 if v_1.Op != OpConst64 {
27637 break
27638 }
27639 c := v_1.AuxInt
27640 if !((1 << 8) <= c) {
27641 break
27642 }
27643 v.reset(OpConstBool)
27644 v.AuxInt = 1
27645 return true
27646 }
27647
27648
27649
27650 for {
27651 _ = v.Args[1]
27652 v_0 := v.Args[0]
27653 if v_0.Op != OpZeroExt16to32 {
27654 break
27655 }
27656 v_1 := v.Args[1]
27657 if v_1.Op != OpConst32 {
27658 break
27659 }
27660 c := v_1.AuxInt
27661 if !((1 << 16) <= c) {
27662 break
27663 }
27664 v.reset(OpConstBool)
27665 v.AuxInt = 1
27666 return true
27667 }
27668
27669
27670
27671 for {
27672 _ = v.Args[1]
27673 v_0 := v.Args[0]
27674 if v_0.Op != OpZeroExt16to64 {
27675 break
27676 }
27677 v_1 := v.Args[1]
27678 if v_1.Op != OpConst64 {
27679 break
27680 }
27681 c := v_1.AuxInt
27682 if !((1 << 16) <= c) {
27683 break
27684 }
27685 v.reset(OpConstBool)
27686 v.AuxInt = 1
27687 return true
27688 }
27689
27690
27691
27692 for {
27693 x := v.Args[1]
27694 if x != v.Args[0] {
27695 break
27696 }
27697 v.reset(OpConstBool)
27698 v.AuxInt = 0
27699 return true
27700 }
27701
27702
27703
27704 for {
27705 _ = v.Args[1]
27706 v_0 := v.Args[0]
27707 if v_0.Op != OpAnd8 {
27708 break
27709 }
27710 _ = v_0.Args[1]
27711 v_0_0 := v_0.Args[0]
27712 if v_0_0.Op != OpConst8 {
27713 break
27714 }
27715 c := v_0_0.AuxInt
27716 v_1 := v.Args[1]
27717 if v_1.Op != OpConst8 {
27718 break
27719 }
27720 d := v_1.AuxInt
27721 if !(0 <= c && c < d) {
27722 break
27723 }
27724 v.reset(OpConstBool)
27725 v.AuxInt = 1
27726 return true
27727 }
27728
27729
27730
27731 for {
27732 _ = v.Args[1]
27733 v_0 := v.Args[0]
27734 if v_0.Op != OpAnd8 {
27735 break
27736 }
27737 _ = v_0.Args[1]
27738 v_0_1 := v_0.Args[1]
27739 if v_0_1.Op != OpConst8 {
27740 break
27741 }
27742 c := v_0_1.AuxInt
27743 v_1 := v.Args[1]
27744 if v_1.Op != OpConst8 {
27745 break
27746 }
27747 d := v_1.AuxInt
27748 if !(0 <= c && c < d) {
27749 break
27750 }
27751 v.reset(OpConstBool)
27752 v.AuxInt = 1
27753 return true
27754 }
27755
27756
27757
27758 for {
27759 _ = v.Args[1]
27760 v_0 := v.Args[0]
27761 if v_0.Op != OpZeroExt8to16 {
27762 break
27763 }
27764 v_0_0 := v_0.Args[0]
27765 if v_0_0.Op != OpAnd8 {
27766 break
27767 }
27768 _ = v_0_0.Args[1]
27769 v_0_0_0 := v_0_0.Args[0]
27770 if v_0_0_0.Op != OpConst8 {
27771 break
27772 }
27773 c := v_0_0_0.AuxInt
27774 v_1 := v.Args[1]
27775 if v_1.Op != OpConst16 {
27776 break
27777 }
27778 d := v_1.AuxInt
27779 if !(0 <= c && c < d) {
27780 break
27781 }
27782 v.reset(OpConstBool)
27783 v.AuxInt = 1
27784 return true
27785 }
27786
27787
27788
27789 for {
27790 _ = v.Args[1]
27791 v_0 := v.Args[0]
27792 if v_0.Op != OpZeroExt8to16 {
27793 break
27794 }
27795 v_0_0 := v_0.Args[0]
27796 if v_0_0.Op != OpAnd8 {
27797 break
27798 }
27799 _ = v_0_0.Args[1]
27800 v_0_0_1 := v_0_0.Args[1]
27801 if v_0_0_1.Op != OpConst8 {
27802 break
27803 }
27804 c := v_0_0_1.AuxInt
27805 v_1 := v.Args[1]
27806 if v_1.Op != OpConst16 {
27807 break
27808 }
27809 d := v_1.AuxInt
27810 if !(0 <= c && c < d) {
27811 break
27812 }
27813 v.reset(OpConstBool)
27814 v.AuxInt = 1
27815 return true
27816 }
27817
27818
27819
27820 for {
27821 _ = v.Args[1]
27822 v_0 := v.Args[0]
27823 if v_0.Op != OpZeroExt8to32 {
27824 break
27825 }
27826 v_0_0 := v_0.Args[0]
27827 if v_0_0.Op != OpAnd8 {
27828 break
27829 }
27830 _ = v_0_0.Args[1]
27831 v_0_0_0 := v_0_0.Args[0]
27832 if v_0_0_0.Op != OpConst8 {
27833 break
27834 }
27835 c := v_0_0_0.AuxInt
27836 v_1 := v.Args[1]
27837 if v_1.Op != OpConst32 {
27838 break
27839 }
27840 d := v_1.AuxInt
27841 if !(0 <= c && c < d) {
27842 break
27843 }
27844 v.reset(OpConstBool)
27845 v.AuxInt = 1
27846 return true
27847 }
27848 return false
27849 }
27850 func rewriteValuegeneric_OpIsInBounds_10(v *Value) bool {
27851
27852
27853
27854 for {
27855 _ = v.Args[1]
27856 v_0 := v.Args[0]
27857 if v_0.Op != OpZeroExt8to32 {
27858 break
27859 }
27860 v_0_0 := v_0.Args[0]
27861 if v_0_0.Op != OpAnd8 {
27862 break
27863 }
27864 _ = v_0_0.Args[1]
27865 v_0_0_1 := v_0_0.Args[1]
27866 if v_0_0_1.Op != OpConst8 {
27867 break
27868 }
27869 c := v_0_0_1.AuxInt
27870 v_1 := v.Args[1]
27871 if v_1.Op != OpConst32 {
27872 break
27873 }
27874 d := v_1.AuxInt
27875 if !(0 <= c && c < d) {
27876 break
27877 }
27878 v.reset(OpConstBool)
27879 v.AuxInt = 1
27880 return true
27881 }
27882
27883
27884
27885 for {
27886 _ = v.Args[1]
27887 v_0 := v.Args[0]
27888 if v_0.Op != OpZeroExt8to64 {
27889 break
27890 }
27891 v_0_0 := v_0.Args[0]
27892 if v_0_0.Op != OpAnd8 {
27893 break
27894 }
27895 _ = v_0_0.Args[1]
27896 v_0_0_0 := v_0_0.Args[0]
27897 if v_0_0_0.Op != OpConst8 {
27898 break
27899 }
27900 c := v_0_0_0.AuxInt
27901 v_1 := v.Args[1]
27902 if v_1.Op != OpConst64 {
27903 break
27904 }
27905 d := v_1.AuxInt
27906 if !(0 <= c && c < d) {
27907 break
27908 }
27909 v.reset(OpConstBool)
27910 v.AuxInt = 1
27911 return true
27912 }
27913
27914
27915
27916 for {
27917 _ = v.Args[1]
27918 v_0 := v.Args[0]
27919 if v_0.Op != OpZeroExt8to64 {
27920 break
27921 }
27922 v_0_0 := v_0.Args[0]
27923 if v_0_0.Op != OpAnd8 {
27924 break
27925 }
27926 _ = v_0_0.Args[1]
27927 v_0_0_1 := v_0_0.Args[1]
27928 if v_0_0_1.Op != OpConst8 {
27929 break
27930 }
27931 c := v_0_0_1.AuxInt
27932 v_1 := v.Args[1]
27933 if v_1.Op != OpConst64 {
27934 break
27935 }
27936 d := v_1.AuxInt
27937 if !(0 <= c && c < d) {
27938 break
27939 }
27940 v.reset(OpConstBool)
27941 v.AuxInt = 1
27942 return true
27943 }
27944
27945
27946
27947 for {
27948 _ = v.Args[1]
27949 v_0 := v.Args[0]
27950 if v_0.Op != OpAnd16 {
27951 break
27952 }
27953 _ = v_0.Args[1]
27954 v_0_0 := v_0.Args[0]
27955 if v_0_0.Op != OpConst16 {
27956 break
27957 }
27958 c := v_0_0.AuxInt
27959 v_1 := v.Args[1]
27960 if v_1.Op != OpConst16 {
27961 break
27962 }
27963 d := v_1.AuxInt
27964 if !(0 <= c && c < d) {
27965 break
27966 }
27967 v.reset(OpConstBool)
27968 v.AuxInt = 1
27969 return true
27970 }
27971
27972
27973
27974 for {
27975 _ = v.Args[1]
27976 v_0 := v.Args[0]
27977 if v_0.Op != OpAnd16 {
27978 break
27979 }
27980 _ = v_0.Args[1]
27981 v_0_1 := v_0.Args[1]
27982 if v_0_1.Op != OpConst16 {
27983 break
27984 }
27985 c := v_0_1.AuxInt
27986 v_1 := v.Args[1]
27987 if v_1.Op != OpConst16 {
27988 break
27989 }
27990 d := v_1.AuxInt
27991 if !(0 <= c && c < d) {
27992 break
27993 }
27994 v.reset(OpConstBool)
27995 v.AuxInt = 1
27996 return true
27997 }
27998
27999
28000
28001 for {
28002 _ = v.Args[1]
28003 v_0 := v.Args[0]
28004 if v_0.Op != OpZeroExt16to32 {
28005 break
28006 }
28007 v_0_0 := v_0.Args[0]
28008 if v_0_0.Op != OpAnd16 {
28009 break
28010 }
28011 _ = v_0_0.Args[1]
28012 v_0_0_0 := v_0_0.Args[0]
28013 if v_0_0_0.Op != OpConst16 {
28014 break
28015 }
28016 c := v_0_0_0.AuxInt
28017 v_1 := v.Args[1]
28018 if v_1.Op != OpConst32 {
28019 break
28020 }
28021 d := v_1.AuxInt
28022 if !(0 <= c && c < d) {
28023 break
28024 }
28025 v.reset(OpConstBool)
28026 v.AuxInt = 1
28027 return true
28028 }
28029
28030
28031
28032 for {
28033 _ = v.Args[1]
28034 v_0 := v.Args[0]
28035 if v_0.Op != OpZeroExt16to32 {
28036 break
28037 }
28038 v_0_0 := v_0.Args[0]
28039 if v_0_0.Op != OpAnd16 {
28040 break
28041 }
28042 _ = v_0_0.Args[1]
28043 v_0_0_1 := v_0_0.Args[1]
28044 if v_0_0_1.Op != OpConst16 {
28045 break
28046 }
28047 c := v_0_0_1.AuxInt
28048 v_1 := v.Args[1]
28049 if v_1.Op != OpConst32 {
28050 break
28051 }
28052 d := v_1.AuxInt
28053 if !(0 <= c && c < d) {
28054 break
28055 }
28056 v.reset(OpConstBool)
28057 v.AuxInt = 1
28058 return true
28059 }
28060
28061
28062
28063 for {
28064 _ = v.Args[1]
28065 v_0 := v.Args[0]
28066 if v_0.Op != OpZeroExt16to64 {
28067 break
28068 }
28069 v_0_0 := v_0.Args[0]
28070 if v_0_0.Op != OpAnd16 {
28071 break
28072 }
28073 _ = v_0_0.Args[1]
28074 v_0_0_0 := v_0_0.Args[0]
28075 if v_0_0_0.Op != OpConst16 {
28076 break
28077 }
28078 c := v_0_0_0.AuxInt
28079 v_1 := v.Args[1]
28080 if v_1.Op != OpConst64 {
28081 break
28082 }
28083 d := v_1.AuxInt
28084 if !(0 <= c && c < d) {
28085 break
28086 }
28087 v.reset(OpConstBool)
28088 v.AuxInt = 1
28089 return true
28090 }
28091
28092
28093
28094 for {
28095 _ = v.Args[1]
28096 v_0 := v.Args[0]
28097 if v_0.Op != OpZeroExt16to64 {
28098 break
28099 }
28100 v_0_0 := v_0.Args[0]
28101 if v_0_0.Op != OpAnd16 {
28102 break
28103 }
28104 _ = v_0_0.Args[1]
28105 v_0_0_1 := v_0_0.Args[1]
28106 if v_0_0_1.Op != OpConst16 {
28107 break
28108 }
28109 c := v_0_0_1.AuxInt
28110 v_1 := v.Args[1]
28111 if v_1.Op != OpConst64 {
28112 break
28113 }
28114 d := v_1.AuxInt
28115 if !(0 <= c && c < d) {
28116 break
28117 }
28118 v.reset(OpConstBool)
28119 v.AuxInt = 1
28120 return true
28121 }
28122
28123
28124
28125 for {
28126 _ = v.Args[1]
28127 v_0 := v.Args[0]
28128 if v_0.Op != OpAnd32 {
28129 break
28130 }
28131 _ = v_0.Args[1]
28132 v_0_0 := v_0.Args[0]
28133 if v_0_0.Op != OpConst32 {
28134 break
28135 }
28136 c := v_0_0.AuxInt
28137 v_1 := v.Args[1]
28138 if v_1.Op != OpConst32 {
28139 break
28140 }
28141 d := v_1.AuxInt
28142 if !(0 <= c && c < d) {
28143 break
28144 }
28145 v.reset(OpConstBool)
28146 v.AuxInt = 1
28147 return true
28148 }
28149 return false
28150 }
28151 func rewriteValuegeneric_OpIsInBounds_20(v *Value) bool {
28152
28153
28154
28155 for {
28156 _ = v.Args[1]
28157 v_0 := v.Args[0]
28158 if v_0.Op != OpAnd32 {
28159 break
28160 }
28161 _ = v_0.Args[1]
28162 v_0_1 := v_0.Args[1]
28163 if v_0_1.Op != OpConst32 {
28164 break
28165 }
28166 c := v_0_1.AuxInt
28167 v_1 := v.Args[1]
28168 if v_1.Op != OpConst32 {
28169 break
28170 }
28171 d := v_1.AuxInt
28172 if !(0 <= c && c < d) {
28173 break
28174 }
28175 v.reset(OpConstBool)
28176 v.AuxInt = 1
28177 return true
28178 }
28179
28180
28181
28182 for {
28183 _ = v.Args[1]
28184 v_0 := v.Args[0]
28185 if v_0.Op != OpZeroExt32to64 {
28186 break
28187 }
28188 v_0_0 := v_0.Args[0]
28189 if v_0_0.Op != OpAnd32 {
28190 break
28191 }
28192 _ = v_0_0.Args[1]
28193 v_0_0_0 := v_0_0.Args[0]
28194 if v_0_0_0.Op != OpConst32 {
28195 break
28196 }
28197 c := v_0_0_0.AuxInt
28198 v_1 := v.Args[1]
28199 if v_1.Op != OpConst64 {
28200 break
28201 }
28202 d := v_1.AuxInt
28203 if !(0 <= c && c < d) {
28204 break
28205 }
28206 v.reset(OpConstBool)
28207 v.AuxInt = 1
28208 return true
28209 }
28210
28211
28212
28213 for {
28214 _ = v.Args[1]
28215 v_0 := v.Args[0]
28216 if v_0.Op != OpZeroExt32to64 {
28217 break
28218 }
28219 v_0_0 := v_0.Args[0]
28220 if v_0_0.Op != OpAnd32 {
28221 break
28222 }
28223 _ = v_0_0.Args[1]
28224 v_0_0_1 := v_0_0.Args[1]
28225 if v_0_0_1.Op != OpConst32 {
28226 break
28227 }
28228 c := v_0_0_1.AuxInt
28229 v_1 := v.Args[1]
28230 if v_1.Op != OpConst64 {
28231 break
28232 }
28233 d := v_1.AuxInt
28234 if !(0 <= c && c < d) {
28235 break
28236 }
28237 v.reset(OpConstBool)
28238 v.AuxInt = 1
28239 return true
28240 }
28241
28242
28243
28244 for {
28245 _ = v.Args[1]
28246 v_0 := v.Args[0]
28247 if v_0.Op != OpAnd64 {
28248 break
28249 }
28250 _ = v_0.Args[1]
28251 v_0_0 := v_0.Args[0]
28252 if v_0_0.Op != OpConst64 {
28253 break
28254 }
28255 c := v_0_0.AuxInt
28256 v_1 := v.Args[1]
28257 if v_1.Op != OpConst64 {
28258 break
28259 }
28260 d := v_1.AuxInt
28261 if !(0 <= c && c < d) {
28262 break
28263 }
28264 v.reset(OpConstBool)
28265 v.AuxInt = 1
28266 return true
28267 }
28268
28269
28270
28271 for {
28272 _ = v.Args[1]
28273 v_0 := v.Args[0]
28274 if v_0.Op != OpAnd64 {
28275 break
28276 }
28277 _ = v_0.Args[1]
28278 v_0_1 := v_0.Args[1]
28279 if v_0_1.Op != OpConst64 {
28280 break
28281 }
28282 c := v_0_1.AuxInt
28283 v_1 := v.Args[1]
28284 if v_1.Op != OpConst64 {
28285 break
28286 }
28287 d := v_1.AuxInt
28288 if !(0 <= c && c < d) {
28289 break
28290 }
28291 v.reset(OpConstBool)
28292 v.AuxInt = 1
28293 return true
28294 }
28295
28296
28297
28298 for {
28299 _ = v.Args[1]
28300 v_0 := v.Args[0]
28301 if v_0.Op != OpConst32 {
28302 break
28303 }
28304 c := v_0.AuxInt
28305 v_1 := v.Args[1]
28306 if v_1.Op != OpConst32 {
28307 break
28308 }
28309 d := v_1.AuxInt
28310 v.reset(OpConstBool)
28311 v.AuxInt = b2i(0 <= c && c < d)
28312 return true
28313 }
28314
28315
28316
28317 for {
28318 _ = v.Args[1]
28319 v_0 := v.Args[0]
28320 if v_0.Op != OpConst64 {
28321 break
28322 }
28323 c := v_0.AuxInt
28324 v_1 := v.Args[1]
28325 if v_1.Op != OpConst64 {
28326 break
28327 }
28328 d := v_1.AuxInt
28329 v.reset(OpConstBool)
28330 v.AuxInt = b2i(0 <= c && c < d)
28331 return true
28332 }
28333
28334
28335
28336 for {
28337 y := v.Args[1]
28338 v_0 := v.Args[0]
28339 if v_0.Op != OpMod32u {
28340 break
28341 }
28342 _ = v_0.Args[1]
28343 if y != v_0.Args[1] {
28344 break
28345 }
28346 v.reset(OpConstBool)
28347 v.AuxInt = 1
28348 return true
28349 }
28350
28351
28352
28353 for {
28354 y := v.Args[1]
28355 v_0 := v.Args[0]
28356 if v_0.Op != OpMod64u {
28357 break
28358 }
28359 _ = v_0.Args[1]
28360 if y != v_0.Args[1] {
28361 break
28362 }
28363 v.reset(OpConstBool)
28364 v.AuxInt = 1
28365 return true
28366 }
28367
28368
28369
28370 for {
28371 _ = v.Args[1]
28372 v_0 := v.Args[0]
28373 if v_0.Op != OpZeroExt8to64 {
28374 break
28375 }
28376 v_0_0 := v_0.Args[0]
28377 if v_0_0.Op != OpRsh8Ux64 {
28378 break
28379 }
28380 _ = v_0_0.Args[1]
28381 v_0_0_1 := v_0_0.Args[1]
28382 if v_0_0_1.Op != OpConst64 {
28383 break
28384 }
28385 c := v_0_0_1.AuxInt
28386 v_1 := v.Args[1]
28387 if v_1.Op != OpConst64 {
28388 break
28389 }
28390 d := v_1.AuxInt
28391 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
28392 break
28393 }
28394 v.reset(OpConstBool)
28395 v.AuxInt = 1
28396 return true
28397 }
28398 return false
28399 }
28400 func rewriteValuegeneric_OpIsInBounds_30(v *Value) bool {
28401
28402
28403
28404 for {
28405 _ = v.Args[1]
28406 v_0 := v.Args[0]
28407 if v_0.Op != OpZeroExt8to32 {
28408 break
28409 }
28410 v_0_0 := v_0.Args[0]
28411 if v_0_0.Op != OpRsh8Ux64 {
28412 break
28413 }
28414 _ = v_0_0.Args[1]
28415 v_0_0_1 := v_0_0.Args[1]
28416 if v_0_0_1.Op != OpConst64 {
28417 break
28418 }
28419 c := v_0_0_1.AuxInt
28420 v_1 := v.Args[1]
28421 if v_1.Op != OpConst32 {
28422 break
28423 }
28424 d := v_1.AuxInt
28425 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
28426 break
28427 }
28428 v.reset(OpConstBool)
28429 v.AuxInt = 1
28430 return true
28431 }
28432
28433
28434
28435 for {
28436 _ = v.Args[1]
28437 v_0 := v.Args[0]
28438 if v_0.Op != OpZeroExt8to16 {
28439 break
28440 }
28441 v_0_0 := v_0.Args[0]
28442 if v_0_0.Op != OpRsh8Ux64 {
28443 break
28444 }
28445 _ = v_0_0.Args[1]
28446 v_0_0_1 := v_0_0.Args[1]
28447 if v_0_0_1.Op != OpConst64 {
28448 break
28449 }
28450 c := v_0_0_1.AuxInt
28451 v_1 := v.Args[1]
28452 if v_1.Op != OpConst16 {
28453 break
28454 }
28455 d := v_1.AuxInt
28456 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
28457 break
28458 }
28459 v.reset(OpConstBool)
28460 v.AuxInt = 1
28461 return true
28462 }
28463
28464
28465
28466 for {
28467 _ = v.Args[1]
28468 v_0 := v.Args[0]
28469 if v_0.Op != OpRsh8Ux64 {
28470 break
28471 }
28472 _ = v_0.Args[1]
28473 v_0_1 := v_0.Args[1]
28474 if v_0_1.Op != OpConst64 {
28475 break
28476 }
28477 c := v_0_1.AuxInt
28478 v_1 := v.Args[1]
28479 if v_1.Op != OpConst64 {
28480 break
28481 }
28482 d := v_1.AuxInt
28483 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
28484 break
28485 }
28486 v.reset(OpConstBool)
28487 v.AuxInt = 1
28488 return true
28489 }
28490
28491
28492
28493 for {
28494 _ = v.Args[1]
28495 v_0 := v.Args[0]
28496 if v_0.Op != OpZeroExt16to64 {
28497 break
28498 }
28499 v_0_0 := v_0.Args[0]
28500 if v_0_0.Op != OpRsh16Ux64 {
28501 break
28502 }
28503 _ = v_0_0.Args[1]
28504 v_0_0_1 := v_0_0.Args[1]
28505 if v_0_0_1.Op != OpConst64 {
28506 break
28507 }
28508 c := v_0_0_1.AuxInt
28509 v_1 := v.Args[1]
28510 if v_1.Op != OpConst64 {
28511 break
28512 }
28513 d := v_1.AuxInt
28514 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
28515 break
28516 }
28517 v.reset(OpConstBool)
28518 v.AuxInt = 1
28519 return true
28520 }
28521
28522
28523
28524 for {
28525 _ = v.Args[1]
28526 v_0 := v.Args[0]
28527 if v_0.Op != OpZeroExt16to32 {
28528 break
28529 }
28530 v_0_0 := v_0.Args[0]
28531 if v_0_0.Op != OpRsh16Ux64 {
28532 break
28533 }
28534 _ = v_0_0.Args[1]
28535 v_0_0_1 := v_0_0.Args[1]
28536 if v_0_0_1.Op != OpConst64 {
28537 break
28538 }
28539 c := v_0_0_1.AuxInt
28540 v_1 := v.Args[1]
28541 if v_1.Op != OpConst64 {
28542 break
28543 }
28544 d := v_1.AuxInt
28545 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
28546 break
28547 }
28548 v.reset(OpConstBool)
28549 v.AuxInt = 1
28550 return true
28551 }
28552
28553
28554
28555 for {
28556 _ = v.Args[1]
28557 v_0 := v.Args[0]
28558 if v_0.Op != OpRsh16Ux64 {
28559 break
28560 }
28561 _ = v_0.Args[1]
28562 v_0_1 := v_0.Args[1]
28563 if v_0_1.Op != OpConst64 {
28564 break
28565 }
28566 c := v_0_1.AuxInt
28567 v_1 := v.Args[1]
28568 if v_1.Op != OpConst64 {
28569 break
28570 }
28571 d := v_1.AuxInt
28572 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
28573 break
28574 }
28575 v.reset(OpConstBool)
28576 v.AuxInt = 1
28577 return true
28578 }
28579
28580
28581
28582 for {
28583 _ = v.Args[1]
28584 v_0 := v.Args[0]
28585 if v_0.Op != OpZeroExt32to64 {
28586 break
28587 }
28588 v_0_0 := v_0.Args[0]
28589 if v_0_0.Op != OpRsh32Ux64 {
28590 break
28591 }
28592 _ = v_0_0.Args[1]
28593 v_0_0_1 := v_0_0.Args[1]
28594 if v_0_0_1.Op != OpConst64 {
28595 break
28596 }
28597 c := v_0_0_1.AuxInt
28598 v_1 := v.Args[1]
28599 if v_1.Op != OpConst64 {
28600 break
28601 }
28602 d := v_1.AuxInt
28603 if !(0 < c && c < 32 && 1<<uint(32-c)-1 < d) {
28604 break
28605 }
28606 v.reset(OpConstBool)
28607 v.AuxInt = 1
28608 return true
28609 }
28610
28611
28612
28613 for {
28614 _ = v.Args[1]
28615 v_0 := v.Args[0]
28616 if v_0.Op != OpRsh32Ux64 {
28617 break
28618 }
28619 _ = v_0.Args[1]
28620 v_0_1 := v_0.Args[1]
28621 if v_0_1.Op != OpConst64 {
28622 break
28623 }
28624 c := v_0_1.AuxInt
28625 v_1 := v.Args[1]
28626 if v_1.Op != OpConst64 {
28627 break
28628 }
28629 d := v_1.AuxInt
28630 if !(0 < c && c < 32 && 1<<uint(32-c)-1 < d) {
28631 break
28632 }
28633 v.reset(OpConstBool)
28634 v.AuxInt = 1
28635 return true
28636 }
28637
28638
28639
28640 for {
28641 _ = v.Args[1]
28642 v_0 := v.Args[0]
28643 if v_0.Op != OpRsh64Ux64 {
28644 break
28645 }
28646 _ = v_0.Args[1]
28647 v_0_1 := v_0.Args[1]
28648 if v_0_1.Op != OpConst64 {
28649 break
28650 }
28651 c := v_0_1.AuxInt
28652 v_1 := v.Args[1]
28653 if v_1.Op != OpConst64 {
28654 break
28655 }
28656 d := v_1.AuxInt
28657 if !(0 < c && c < 64 && 1<<uint(64-c)-1 < d) {
28658 break
28659 }
28660 v.reset(OpConstBool)
28661 v.AuxInt = 1
28662 return true
28663 }
28664 return false
28665 }
28666 func rewriteValuegeneric_OpIsNonNil_0(v *Value) bool {
28667
28668
28669
28670 for {
28671 v_0 := v.Args[0]
28672 if v_0.Op != OpConstNil {
28673 break
28674 }
28675 v.reset(OpConstBool)
28676 v.AuxInt = 0
28677 return true
28678 }
28679
28680
28681
28682 for {
28683 v_0 := v.Args[0]
28684 if v_0.Op != OpConst32 {
28685 break
28686 }
28687 c := v_0.AuxInt
28688 v.reset(OpConstBool)
28689 v.AuxInt = b2i(c != 0)
28690 return true
28691 }
28692
28693
28694
28695 for {
28696 v_0 := v.Args[0]
28697 if v_0.Op != OpConst64 {
28698 break
28699 }
28700 c := v_0.AuxInt
28701 v.reset(OpConstBool)
28702 v.AuxInt = b2i(c != 0)
28703 return true
28704 }
28705
28706
28707
28708 for {
28709 v_0 := v.Args[0]
28710 if v_0.Op != OpAddr {
28711 break
28712 }
28713 v.reset(OpConstBool)
28714 v.AuxInt = 1
28715 return true
28716 }
28717
28718
28719
28720 for {
28721 v_0 := v.Args[0]
28722 if v_0.Op != OpLocalAddr {
28723 break
28724 }
28725 _ = v_0.Args[1]
28726 v.reset(OpConstBool)
28727 v.AuxInt = 1
28728 return true
28729 }
28730 return false
28731 }
28732 func rewriteValuegeneric_OpIsSliceInBounds_0(v *Value) bool {
28733
28734
28735
28736 for {
28737 x := v.Args[1]
28738 if x != v.Args[0] {
28739 break
28740 }
28741 v.reset(OpConstBool)
28742 v.AuxInt = 1
28743 return true
28744 }
28745
28746
28747
28748 for {
28749 _ = v.Args[1]
28750 v_0 := v.Args[0]
28751 if v_0.Op != OpAnd32 {
28752 break
28753 }
28754 _ = v_0.Args[1]
28755 v_0_0 := v_0.Args[0]
28756 if v_0_0.Op != OpConst32 {
28757 break
28758 }
28759 c := v_0_0.AuxInt
28760 v_1 := v.Args[1]
28761 if v_1.Op != OpConst32 {
28762 break
28763 }
28764 d := v_1.AuxInt
28765 if !(0 <= c && c <= d) {
28766 break
28767 }
28768 v.reset(OpConstBool)
28769 v.AuxInt = 1
28770 return true
28771 }
28772
28773
28774
28775 for {
28776 _ = v.Args[1]
28777 v_0 := v.Args[0]
28778 if v_0.Op != OpAnd32 {
28779 break
28780 }
28781 _ = v_0.Args[1]
28782 v_0_1 := v_0.Args[1]
28783 if v_0_1.Op != OpConst32 {
28784 break
28785 }
28786 c := v_0_1.AuxInt
28787 v_1 := v.Args[1]
28788 if v_1.Op != OpConst32 {
28789 break
28790 }
28791 d := v_1.AuxInt
28792 if !(0 <= c && c <= d) {
28793 break
28794 }
28795 v.reset(OpConstBool)
28796 v.AuxInt = 1
28797 return true
28798 }
28799
28800
28801
28802 for {
28803 _ = v.Args[1]
28804 v_0 := v.Args[0]
28805 if v_0.Op != OpAnd64 {
28806 break
28807 }
28808 _ = v_0.Args[1]
28809 v_0_0 := v_0.Args[0]
28810 if v_0_0.Op != OpConst64 {
28811 break
28812 }
28813 c := v_0_0.AuxInt
28814 v_1 := v.Args[1]
28815 if v_1.Op != OpConst64 {
28816 break
28817 }
28818 d := v_1.AuxInt
28819 if !(0 <= c && c <= d) {
28820 break
28821 }
28822 v.reset(OpConstBool)
28823 v.AuxInt = 1
28824 return true
28825 }
28826
28827
28828
28829 for {
28830 _ = v.Args[1]
28831 v_0 := v.Args[0]
28832 if v_0.Op != OpAnd64 {
28833 break
28834 }
28835 _ = v_0.Args[1]
28836 v_0_1 := v_0.Args[1]
28837 if v_0_1.Op != OpConst64 {
28838 break
28839 }
28840 c := v_0_1.AuxInt
28841 v_1 := v.Args[1]
28842 if v_1.Op != OpConst64 {
28843 break
28844 }
28845 d := v_1.AuxInt
28846 if !(0 <= c && c <= d) {
28847 break
28848 }
28849 v.reset(OpConstBool)
28850 v.AuxInt = 1
28851 return true
28852 }
28853
28854
28855
28856 for {
28857 _ = v.Args[1]
28858 v_0 := v.Args[0]
28859 if v_0.Op != OpConst32 {
28860 break
28861 }
28862 if v_0.AuxInt != 0 {
28863 break
28864 }
28865 v.reset(OpConstBool)
28866 v.AuxInt = 1
28867 return true
28868 }
28869
28870
28871
28872 for {
28873 _ = v.Args[1]
28874 v_0 := v.Args[0]
28875 if v_0.Op != OpConst64 {
28876 break
28877 }
28878 if v_0.AuxInt != 0 {
28879 break
28880 }
28881 v.reset(OpConstBool)
28882 v.AuxInt = 1
28883 return true
28884 }
28885
28886
28887
28888 for {
28889 _ = v.Args[1]
28890 v_0 := v.Args[0]
28891 if v_0.Op != OpConst32 {
28892 break
28893 }
28894 c := v_0.AuxInt
28895 v_1 := v.Args[1]
28896 if v_1.Op != OpConst32 {
28897 break
28898 }
28899 d := v_1.AuxInt
28900 v.reset(OpConstBool)
28901 v.AuxInt = b2i(0 <= c && c <= d)
28902 return true
28903 }
28904
28905
28906
28907 for {
28908 _ = v.Args[1]
28909 v_0 := v.Args[0]
28910 if v_0.Op != OpConst64 {
28911 break
28912 }
28913 c := v_0.AuxInt
28914 v_1 := v.Args[1]
28915 if v_1.Op != OpConst64 {
28916 break
28917 }
28918 d := v_1.AuxInt
28919 v.reset(OpConstBool)
28920 v.AuxInt = b2i(0 <= c && c <= d)
28921 return true
28922 }
28923
28924
28925
28926 for {
28927 _ = v.Args[1]
28928 v_0 := v.Args[0]
28929 if v_0.Op != OpSliceLen {
28930 break
28931 }
28932 x := v_0.Args[0]
28933 v_1 := v.Args[1]
28934 if v_1.Op != OpSliceCap {
28935 break
28936 }
28937 if x != v_1.Args[0] {
28938 break
28939 }
28940 v.reset(OpConstBool)
28941 v.AuxInt = 1
28942 return true
28943 }
28944 return false
28945 }
28946 func rewriteValuegeneric_OpLeq16_0(v *Value) bool {
28947
28948
28949
28950 for {
28951 _ = v.Args[1]
28952 v_0 := v.Args[0]
28953 if v_0.Op != OpConst16 {
28954 break
28955 }
28956 c := v_0.AuxInt
28957 v_1 := v.Args[1]
28958 if v_1.Op != OpConst16 {
28959 break
28960 }
28961 d := v_1.AuxInt
28962 v.reset(OpConstBool)
28963 v.AuxInt = b2i(c <= d)
28964 return true
28965 }
28966 return false
28967 }
28968 func rewriteValuegeneric_OpLeq16U_0(v *Value) bool {
28969
28970
28971
28972 for {
28973 _ = v.Args[1]
28974 v_0 := v.Args[0]
28975 if v_0.Op != OpConst16 {
28976 break
28977 }
28978 c := v_0.AuxInt
28979 v_1 := v.Args[1]
28980 if v_1.Op != OpConst16 {
28981 break
28982 }
28983 d := v_1.AuxInt
28984 v.reset(OpConstBool)
28985 v.AuxInt = b2i(uint16(c) <= uint16(d))
28986 return true
28987 }
28988 return false
28989 }
28990 func rewriteValuegeneric_OpLeq32_0(v *Value) bool {
28991
28992
28993
28994 for {
28995 _ = v.Args[1]
28996 v_0 := v.Args[0]
28997 if v_0.Op != OpConst32 {
28998 break
28999 }
29000 c := v_0.AuxInt
29001 v_1 := v.Args[1]
29002 if v_1.Op != OpConst32 {
29003 break
29004 }
29005 d := v_1.AuxInt
29006 v.reset(OpConstBool)
29007 v.AuxInt = b2i(c <= d)
29008 return true
29009 }
29010 return false
29011 }
29012 func rewriteValuegeneric_OpLeq32F_0(v *Value) bool {
29013
29014
29015
29016 for {
29017 _ = v.Args[1]
29018 v_0 := v.Args[0]
29019 if v_0.Op != OpConst32F {
29020 break
29021 }
29022 c := v_0.AuxInt
29023 v_1 := v.Args[1]
29024 if v_1.Op != OpConst32F {
29025 break
29026 }
29027 d := v_1.AuxInt
29028 v.reset(OpConstBool)
29029 v.AuxInt = b2i(auxTo32F(c) <= auxTo32F(d))
29030 return true
29031 }
29032 return false
29033 }
29034 func rewriteValuegeneric_OpLeq32U_0(v *Value) bool {
29035
29036
29037
29038 for {
29039 _ = v.Args[1]
29040 v_0 := v.Args[0]
29041 if v_0.Op != OpConst32 {
29042 break
29043 }
29044 c := v_0.AuxInt
29045 v_1 := v.Args[1]
29046 if v_1.Op != OpConst32 {
29047 break
29048 }
29049 d := v_1.AuxInt
29050 v.reset(OpConstBool)
29051 v.AuxInt = b2i(uint32(c) <= uint32(d))
29052 return true
29053 }
29054 return false
29055 }
29056 func rewriteValuegeneric_OpLeq64_0(v *Value) bool {
29057
29058
29059
29060 for {
29061 _ = v.Args[1]
29062 v_0 := v.Args[0]
29063 if v_0.Op != OpConst64 {
29064 break
29065 }
29066 c := v_0.AuxInt
29067 v_1 := v.Args[1]
29068 if v_1.Op != OpConst64 {
29069 break
29070 }
29071 d := v_1.AuxInt
29072 v.reset(OpConstBool)
29073 v.AuxInt = b2i(c <= d)
29074 return true
29075 }
29076 return false
29077 }
29078 func rewriteValuegeneric_OpLeq64F_0(v *Value) bool {
29079
29080
29081
29082 for {
29083 _ = v.Args[1]
29084 v_0 := v.Args[0]
29085 if v_0.Op != OpConst64F {
29086 break
29087 }
29088 c := v_0.AuxInt
29089 v_1 := v.Args[1]
29090 if v_1.Op != OpConst64F {
29091 break
29092 }
29093 d := v_1.AuxInt
29094 v.reset(OpConstBool)
29095 v.AuxInt = b2i(auxTo64F(c) <= auxTo64F(d))
29096 return true
29097 }
29098 return false
29099 }
29100 func rewriteValuegeneric_OpLeq64U_0(v *Value) bool {
29101
29102
29103
29104 for {
29105 _ = v.Args[1]
29106 v_0 := v.Args[0]
29107 if v_0.Op != OpConst64 {
29108 break
29109 }
29110 c := v_0.AuxInt
29111 v_1 := v.Args[1]
29112 if v_1.Op != OpConst64 {
29113 break
29114 }
29115 d := v_1.AuxInt
29116 v.reset(OpConstBool)
29117 v.AuxInt = b2i(uint64(c) <= uint64(d))
29118 return true
29119 }
29120 return false
29121 }
29122 func rewriteValuegeneric_OpLeq8_0(v *Value) bool {
29123
29124
29125
29126 for {
29127 _ = v.Args[1]
29128 v_0 := v.Args[0]
29129 if v_0.Op != OpConst8 {
29130 break
29131 }
29132 c := v_0.AuxInt
29133 v_1 := v.Args[1]
29134 if v_1.Op != OpConst8 {
29135 break
29136 }
29137 d := v_1.AuxInt
29138 v.reset(OpConstBool)
29139 v.AuxInt = b2i(c <= d)
29140 return true
29141 }
29142 return false
29143 }
29144 func rewriteValuegeneric_OpLeq8U_0(v *Value) bool {
29145
29146
29147
29148 for {
29149 _ = v.Args[1]
29150 v_0 := v.Args[0]
29151 if v_0.Op != OpConst8 {
29152 break
29153 }
29154 c := v_0.AuxInt
29155 v_1 := v.Args[1]
29156 if v_1.Op != OpConst8 {
29157 break
29158 }
29159 d := v_1.AuxInt
29160 v.reset(OpConstBool)
29161 v.AuxInt = b2i(uint8(c) <= uint8(d))
29162 return true
29163 }
29164 return false
29165 }
29166 func rewriteValuegeneric_OpLess16_0(v *Value) bool {
29167
29168
29169
29170 for {
29171 _ = v.Args[1]
29172 v_0 := v.Args[0]
29173 if v_0.Op != OpConst16 {
29174 break
29175 }
29176 c := v_0.AuxInt
29177 v_1 := v.Args[1]
29178 if v_1.Op != OpConst16 {
29179 break
29180 }
29181 d := v_1.AuxInt
29182 v.reset(OpConstBool)
29183 v.AuxInt = b2i(c < d)
29184 return true
29185 }
29186 return false
29187 }
29188 func rewriteValuegeneric_OpLess16U_0(v *Value) bool {
29189
29190
29191
29192 for {
29193 _ = v.Args[1]
29194 v_0 := v.Args[0]
29195 if v_0.Op != OpConst16 {
29196 break
29197 }
29198 c := v_0.AuxInt
29199 v_1 := v.Args[1]
29200 if v_1.Op != OpConst16 {
29201 break
29202 }
29203 d := v_1.AuxInt
29204 v.reset(OpConstBool)
29205 v.AuxInt = b2i(uint16(c) < uint16(d))
29206 return true
29207 }
29208 return false
29209 }
29210 func rewriteValuegeneric_OpLess32_0(v *Value) bool {
29211
29212
29213
29214 for {
29215 _ = v.Args[1]
29216 v_0 := v.Args[0]
29217 if v_0.Op != OpConst32 {
29218 break
29219 }
29220 c := v_0.AuxInt
29221 v_1 := v.Args[1]
29222 if v_1.Op != OpConst32 {
29223 break
29224 }
29225 d := v_1.AuxInt
29226 v.reset(OpConstBool)
29227 v.AuxInt = b2i(c < d)
29228 return true
29229 }
29230 return false
29231 }
29232 func rewriteValuegeneric_OpLess32F_0(v *Value) bool {
29233
29234
29235
29236 for {
29237 _ = v.Args[1]
29238 v_0 := v.Args[0]
29239 if v_0.Op != OpConst32F {
29240 break
29241 }
29242 c := v_0.AuxInt
29243 v_1 := v.Args[1]
29244 if v_1.Op != OpConst32F {
29245 break
29246 }
29247 d := v_1.AuxInt
29248 v.reset(OpConstBool)
29249 v.AuxInt = b2i(auxTo32F(c) < auxTo32F(d))
29250 return true
29251 }
29252 return false
29253 }
29254 func rewriteValuegeneric_OpLess32U_0(v *Value) bool {
29255
29256
29257
29258 for {
29259 _ = v.Args[1]
29260 v_0 := v.Args[0]
29261 if v_0.Op != OpConst32 {
29262 break
29263 }
29264 c := v_0.AuxInt
29265 v_1 := v.Args[1]
29266 if v_1.Op != OpConst32 {
29267 break
29268 }
29269 d := v_1.AuxInt
29270 v.reset(OpConstBool)
29271 v.AuxInt = b2i(uint32(c) < uint32(d))
29272 return true
29273 }
29274 return false
29275 }
29276 func rewriteValuegeneric_OpLess64_0(v *Value) bool {
29277
29278
29279
29280 for {
29281 _ = v.Args[1]
29282 v_0 := v.Args[0]
29283 if v_0.Op != OpConst64 {
29284 break
29285 }
29286 c := v_0.AuxInt
29287 v_1 := v.Args[1]
29288 if v_1.Op != OpConst64 {
29289 break
29290 }
29291 d := v_1.AuxInt
29292 v.reset(OpConstBool)
29293 v.AuxInt = b2i(c < d)
29294 return true
29295 }
29296 return false
29297 }
29298 func rewriteValuegeneric_OpLess64F_0(v *Value) bool {
29299
29300
29301
29302 for {
29303 _ = v.Args[1]
29304 v_0 := v.Args[0]
29305 if v_0.Op != OpConst64F {
29306 break
29307 }
29308 c := v_0.AuxInt
29309 v_1 := v.Args[1]
29310 if v_1.Op != OpConst64F {
29311 break
29312 }
29313 d := v_1.AuxInt
29314 v.reset(OpConstBool)
29315 v.AuxInt = b2i(auxTo64F(c) < auxTo64F(d))
29316 return true
29317 }
29318 return false
29319 }
29320 func rewriteValuegeneric_OpLess64U_0(v *Value) bool {
29321
29322
29323
29324 for {
29325 _ = v.Args[1]
29326 v_0 := v.Args[0]
29327 if v_0.Op != OpConst64 {
29328 break
29329 }
29330 c := v_0.AuxInt
29331 v_1 := v.Args[1]
29332 if v_1.Op != OpConst64 {
29333 break
29334 }
29335 d := v_1.AuxInt
29336 v.reset(OpConstBool)
29337 v.AuxInt = b2i(uint64(c) < uint64(d))
29338 return true
29339 }
29340 return false
29341 }
29342 func rewriteValuegeneric_OpLess8_0(v *Value) bool {
29343
29344
29345
29346 for {
29347 _ = v.Args[1]
29348 v_0 := v.Args[0]
29349 if v_0.Op != OpConst8 {
29350 break
29351 }
29352 c := v_0.AuxInt
29353 v_1 := v.Args[1]
29354 if v_1.Op != OpConst8 {
29355 break
29356 }
29357 d := v_1.AuxInt
29358 v.reset(OpConstBool)
29359 v.AuxInt = b2i(c < d)
29360 return true
29361 }
29362 return false
29363 }
29364 func rewriteValuegeneric_OpLess8U_0(v *Value) bool {
29365
29366
29367
29368 for {
29369 _ = v.Args[1]
29370 v_0 := v.Args[0]
29371 if v_0.Op != OpConst8 {
29372 break
29373 }
29374 c := v_0.AuxInt
29375 v_1 := v.Args[1]
29376 if v_1.Op != OpConst8 {
29377 break
29378 }
29379 d := v_1.AuxInt
29380 v.reset(OpConstBool)
29381 v.AuxInt = b2i(uint8(c) < uint8(d))
29382 return true
29383 }
29384 return false
29385 }
29386 func rewriteValuegeneric_OpLoad_0(v *Value) bool {
29387 b := v.Block
29388 fe := b.Func.fe
29389
29390
29391
29392 for {
29393 t1 := v.Type
29394 _ = v.Args[1]
29395 p1 := v.Args[0]
29396 v_1 := v.Args[1]
29397 if v_1.Op != OpStore {
29398 break
29399 }
29400 t2 := v_1.Aux
29401 _ = v_1.Args[2]
29402 p2 := v_1.Args[0]
29403 x := v_1.Args[1]
29404 if !(isSamePtr(p1, p2) && t1.Compare(x.Type) == types.CMPeq && t1.Size() == sizeof(t2)) {
29405 break
29406 }
29407 v.reset(OpCopy)
29408 v.Type = x.Type
29409 v.AddArg(x)
29410 return true
29411 }
29412
29413
29414
29415 for {
29416 t1 := v.Type
29417 _ = v.Args[1]
29418 p1 := v.Args[0]
29419 v_1 := v.Args[1]
29420 if v_1.Op != OpStore {
29421 break
29422 }
29423 t2 := v_1.Aux
29424 _ = v_1.Args[2]
29425 p2 := v_1.Args[0]
29426 v_1_2 := v_1.Args[2]
29427 if v_1_2.Op != OpStore {
29428 break
29429 }
29430 t3 := v_1_2.Aux
29431 _ = v_1_2.Args[2]
29432 p3 := v_1_2.Args[0]
29433 x := v_1_2.Args[1]
29434 if !(isSamePtr(p1, p3) && t1.Compare(x.Type) == types.CMPeq && t1.Size() == sizeof(t2) && disjoint(p3, sizeof(t3), p2, sizeof(t2))) {
29435 break
29436 }
29437 v.reset(OpCopy)
29438 v.Type = x.Type
29439 v.AddArg(x)
29440 return true
29441 }
29442
29443
29444
29445 for {
29446 t1 := v.Type
29447 _ = v.Args[1]
29448 p1 := v.Args[0]
29449 v_1 := v.Args[1]
29450 if v_1.Op != OpStore {
29451 break
29452 }
29453 t2 := v_1.Aux
29454 _ = v_1.Args[2]
29455 p2 := v_1.Args[0]
29456 v_1_2 := v_1.Args[2]
29457 if v_1_2.Op != OpStore {
29458 break
29459 }
29460 t3 := v_1_2.Aux
29461 _ = v_1_2.Args[2]
29462 p3 := v_1_2.Args[0]
29463 v_1_2_2 := v_1_2.Args[2]
29464 if v_1_2_2.Op != OpStore {
29465 break
29466 }
29467 t4 := v_1_2_2.Aux
29468 _ = v_1_2_2.Args[2]
29469 p4 := v_1_2_2.Args[0]
29470 x := v_1_2_2.Args[1]
29471 if !(isSamePtr(p1, p4) && t1.Compare(x.Type) == types.CMPeq && t1.Size() == sizeof(t2) && disjoint(p4, sizeof(t4), p2, sizeof(t2)) && disjoint(p4, sizeof(t4), p3, sizeof(t3))) {
29472 break
29473 }
29474 v.reset(OpCopy)
29475 v.Type = x.Type
29476 v.AddArg(x)
29477 return true
29478 }
29479
29480
29481
29482 for {
29483 t1 := v.Type
29484 _ = v.Args[1]
29485 p1 := v.Args[0]
29486 v_1 := v.Args[1]
29487 if v_1.Op != OpStore {
29488 break
29489 }
29490 t2 := v_1.Aux
29491 _ = v_1.Args[2]
29492 p2 := v_1.Args[0]
29493 v_1_2 := v_1.Args[2]
29494 if v_1_2.Op != OpStore {
29495 break
29496 }
29497 t3 := v_1_2.Aux
29498 _ = v_1_2.Args[2]
29499 p3 := v_1_2.Args[0]
29500 v_1_2_2 := v_1_2.Args[2]
29501 if v_1_2_2.Op != OpStore {
29502 break
29503 }
29504 t4 := v_1_2_2.Aux
29505 _ = v_1_2_2.Args[2]
29506 p4 := v_1_2_2.Args[0]
29507 v_1_2_2_2 := v_1_2_2.Args[2]
29508 if v_1_2_2_2.Op != OpStore {
29509 break
29510 }
29511 t5 := v_1_2_2_2.Aux
29512 _ = v_1_2_2_2.Args[2]
29513 p5 := v_1_2_2_2.Args[0]
29514 x := v_1_2_2_2.Args[1]
29515 if !(isSamePtr(p1, p5) && t1.Compare(x.Type) == types.CMPeq && t1.Size() == sizeof(t2) && disjoint(p5, sizeof(t5), p2, sizeof(t2)) && disjoint(p5, sizeof(t5), p3, sizeof(t3)) && disjoint(p5, sizeof(t5), p4, sizeof(t4))) {
29516 break
29517 }
29518 v.reset(OpCopy)
29519 v.Type = x.Type
29520 v.AddArg(x)
29521 return true
29522 }
29523
29524
29525
29526 for {
29527 t1 := v.Type
29528 _ = v.Args[1]
29529 p1 := v.Args[0]
29530 v_1 := v.Args[1]
29531 if v_1.Op != OpStore {
29532 break
29533 }
29534 t2 := v_1.Aux
29535 _ = v_1.Args[2]
29536 p2 := v_1.Args[0]
29537 v_1_1 := v_1.Args[1]
29538 if v_1_1.Op != OpConst64 {
29539 break
29540 }
29541 x := v_1_1.AuxInt
29542 if !(isSamePtr(p1, p2) && sizeof(t2) == 8 && is64BitFloat(t1)) {
29543 break
29544 }
29545 v.reset(OpConst64F)
29546 v.AuxInt = x
29547 return true
29548 }
29549
29550
29551
29552 for {
29553 t1 := v.Type
29554 _ = v.Args[1]
29555 p1 := v.Args[0]
29556 v_1 := v.Args[1]
29557 if v_1.Op != OpStore {
29558 break
29559 }
29560 t2 := v_1.Aux
29561 _ = v_1.Args[2]
29562 p2 := v_1.Args[0]
29563 v_1_1 := v_1.Args[1]
29564 if v_1_1.Op != OpConst32 {
29565 break
29566 }
29567 x := v_1_1.AuxInt
29568 if !(isSamePtr(p1, p2) && sizeof(t2) == 4 && is32BitFloat(t1)) {
29569 break
29570 }
29571 v.reset(OpConst32F)
29572 v.AuxInt = auxFrom32F(math.Float32frombits(uint32(x)))
29573 return true
29574 }
29575
29576
29577
29578 for {
29579 t1 := v.Type
29580 _ = v.Args[1]
29581 p1 := v.Args[0]
29582 v_1 := v.Args[1]
29583 if v_1.Op != OpStore {
29584 break
29585 }
29586 t2 := v_1.Aux
29587 _ = v_1.Args[2]
29588 p2 := v_1.Args[0]
29589 v_1_1 := v_1.Args[1]
29590 if v_1_1.Op != OpConst64F {
29591 break
29592 }
29593 x := v_1_1.AuxInt
29594 if !(isSamePtr(p1, p2) && sizeof(t2) == 8 && is64BitInt(t1)) {
29595 break
29596 }
29597 v.reset(OpConst64)
29598 v.AuxInt = x
29599 return true
29600 }
29601
29602
29603
29604 for {
29605 t1 := v.Type
29606 _ = v.Args[1]
29607 p1 := v.Args[0]
29608 v_1 := v.Args[1]
29609 if v_1.Op != OpStore {
29610 break
29611 }
29612 t2 := v_1.Aux
29613 _ = v_1.Args[2]
29614 p2 := v_1.Args[0]
29615 v_1_1 := v_1.Args[1]
29616 if v_1_1.Op != OpConst32F {
29617 break
29618 }
29619 x := v_1_1.AuxInt
29620 if !(isSamePtr(p1, p2) && sizeof(t2) == 4 && is32BitInt(t1)) {
29621 break
29622 }
29623 v.reset(OpConst32)
29624 v.AuxInt = int64(int32(math.Float32bits(auxTo32F(x))))
29625 return true
29626 }
29627
29628
29629
29630 for {
29631 t1 := v.Type
29632 _ = v.Args[1]
29633 op := v.Args[0]
29634 if op.Op != OpOffPtr {
29635 break
29636 }
29637 o1 := op.AuxInt
29638 p1 := op.Args[0]
29639 v_1 := v.Args[1]
29640 if v_1.Op != OpStore {
29641 break
29642 }
29643 t2 := v_1.Aux
29644 _ = v_1.Args[2]
29645 p2 := v_1.Args[0]
29646 mem := v_1.Args[2]
29647 if mem.Op != OpZero {
29648 break
29649 }
29650 n := mem.AuxInt
29651 _ = mem.Args[1]
29652 p3 := mem.Args[0]
29653 if !(o1 >= 0 && o1+t1.Size() <= n && isSamePtr(p1, p3) && fe.CanSSA(t1) && disjoint(op, t1.Size(), p2, sizeof(t2))) {
29654 break
29655 }
29656 b = mem.Block
29657 v0 := b.NewValue0(v.Pos, OpLoad, t1)
29658 v.reset(OpCopy)
29659 v.AddArg(v0)
29660 v1 := b.NewValue0(v.Pos, OpOffPtr, op.Type)
29661 v1.AuxInt = o1
29662 v1.AddArg(p3)
29663 v0.AddArg(v1)
29664 v0.AddArg(mem)
29665 return true
29666 }
29667
29668
29669
29670 for {
29671 t1 := v.Type
29672 _ = v.Args[1]
29673 op := v.Args[0]
29674 if op.Op != OpOffPtr {
29675 break
29676 }
29677 o1 := op.AuxInt
29678 p1 := op.Args[0]
29679 v_1 := v.Args[1]
29680 if v_1.Op != OpStore {
29681 break
29682 }
29683 t2 := v_1.Aux
29684 _ = v_1.Args[2]
29685 p2 := v_1.Args[0]
29686 v_1_2 := v_1.Args[2]
29687 if v_1_2.Op != OpStore {
29688 break
29689 }
29690 t3 := v_1_2.Aux
29691 _ = v_1_2.Args[2]
29692 p3 := v_1_2.Args[0]
29693 mem := v_1_2.Args[2]
29694 if mem.Op != OpZero {
29695 break
29696 }
29697 n := mem.AuxInt
29698 _ = mem.Args[1]
29699 p4 := mem.Args[0]
29700 if !(o1 >= 0 && o1+t1.Size() <= n && isSamePtr(p1, p4) && fe.CanSSA(t1) && disjoint(op, t1.Size(), p2, sizeof(t2)) && disjoint(op, t1.Size(), p3, sizeof(t3))) {
29701 break
29702 }
29703 b = mem.Block
29704 v0 := b.NewValue0(v.Pos, OpLoad, t1)
29705 v.reset(OpCopy)
29706 v.AddArg(v0)
29707 v1 := b.NewValue0(v.Pos, OpOffPtr, op.Type)
29708 v1.AuxInt = o1
29709 v1.AddArg(p4)
29710 v0.AddArg(v1)
29711 v0.AddArg(mem)
29712 return true
29713 }
29714 return false
29715 }
29716 func rewriteValuegeneric_OpLoad_10(v *Value) bool {
29717 b := v.Block
29718 fe := b.Func.fe
29719
29720
29721
29722 for {
29723 t1 := v.Type
29724 _ = v.Args[1]
29725 op := v.Args[0]
29726 if op.Op != OpOffPtr {
29727 break
29728 }
29729 o1 := op.AuxInt
29730 p1 := op.Args[0]
29731 v_1 := v.Args[1]
29732 if v_1.Op != OpStore {
29733 break
29734 }
29735 t2 := v_1.Aux
29736 _ = v_1.Args[2]
29737 p2 := v_1.Args[0]
29738 v_1_2 := v_1.Args[2]
29739 if v_1_2.Op != OpStore {
29740 break
29741 }
29742 t3 := v_1_2.Aux
29743 _ = v_1_2.Args[2]
29744 p3 := v_1_2.Args[0]
29745 v_1_2_2 := v_1_2.Args[2]
29746 if v_1_2_2.Op != OpStore {
29747 break
29748 }
29749 t4 := v_1_2_2.Aux
29750 _ = v_1_2_2.Args[2]
29751 p4 := v_1_2_2.Args[0]
29752 mem := v_1_2_2.Args[2]
29753 if mem.Op != OpZero {
29754 break
29755 }
29756 n := mem.AuxInt
29757 _ = mem.Args[1]
29758 p5 := mem.Args[0]
29759 if !(o1 >= 0 && o1+t1.Size() <= n && isSamePtr(p1, p5) && fe.CanSSA(t1) && disjoint(op, t1.Size(), p2, sizeof(t2)) && disjoint(op, t1.Size(), p3, sizeof(t3)) && disjoint(op, t1.Size(), p4, sizeof(t4))) {
29760 break
29761 }
29762 b = mem.Block
29763 v0 := b.NewValue0(v.Pos, OpLoad, t1)
29764 v.reset(OpCopy)
29765 v.AddArg(v0)
29766 v1 := b.NewValue0(v.Pos, OpOffPtr, op.Type)
29767 v1.AuxInt = o1
29768 v1.AddArg(p5)
29769 v0.AddArg(v1)
29770 v0.AddArg(mem)
29771 return true
29772 }
29773
29774
29775
29776 for {
29777 t1 := v.Type
29778 _ = v.Args[1]
29779 op := v.Args[0]
29780 if op.Op != OpOffPtr {
29781 break
29782 }
29783 o1 := op.AuxInt
29784 p1 := op.Args[0]
29785 v_1 := v.Args[1]
29786 if v_1.Op != OpStore {
29787 break
29788 }
29789 t2 := v_1.Aux
29790 _ = v_1.Args[2]
29791 p2 := v_1.Args[0]
29792 v_1_2 := v_1.Args[2]
29793 if v_1_2.Op != OpStore {
29794 break
29795 }
29796 t3 := v_1_2.Aux
29797 _ = v_1_2.Args[2]
29798 p3 := v_1_2.Args[0]
29799 v_1_2_2 := v_1_2.Args[2]
29800 if v_1_2_2.Op != OpStore {
29801 break
29802 }
29803 t4 := v_1_2_2.Aux
29804 _ = v_1_2_2.Args[2]
29805 p4 := v_1_2_2.Args[0]
29806 v_1_2_2_2 := v_1_2_2.Args[2]
29807 if v_1_2_2_2.Op != OpStore {
29808 break
29809 }
29810 t5 := v_1_2_2_2.Aux
29811 _ = v_1_2_2_2.Args[2]
29812 p5 := v_1_2_2_2.Args[0]
29813 mem := v_1_2_2_2.Args[2]
29814 if mem.Op != OpZero {
29815 break
29816 }
29817 n := mem.AuxInt
29818 _ = mem.Args[1]
29819 p6 := mem.Args[0]
29820 if !(o1 >= 0 && o1+t1.Size() <= n && isSamePtr(p1, p6) && fe.CanSSA(t1) && disjoint(op, t1.Size(), p2, sizeof(t2)) && disjoint(op, t1.Size(), p3, sizeof(t3)) && disjoint(op, t1.Size(), p4, sizeof(t4)) && disjoint(op, t1.Size(), p5, sizeof(t5))) {
29821 break
29822 }
29823 b = mem.Block
29824 v0 := b.NewValue0(v.Pos, OpLoad, t1)
29825 v.reset(OpCopy)
29826 v.AddArg(v0)
29827 v1 := b.NewValue0(v.Pos, OpOffPtr, op.Type)
29828 v1.AuxInt = o1
29829 v1.AddArg(p6)
29830 v0.AddArg(v1)
29831 v0.AddArg(mem)
29832 return true
29833 }
29834
29835
29836
29837 for {
29838 t1 := v.Type
29839 _ = v.Args[1]
29840 v_0 := v.Args[0]
29841 if v_0.Op != OpOffPtr {
29842 break
29843 }
29844 o := v_0.AuxInt
29845 p1 := v_0.Args[0]
29846 v_1 := v.Args[1]
29847 if v_1.Op != OpZero {
29848 break
29849 }
29850 n := v_1.AuxInt
29851 _ = v_1.Args[1]
29852 p2 := v_1.Args[0]
29853 if !(t1.IsBoolean() && isSamePtr(p1, p2) && n >= o+1) {
29854 break
29855 }
29856 v.reset(OpConstBool)
29857 v.AuxInt = 0
29858 return true
29859 }
29860
29861
29862
29863 for {
29864 t1 := v.Type
29865 _ = v.Args[1]
29866 v_0 := v.Args[0]
29867 if v_0.Op != OpOffPtr {
29868 break
29869 }
29870 o := v_0.AuxInt
29871 p1 := v_0.Args[0]
29872 v_1 := v.Args[1]
29873 if v_1.Op != OpZero {
29874 break
29875 }
29876 n := v_1.AuxInt
29877 _ = v_1.Args[1]
29878 p2 := v_1.Args[0]
29879 if !(is8BitInt(t1) && isSamePtr(p1, p2) && n >= o+1) {
29880 break
29881 }
29882 v.reset(OpConst8)
29883 v.AuxInt = 0
29884 return true
29885 }
29886
29887
29888
29889 for {
29890 t1 := v.Type
29891 _ = v.Args[1]
29892 v_0 := v.Args[0]
29893 if v_0.Op != OpOffPtr {
29894 break
29895 }
29896 o := v_0.AuxInt
29897 p1 := v_0.Args[0]
29898 v_1 := v.Args[1]
29899 if v_1.Op != OpZero {
29900 break
29901 }
29902 n := v_1.AuxInt
29903 _ = v_1.Args[1]
29904 p2 := v_1.Args[0]
29905 if !(is16BitInt(t1) && isSamePtr(p1, p2) && n >= o+2) {
29906 break
29907 }
29908 v.reset(OpConst16)
29909 v.AuxInt = 0
29910 return true
29911 }
29912
29913
29914
29915 for {
29916 t1 := v.Type
29917 _ = v.Args[1]
29918 v_0 := v.Args[0]
29919 if v_0.Op != OpOffPtr {
29920 break
29921 }
29922 o := v_0.AuxInt
29923 p1 := v_0.Args[0]
29924 v_1 := v.Args[1]
29925 if v_1.Op != OpZero {
29926 break
29927 }
29928 n := v_1.AuxInt
29929 _ = v_1.Args[1]
29930 p2 := v_1.Args[0]
29931 if !(is32BitInt(t1) && isSamePtr(p1, p2) && n >= o+4) {
29932 break
29933 }
29934 v.reset(OpConst32)
29935 v.AuxInt = 0
29936 return true
29937 }
29938
29939
29940
29941 for {
29942 t1 := v.Type
29943 _ = v.Args[1]
29944 v_0 := v.Args[0]
29945 if v_0.Op != OpOffPtr {
29946 break
29947 }
29948 o := v_0.AuxInt
29949 p1 := v_0.Args[0]
29950 v_1 := v.Args[1]
29951 if v_1.Op != OpZero {
29952 break
29953 }
29954 n := v_1.AuxInt
29955 _ = v_1.Args[1]
29956 p2 := v_1.Args[0]
29957 if !(is64BitInt(t1) && isSamePtr(p1, p2) && n >= o+8) {
29958 break
29959 }
29960 v.reset(OpConst64)
29961 v.AuxInt = 0
29962 return true
29963 }
29964
29965
29966
29967 for {
29968 t1 := v.Type
29969 _ = v.Args[1]
29970 v_0 := v.Args[0]
29971 if v_0.Op != OpOffPtr {
29972 break
29973 }
29974 o := v_0.AuxInt
29975 p1 := v_0.Args[0]
29976 v_1 := v.Args[1]
29977 if v_1.Op != OpZero {
29978 break
29979 }
29980 n := v_1.AuxInt
29981 _ = v_1.Args[1]
29982 p2 := v_1.Args[0]
29983 if !(is32BitFloat(t1) && isSamePtr(p1, p2) && n >= o+4) {
29984 break
29985 }
29986 v.reset(OpConst32F)
29987 v.AuxInt = 0
29988 return true
29989 }
29990
29991
29992
29993 for {
29994 t1 := v.Type
29995 _ = v.Args[1]
29996 v_0 := v.Args[0]
29997 if v_0.Op != OpOffPtr {
29998 break
29999 }
30000 o := v_0.AuxInt
30001 p1 := v_0.Args[0]
30002 v_1 := v.Args[1]
30003 if v_1.Op != OpZero {
30004 break
30005 }
30006 n := v_1.AuxInt
30007 _ = v_1.Args[1]
30008 p2 := v_1.Args[0]
30009 if !(is64BitFloat(t1) && isSamePtr(p1, p2) && n >= o+8) {
30010 break
30011 }
30012 v.reset(OpConst64F)
30013 v.AuxInt = 0
30014 return true
30015 }
30016
30017
30018
30019 for {
30020 t := v.Type
30021 _ = v.Args[1]
30022 if !(t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t)) {
30023 break
30024 }
30025 v.reset(OpStructMake0)
30026 return true
30027 }
30028 return false
30029 }
30030 func rewriteValuegeneric_OpLoad_20(v *Value) bool {
30031 b := v.Block
30032 fe := b.Func.fe
30033
30034
30035
30036 for {
30037 t := v.Type
30038 mem := v.Args[1]
30039 ptr := v.Args[0]
30040 if !(t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t)) {
30041 break
30042 }
30043 v.reset(OpStructMake1)
30044 v0 := b.NewValue0(v.Pos, OpLoad, t.FieldType(0))
30045 v1 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
30046 v1.AuxInt = 0
30047 v1.AddArg(ptr)
30048 v0.AddArg(v1)
30049 v0.AddArg(mem)
30050 v.AddArg(v0)
30051 return true
30052 }
30053
30054
30055
30056 for {
30057 t := v.Type
30058 mem := v.Args[1]
30059 ptr := v.Args[0]
30060 if !(t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t)) {
30061 break
30062 }
30063 v.reset(OpStructMake2)
30064 v0 := b.NewValue0(v.Pos, OpLoad, t.FieldType(0))
30065 v1 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
30066 v1.AuxInt = 0
30067 v1.AddArg(ptr)
30068 v0.AddArg(v1)
30069 v0.AddArg(mem)
30070 v.AddArg(v0)
30071 v2 := b.NewValue0(v.Pos, OpLoad, t.FieldType(1))
30072 v3 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
30073 v3.AuxInt = t.FieldOff(1)
30074 v3.AddArg(ptr)
30075 v2.AddArg(v3)
30076 v2.AddArg(mem)
30077 v.AddArg(v2)
30078 return true
30079 }
30080
30081
30082
30083 for {
30084 t := v.Type
30085 mem := v.Args[1]
30086 ptr := v.Args[0]
30087 if !(t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t)) {
30088 break
30089 }
30090 v.reset(OpStructMake3)
30091 v0 := b.NewValue0(v.Pos, OpLoad, t.FieldType(0))
30092 v1 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
30093 v1.AuxInt = 0
30094 v1.AddArg(ptr)
30095 v0.AddArg(v1)
30096 v0.AddArg(mem)
30097 v.AddArg(v0)
30098 v2 := b.NewValue0(v.Pos, OpLoad, t.FieldType(1))
30099 v3 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
30100 v3.AuxInt = t.FieldOff(1)
30101 v3.AddArg(ptr)
30102 v2.AddArg(v3)
30103 v2.AddArg(mem)
30104 v.AddArg(v2)
30105 v4 := b.NewValue0(v.Pos, OpLoad, t.FieldType(2))
30106 v5 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
30107 v5.AuxInt = t.FieldOff(2)
30108 v5.AddArg(ptr)
30109 v4.AddArg(v5)
30110 v4.AddArg(mem)
30111 v.AddArg(v4)
30112 return true
30113 }
30114
30115
30116
30117 for {
30118 t := v.Type
30119 mem := v.Args[1]
30120 ptr := v.Args[0]
30121 if !(t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t)) {
30122 break
30123 }
30124 v.reset(OpStructMake4)
30125 v0 := b.NewValue0(v.Pos, OpLoad, t.FieldType(0))
30126 v1 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
30127 v1.AuxInt = 0
30128 v1.AddArg(ptr)
30129 v0.AddArg(v1)
30130 v0.AddArg(mem)
30131 v.AddArg(v0)
30132 v2 := b.NewValue0(v.Pos, OpLoad, t.FieldType(1))
30133 v3 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
30134 v3.AuxInt = t.FieldOff(1)
30135 v3.AddArg(ptr)
30136 v2.AddArg(v3)
30137 v2.AddArg(mem)
30138 v.AddArg(v2)
30139 v4 := b.NewValue0(v.Pos, OpLoad, t.FieldType(2))
30140 v5 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
30141 v5.AuxInt = t.FieldOff(2)
30142 v5.AddArg(ptr)
30143 v4.AddArg(v5)
30144 v4.AddArg(mem)
30145 v.AddArg(v4)
30146 v6 := b.NewValue0(v.Pos, OpLoad, t.FieldType(3))
30147 v7 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(3).PtrTo())
30148 v7.AuxInt = t.FieldOff(3)
30149 v7.AddArg(ptr)
30150 v6.AddArg(v7)
30151 v6.AddArg(mem)
30152 v.AddArg(v6)
30153 return true
30154 }
30155
30156
30157
30158 for {
30159 t := v.Type
30160 _ = v.Args[1]
30161 if !(t.IsArray() && t.NumElem() == 0) {
30162 break
30163 }
30164 v.reset(OpArrayMake0)
30165 return true
30166 }
30167
30168
30169
30170 for {
30171 t := v.Type
30172 mem := v.Args[1]
30173 ptr := v.Args[0]
30174 if !(t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t)) {
30175 break
30176 }
30177 v.reset(OpArrayMake1)
30178 v0 := b.NewValue0(v.Pos, OpLoad, t.Elem())
30179 v0.AddArg(ptr)
30180 v0.AddArg(mem)
30181 v.AddArg(v0)
30182 return true
30183 }
30184 return false
30185 }
30186 func rewriteValuegeneric_OpLsh16x16_0(v *Value) bool {
30187 b := v.Block
30188
30189
30190
30191 for {
30192 t := v.Type
30193 _ = v.Args[1]
30194 x := v.Args[0]
30195 v_1 := v.Args[1]
30196 if v_1.Op != OpConst16 {
30197 break
30198 }
30199 c := v_1.AuxInt
30200 v.reset(OpLsh16x64)
30201 v.AddArg(x)
30202 v0 := b.NewValue0(v.Pos, OpConst64, t)
30203 v0.AuxInt = int64(uint16(c))
30204 v.AddArg(v0)
30205 return true
30206 }
30207
30208
30209
30210 for {
30211 _ = v.Args[1]
30212 v_0 := v.Args[0]
30213 if v_0.Op != OpConst16 {
30214 break
30215 }
30216 if v_0.AuxInt != 0 {
30217 break
30218 }
30219 v.reset(OpConst16)
30220 v.AuxInt = 0
30221 return true
30222 }
30223 return false
30224 }
30225 func rewriteValuegeneric_OpLsh16x32_0(v *Value) bool {
30226 b := v.Block
30227
30228
30229
30230 for {
30231 t := v.Type
30232 _ = v.Args[1]
30233 x := v.Args[0]
30234 v_1 := v.Args[1]
30235 if v_1.Op != OpConst32 {
30236 break
30237 }
30238 c := v_1.AuxInt
30239 v.reset(OpLsh16x64)
30240 v.AddArg(x)
30241 v0 := b.NewValue0(v.Pos, OpConst64, t)
30242 v0.AuxInt = int64(uint32(c))
30243 v.AddArg(v0)
30244 return true
30245 }
30246
30247
30248
30249 for {
30250 _ = v.Args[1]
30251 v_0 := v.Args[0]
30252 if v_0.Op != OpConst16 {
30253 break
30254 }
30255 if v_0.AuxInt != 0 {
30256 break
30257 }
30258 v.reset(OpConst16)
30259 v.AuxInt = 0
30260 return true
30261 }
30262 return false
30263 }
30264 func rewriteValuegeneric_OpLsh16x64_0(v *Value) bool {
30265 b := v.Block
30266 typ := &b.Func.Config.Types
30267
30268
30269
30270 for {
30271 _ = v.Args[1]
30272 v_0 := v.Args[0]
30273 if v_0.Op != OpConst16 {
30274 break
30275 }
30276 c := v_0.AuxInt
30277 v_1 := v.Args[1]
30278 if v_1.Op != OpConst64 {
30279 break
30280 }
30281 d := v_1.AuxInt
30282 v.reset(OpConst16)
30283 v.AuxInt = int64(int16(c) << uint64(d))
30284 return true
30285 }
30286
30287
30288
30289 for {
30290 _ = v.Args[1]
30291 x := v.Args[0]
30292 v_1 := v.Args[1]
30293 if v_1.Op != OpConst64 {
30294 break
30295 }
30296 if v_1.AuxInt != 0 {
30297 break
30298 }
30299 v.reset(OpCopy)
30300 v.Type = x.Type
30301 v.AddArg(x)
30302 return true
30303 }
30304
30305
30306
30307 for {
30308 _ = v.Args[1]
30309 v_0 := v.Args[0]
30310 if v_0.Op != OpConst16 {
30311 break
30312 }
30313 if v_0.AuxInt != 0 {
30314 break
30315 }
30316 v.reset(OpConst16)
30317 v.AuxInt = 0
30318 return true
30319 }
30320
30321
30322
30323 for {
30324 _ = v.Args[1]
30325 v_1 := v.Args[1]
30326 if v_1.Op != OpConst64 {
30327 break
30328 }
30329 c := v_1.AuxInt
30330 if !(uint64(c) >= 16) {
30331 break
30332 }
30333 v.reset(OpConst16)
30334 v.AuxInt = 0
30335 return true
30336 }
30337
30338
30339
30340 for {
30341 t := v.Type
30342 _ = v.Args[1]
30343 v_0 := v.Args[0]
30344 if v_0.Op != OpLsh16x64 {
30345 break
30346 }
30347 _ = v_0.Args[1]
30348 x := v_0.Args[0]
30349 v_0_1 := v_0.Args[1]
30350 if v_0_1.Op != OpConst64 {
30351 break
30352 }
30353 c := v_0_1.AuxInt
30354 v_1 := v.Args[1]
30355 if v_1.Op != OpConst64 {
30356 break
30357 }
30358 d := v_1.AuxInt
30359 if !(!uaddOvf(c, d)) {
30360 break
30361 }
30362 v.reset(OpLsh16x64)
30363 v.AddArg(x)
30364 v0 := b.NewValue0(v.Pos, OpConst64, t)
30365 v0.AuxInt = c + d
30366 v.AddArg(v0)
30367 return true
30368 }
30369
30370
30371
30372 for {
30373 _ = v.Args[1]
30374 v_0 := v.Args[0]
30375 if v_0.Op != OpRsh16Ux64 {
30376 break
30377 }
30378 _ = v_0.Args[1]
30379 v_0_0 := v_0.Args[0]
30380 if v_0_0.Op != OpLsh16x64 {
30381 break
30382 }
30383 _ = v_0_0.Args[1]
30384 x := v_0_0.Args[0]
30385 v_0_0_1 := v_0_0.Args[1]
30386 if v_0_0_1.Op != OpConst64 {
30387 break
30388 }
30389 c1 := v_0_0_1.AuxInt
30390 v_0_1 := v_0.Args[1]
30391 if v_0_1.Op != OpConst64 {
30392 break
30393 }
30394 c2 := v_0_1.AuxInt
30395 v_1 := v.Args[1]
30396 if v_1.Op != OpConst64 {
30397 break
30398 }
30399 c3 := v_1.AuxInt
30400 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
30401 break
30402 }
30403 v.reset(OpLsh16x64)
30404 v.AddArg(x)
30405 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
30406 v0.AuxInt = c1 - c2 + c3
30407 v.AddArg(v0)
30408 return true
30409 }
30410 return false
30411 }
30412 func rewriteValuegeneric_OpLsh16x8_0(v *Value) bool {
30413 b := v.Block
30414
30415
30416
30417 for {
30418 t := v.Type
30419 _ = v.Args[1]
30420 x := v.Args[0]
30421 v_1 := v.Args[1]
30422 if v_1.Op != OpConst8 {
30423 break
30424 }
30425 c := v_1.AuxInt
30426 v.reset(OpLsh16x64)
30427 v.AddArg(x)
30428 v0 := b.NewValue0(v.Pos, OpConst64, t)
30429 v0.AuxInt = int64(uint8(c))
30430 v.AddArg(v0)
30431 return true
30432 }
30433
30434
30435
30436 for {
30437 _ = v.Args[1]
30438 v_0 := v.Args[0]
30439 if v_0.Op != OpConst16 {
30440 break
30441 }
30442 if v_0.AuxInt != 0 {
30443 break
30444 }
30445 v.reset(OpConst16)
30446 v.AuxInt = 0
30447 return true
30448 }
30449 return false
30450 }
30451 func rewriteValuegeneric_OpLsh32x16_0(v *Value) bool {
30452 b := v.Block
30453
30454
30455
30456 for {
30457 t := v.Type
30458 _ = v.Args[1]
30459 x := v.Args[0]
30460 v_1 := v.Args[1]
30461 if v_1.Op != OpConst16 {
30462 break
30463 }
30464 c := v_1.AuxInt
30465 v.reset(OpLsh32x64)
30466 v.AddArg(x)
30467 v0 := b.NewValue0(v.Pos, OpConst64, t)
30468 v0.AuxInt = int64(uint16(c))
30469 v.AddArg(v0)
30470 return true
30471 }
30472
30473
30474
30475 for {
30476 _ = v.Args[1]
30477 v_0 := v.Args[0]
30478 if v_0.Op != OpConst32 {
30479 break
30480 }
30481 if v_0.AuxInt != 0 {
30482 break
30483 }
30484 v.reset(OpConst32)
30485 v.AuxInt = 0
30486 return true
30487 }
30488 return false
30489 }
30490 func rewriteValuegeneric_OpLsh32x32_0(v *Value) bool {
30491 b := v.Block
30492
30493
30494
30495 for {
30496 t := v.Type
30497 _ = v.Args[1]
30498 x := v.Args[0]
30499 v_1 := v.Args[1]
30500 if v_1.Op != OpConst32 {
30501 break
30502 }
30503 c := v_1.AuxInt
30504 v.reset(OpLsh32x64)
30505 v.AddArg(x)
30506 v0 := b.NewValue0(v.Pos, OpConst64, t)
30507 v0.AuxInt = int64(uint32(c))
30508 v.AddArg(v0)
30509 return true
30510 }
30511
30512
30513
30514 for {
30515 _ = v.Args[1]
30516 v_0 := v.Args[0]
30517 if v_0.Op != OpConst32 {
30518 break
30519 }
30520 if v_0.AuxInt != 0 {
30521 break
30522 }
30523 v.reset(OpConst32)
30524 v.AuxInt = 0
30525 return true
30526 }
30527 return false
30528 }
30529 func rewriteValuegeneric_OpLsh32x64_0(v *Value) bool {
30530 b := v.Block
30531 typ := &b.Func.Config.Types
30532
30533
30534
30535 for {
30536 _ = v.Args[1]
30537 v_0 := v.Args[0]
30538 if v_0.Op != OpConst32 {
30539 break
30540 }
30541 c := v_0.AuxInt
30542 v_1 := v.Args[1]
30543 if v_1.Op != OpConst64 {
30544 break
30545 }
30546 d := v_1.AuxInt
30547 v.reset(OpConst32)
30548 v.AuxInt = int64(int32(c) << uint64(d))
30549 return true
30550 }
30551
30552
30553
30554 for {
30555 _ = v.Args[1]
30556 x := v.Args[0]
30557 v_1 := v.Args[1]
30558 if v_1.Op != OpConst64 {
30559 break
30560 }
30561 if v_1.AuxInt != 0 {
30562 break
30563 }
30564 v.reset(OpCopy)
30565 v.Type = x.Type
30566 v.AddArg(x)
30567 return true
30568 }
30569
30570
30571
30572 for {
30573 _ = v.Args[1]
30574 v_0 := v.Args[0]
30575 if v_0.Op != OpConst32 {
30576 break
30577 }
30578 if v_0.AuxInt != 0 {
30579 break
30580 }
30581 v.reset(OpConst32)
30582 v.AuxInt = 0
30583 return true
30584 }
30585
30586
30587
30588 for {
30589 _ = v.Args[1]
30590 v_1 := v.Args[1]
30591 if v_1.Op != OpConst64 {
30592 break
30593 }
30594 c := v_1.AuxInt
30595 if !(uint64(c) >= 32) {
30596 break
30597 }
30598 v.reset(OpConst32)
30599 v.AuxInt = 0
30600 return true
30601 }
30602
30603
30604
30605 for {
30606 t := v.Type
30607 _ = v.Args[1]
30608 v_0 := v.Args[0]
30609 if v_0.Op != OpLsh32x64 {
30610 break
30611 }
30612 _ = v_0.Args[1]
30613 x := v_0.Args[0]
30614 v_0_1 := v_0.Args[1]
30615 if v_0_1.Op != OpConst64 {
30616 break
30617 }
30618 c := v_0_1.AuxInt
30619 v_1 := v.Args[1]
30620 if v_1.Op != OpConst64 {
30621 break
30622 }
30623 d := v_1.AuxInt
30624 if !(!uaddOvf(c, d)) {
30625 break
30626 }
30627 v.reset(OpLsh32x64)
30628 v.AddArg(x)
30629 v0 := b.NewValue0(v.Pos, OpConst64, t)
30630 v0.AuxInt = c + d
30631 v.AddArg(v0)
30632 return true
30633 }
30634
30635
30636
30637 for {
30638 _ = v.Args[1]
30639 v_0 := v.Args[0]
30640 if v_0.Op != OpRsh32Ux64 {
30641 break
30642 }
30643 _ = v_0.Args[1]
30644 v_0_0 := v_0.Args[0]
30645 if v_0_0.Op != OpLsh32x64 {
30646 break
30647 }
30648 _ = v_0_0.Args[1]
30649 x := v_0_0.Args[0]
30650 v_0_0_1 := v_0_0.Args[1]
30651 if v_0_0_1.Op != OpConst64 {
30652 break
30653 }
30654 c1 := v_0_0_1.AuxInt
30655 v_0_1 := v_0.Args[1]
30656 if v_0_1.Op != OpConst64 {
30657 break
30658 }
30659 c2 := v_0_1.AuxInt
30660 v_1 := v.Args[1]
30661 if v_1.Op != OpConst64 {
30662 break
30663 }
30664 c3 := v_1.AuxInt
30665 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
30666 break
30667 }
30668 v.reset(OpLsh32x64)
30669 v.AddArg(x)
30670 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
30671 v0.AuxInt = c1 - c2 + c3
30672 v.AddArg(v0)
30673 return true
30674 }
30675 return false
30676 }
30677 func rewriteValuegeneric_OpLsh32x8_0(v *Value) bool {
30678 b := v.Block
30679
30680
30681
30682 for {
30683 t := v.Type
30684 _ = v.Args[1]
30685 x := v.Args[0]
30686 v_1 := v.Args[1]
30687 if v_1.Op != OpConst8 {
30688 break
30689 }
30690 c := v_1.AuxInt
30691 v.reset(OpLsh32x64)
30692 v.AddArg(x)
30693 v0 := b.NewValue0(v.Pos, OpConst64, t)
30694 v0.AuxInt = int64(uint8(c))
30695 v.AddArg(v0)
30696 return true
30697 }
30698
30699
30700
30701 for {
30702 _ = v.Args[1]
30703 v_0 := v.Args[0]
30704 if v_0.Op != OpConst32 {
30705 break
30706 }
30707 if v_0.AuxInt != 0 {
30708 break
30709 }
30710 v.reset(OpConst32)
30711 v.AuxInt = 0
30712 return true
30713 }
30714 return false
30715 }
30716 func rewriteValuegeneric_OpLsh64x16_0(v *Value) bool {
30717 b := v.Block
30718
30719
30720
30721 for {
30722 t := v.Type
30723 _ = v.Args[1]
30724 x := v.Args[0]
30725 v_1 := v.Args[1]
30726 if v_1.Op != OpConst16 {
30727 break
30728 }
30729 c := v_1.AuxInt
30730 v.reset(OpLsh64x64)
30731 v.AddArg(x)
30732 v0 := b.NewValue0(v.Pos, OpConst64, t)
30733 v0.AuxInt = int64(uint16(c))
30734 v.AddArg(v0)
30735 return true
30736 }
30737
30738
30739
30740 for {
30741 _ = v.Args[1]
30742 v_0 := v.Args[0]
30743 if v_0.Op != OpConst64 {
30744 break
30745 }
30746 if v_0.AuxInt != 0 {
30747 break
30748 }
30749 v.reset(OpConst64)
30750 v.AuxInt = 0
30751 return true
30752 }
30753 return false
30754 }
30755 func rewriteValuegeneric_OpLsh64x32_0(v *Value) bool {
30756 b := v.Block
30757
30758
30759
30760 for {
30761 t := v.Type
30762 _ = v.Args[1]
30763 x := v.Args[0]
30764 v_1 := v.Args[1]
30765 if v_1.Op != OpConst32 {
30766 break
30767 }
30768 c := v_1.AuxInt
30769 v.reset(OpLsh64x64)
30770 v.AddArg(x)
30771 v0 := b.NewValue0(v.Pos, OpConst64, t)
30772 v0.AuxInt = int64(uint32(c))
30773 v.AddArg(v0)
30774 return true
30775 }
30776
30777
30778
30779 for {
30780 _ = v.Args[1]
30781 v_0 := v.Args[0]
30782 if v_0.Op != OpConst64 {
30783 break
30784 }
30785 if v_0.AuxInt != 0 {
30786 break
30787 }
30788 v.reset(OpConst64)
30789 v.AuxInt = 0
30790 return true
30791 }
30792 return false
30793 }
30794 func rewriteValuegeneric_OpLsh64x64_0(v *Value) bool {
30795 b := v.Block
30796 typ := &b.Func.Config.Types
30797
30798
30799
30800 for {
30801 _ = v.Args[1]
30802 v_0 := v.Args[0]
30803 if v_0.Op != OpConst64 {
30804 break
30805 }
30806 c := v_0.AuxInt
30807 v_1 := v.Args[1]
30808 if v_1.Op != OpConst64 {
30809 break
30810 }
30811 d := v_1.AuxInt
30812 v.reset(OpConst64)
30813 v.AuxInt = c << uint64(d)
30814 return true
30815 }
30816
30817
30818
30819 for {
30820 _ = v.Args[1]
30821 x := v.Args[0]
30822 v_1 := v.Args[1]
30823 if v_1.Op != OpConst64 {
30824 break
30825 }
30826 if v_1.AuxInt != 0 {
30827 break
30828 }
30829 v.reset(OpCopy)
30830 v.Type = x.Type
30831 v.AddArg(x)
30832 return true
30833 }
30834
30835
30836
30837 for {
30838 _ = v.Args[1]
30839 v_0 := v.Args[0]
30840 if v_0.Op != OpConst64 {
30841 break
30842 }
30843 if v_0.AuxInt != 0 {
30844 break
30845 }
30846 v.reset(OpConst64)
30847 v.AuxInt = 0
30848 return true
30849 }
30850
30851
30852
30853 for {
30854 _ = v.Args[1]
30855 v_1 := v.Args[1]
30856 if v_1.Op != OpConst64 {
30857 break
30858 }
30859 c := v_1.AuxInt
30860 if !(uint64(c) >= 64) {
30861 break
30862 }
30863 v.reset(OpConst64)
30864 v.AuxInt = 0
30865 return true
30866 }
30867
30868
30869
30870 for {
30871 t := v.Type
30872 _ = v.Args[1]
30873 v_0 := v.Args[0]
30874 if v_0.Op != OpLsh64x64 {
30875 break
30876 }
30877 _ = v_0.Args[1]
30878 x := v_0.Args[0]
30879 v_0_1 := v_0.Args[1]
30880 if v_0_1.Op != OpConst64 {
30881 break
30882 }
30883 c := v_0_1.AuxInt
30884 v_1 := v.Args[1]
30885 if v_1.Op != OpConst64 {
30886 break
30887 }
30888 d := v_1.AuxInt
30889 if !(!uaddOvf(c, d)) {
30890 break
30891 }
30892 v.reset(OpLsh64x64)
30893 v.AddArg(x)
30894 v0 := b.NewValue0(v.Pos, OpConst64, t)
30895 v0.AuxInt = c + d
30896 v.AddArg(v0)
30897 return true
30898 }
30899
30900
30901
30902 for {
30903 _ = v.Args[1]
30904 v_0 := v.Args[0]
30905 if v_0.Op != OpRsh64Ux64 {
30906 break
30907 }
30908 _ = v_0.Args[1]
30909 v_0_0 := v_0.Args[0]
30910 if v_0_0.Op != OpLsh64x64 {
30911 break
30912 }
30913 _ = v_0_0.Args[1]
30914 x := v_0_0.Args[0]
30915 v_0_0_1 := v_0_0.Args[1]
30916 if v_0_0_1.Op != OpConst64 {
30917 break
30918 }
30919 c1 := v_0_0_1.AuxInt
30920 v_0_1 := v_0.Args[1]
30921 if v_0_1.Op != OpConst64 {
30922 break
30923 }
30924 c2 := v_0_1.AuxInt
30925 v_1 := v.Args[1]
30926 if v_1.Op != OpConst64 {
30927 break
30928 }
30929 c3 := v_1.AuxInt
30930 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
30931 break
30932 }
30933 v.reset(OpLsh64x64)
30934 v.AddArg(x)
30935 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
30936 v0.AuxInt = c1 - c2 + c3
30937 v.AddArg(v0)
30938 return true
30939 }
30940 return false
30941 }
30942 func rewriteValuegeneric_OpLsh64x8_0(v *Value) bool {
30943 b := v.Block
30944
30945
30946
30947 for {
30948 t := v.Type
30949 _ = v.Args[1]
30950 x := v.Args[0]
30951 v_1 := v.Args[1]
30952 if v_1.Op != OpConst8 {
30953 break
30954 }
30955 c := v_1.AuxInt
30956 v.reset(OpLsh64x64)
30957 v.AddArg(x)
30958 v0 := b.NewValue0(v.Pos, OpConst64, t)
30959 v0.AuxInt = int64(uint8(c))
30960 v.AddArg(v0)
30961 return true
30962 }
30963
30964
30965
30966 for {
30967 _ = v.Args[1]
30968 v_0 := v.Args[0]
30969 if v_0.Op != OpConst64 {
30970 break
30971 }
30972 if v_0.AuxInt != 0 {
30973 break
30974 }
30975 v.reset(OpConst64)
30976 v.AuxInt = 0
30977 return true
30978 }
30979 return false
30980 }
30981 func rewriteValuegeneric_OpLsh8x16_0(v *Value) bool {
30982 b := v.Block
30983
30984
30985
30986 for {
30987 t := v.Type
30988 _ = v.Args[1]
30989 x := v.Args[0]
30990 v_1 := v.Args[1]
30991 if v_1.Op != OpConst16 {
30992 break
30993 }
30994 c := v_1.AuxInt
30995 v.reset(OpLsh8x64)
30996 v.AddArg(x)
30997 v0 := b.NewValue0(v.Pos, OpConst64, t)
30998 v0.AuxInt = int64(uint16(c))
30999 v.AddArg(v0)
31000 return true
31001 }
31002
31003
31004
31005 for {
31006 _ = v.Args[1]
31007 v_0 := v.Args[0]
31008 if v_0.Op != OpConst8 {
31009 break
31010 }
31011 if v_0.AuxInt != 0 {
31012 break
31013 }
31014 v.reset(OpConst8)
31015 v.AuxInt = 0
31016 return true
31017 }
31018 return false
31019 }
31020 func rewriteValuegeneric_OpLsh8x32_0(v *Value) bool {
31021 b := v.Block
31022
31023
31024
31025 for {
31026 t := v.Type
31027 _ = v.Args[1]
31028 x := v.Args[0]
31029 v_1 := v.Args[1]
31030 if v_1.Op != OpConst32 {
31031 break
31032 }
31033 c := v_1.AuxInt
31034 v.reset(OpLsh8x64)
31035 v.AddArg(x)
31036 v0 := b.NewValue0(v.Pos, OpConst64, t)
31037 v0.AuxInt = int64(uint32(c))
31038 v.AddArg(v0)
31039 return true
31040 }
31041
31042
31043
31044 for {
31045 _ = v.Args[1]
31046 v_0 := v.Args[0]
31047 if v_0.Op != OpConst8 {
31048 break
31049 }
31050 if v_0.AuxInt != 0 {
31051 break
31052 }
31053 v.reset(OpConst8)
31054 v.AuxInt = 0
31055 return true
31056 }
31057 return false
31058 }
31059 func rewriteValuegeneric_OpLsh8x64_0(v *Value) bool {
31060 b := v.Block
31061 typ := &b.Func.Config.Types
31062
31063
31064
31065 for {
31066 _ = v.Args[1]
31067 v_0 := v.Args[0]
31068 if v_0.Op != OpConst8 {
31069 break
31070 }
31071 c := v_0.AuxInt
31072 v_1 := v.Args[1]
31073 if v_1.Op != OpConst64 {
31074 break
31075 }
31076 d := v_1.AuxInt
31077 v.reset(OpConst8)
31078 v.AuxInt = int64(int8(c) << uint64(d))
31079 return true
31080 }
31081
31082
31083
31084 for {
31085 _ = v.Args[1]
31086 x := v.Args[0]
31087 v_1 := v.Args[1]
31088 if v_1.Op != OpConst64 {
31089 break
31090 }
31091 if v_1.AuxInt != 0 {
31092 break
31093 }
31094 v.reset(OpCopy)
31095 v.Type = x.Type
31096 v.AddArg(x)
31097 return true
31098 }
31099
31100
31101
31102 for {
31103 _ = v.Args[1]
31104 v_0 := v.Args[0]
31105 if v_0.Op != OpConst8 {
31106 break
31107 }
31108 if v_0.AuxInt != 0 {
31109 break
31110 }
31111 v.reset(OpConst8)
31112 v.AuxInt = 0
31113 return true
31114 }
31115
31116
31117
31118 for {
31119 _ = v.Args[1]
31120 v_1 := v.Args[1]
31121 if v_1.Op != OpConst64 {
31122 break
31123 }
31124 c := v_1.AuxInt
31125 if !(uint64(c) >= 8) {
31126 break
31127 }
31128 v.reset(OpConst8)
31129 v.AuxInt = 0
31130 return true
31131 }
31132
31133
31134
31135 for {
31136 t := v.Type
31137 _ = v.Args[1]
31138 v_0 := v.Args[0]
31139 if v_0.Op != OpLsh8x64 {
31140 break
31141 }
31142 _ = v_0.Args[1]
31143 x := v_0.Args[0]
31144 v_0_1 := v_0.Args[1]
31145 if v_0_1.Op != OpConst64 {
31146 break
31147 }
31148 c := v_0_1.AuxInt
31149 v_1 := v.Args[1]
31150 if v_1.Op != OpConst64 {
31151 break
31152 }
31153 d := v_1.AuxInt
31154 if !(!uaddOvf(c, d)) {
31155 break
31156 }
31157 v.reset(OpLsh8x64)
31158 v.AddArg(x)
31159 v0 := b.NewValue0(v.Pos, OpConst64, t)
31160 v0.AuxInt = c + d
31161 v.AddArg(v0)
31162 return true
31163 }
31164
31165
31166
31167 for {
31168 _ = v.Args[1]
31169 v_0 := v.Args[0]
31170 if v_0.Op != OpRsh8Ux64 {
31171 break
31172 }
31173 _ = v_0.Args[1]
31174 v_0_0 := v_0.Args[0]
31175 if v_0_0.Op != OpLsh8x64 {
31176 break
31177 }
31178 _ = v_0_0.Args[1]
31179 x := v_0_0.Args[0]
31180 v_0_0_1 := v_0_0.Args[1]
31181 if v_0_0_1.Op != OpConst64 {
31182 break
31183 }
31184 c1 := v_0_0_1.AuxInt
31185 v_0_1 := v_0.Args[1]
31186 if v_0_1.Op != OpConst64 {
31187 break
31188 }
31189 c2 := v_0_1.AuxInt
31190 v_1 := v.Args[1]
31191 if v_1.Op != OpConst64 {
31192 break
31193 }
31194 c3 := v_1.AuxInt
31195 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
31196 break
31197 }
31198 v.reset(OpLsh8x64)
31199 v.AddArg(x)
31200 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
31201 v0.AuxInt = c1 - c2 + c3
31202 v.AddArg(v0)
31203 return true
31204 }
31205 return false
31206 }
31207 func rewriteValuegeneric_OpLsh8x8_0(v *Value) bool {
31208 b := v.Block
31209
31210
31211
31212 for {
31213 t := v.Type
31214 _ = v.Args[1]
31215 x := v.Args[0]
31216 v_1 := v.Args[1]
31217 if v_1.Op != OpConst8 {
31218 break
31219 }
31220 c := v_1.AuxInt
31221 v.reset(OpLsh8x64)
31222 v.AddArg(x)
31223 v0 := b.NewValue0(v.Pos, OpConst64, t)
31224 v0.AuxInt = int64(uint8(c))
31225 v.AddArg(v0)
31226 return true
31227 }
31228
31229
31230
31231 for {
31232 _ = v.Args[1]
31233 v_0 := v.Args[0]
31234 if v_0.Op != OpConst8 {
31235 break
31236 }
31237 if v_0.AuxInt != 0 {
31238 break
31239 }
31240 v.reset(OpConst8)
31241 v.AuxInt = 0
31242 return true
31243 }
31244 return false
31245 }
31246 func rewriteValuegeneric_OpMod16_0(v *Value) bool {
31247 b := v.Block
31248
31249
31250
31251 for {
31252 _ = v.Args[1]
31253 v_0 := v.Args[0]
31254 if v_0.Op != OpConst16 {
31255 break
31256 }
31257 c := v_0.AuxInt
31258 v_1 := v.Args[1]
31259 if v_1.Op != OpConst16 {
31260 break
31261 }
31262 d := v_1.AuxInt
31263 if !(d != 0) {
31264 break
31265 }
31266 v.reset(OpConst16)
31267 v.AuxInt = int64(int16(c % d))
31268 return true
31269 }
31270
31271
31272
31273 for {
31274 t := v.Type
31275 _ = v.Args[1]
31276 n := v.Args[0]
31277 v_1 := v.Args[1]
31278 if v_1.Op != OpConst16 {
31279 break
31280 }
31281 c := v_1.AuxInt
31282 if !(isNonNegative(n) && isPowerOfTwo(c&0xffff)) {
31283 break
31284 }
31285 v.reset(OpAnd16)
31286 v.AddArg(n)
31287 v0 := b.NewValue0(v.Pos, OpConst16, t)
31288 v0.AuxInt = (c & 0xffff) - 1
31289 v.AddArg(v0)
31290 return true
31291 }
31292
31293
31294
31295 for {
31296 t := v.Type
31297 _ = v.Args[1]
31298 n := v.Args[0]
31299 v_1 := v.Args[1]
31300 if v_1.Op != OpConst16 {
31301 break
31302 }
31303 c := v_1.AuxInt
31304 if !(c < 0 && c != -1<<15) {
31305 break
31306 }
31307 v.reset(OpMod16)
31308 v.Type = t
31309 v.AddArg(n)
31310 v0 := b.NewValue0(v.Pos, OpConst16, t)
31311 v0.AuxInt = -c
31312 v.AddArg(v0)
31313 return true
31314 }
31315
31316
31317
31318 for {
31319 t := v.Type
31320 _ = v.Args[1]
31321 x := v.Args[0]
31322 v_1 := v.Args[1]
31323 if v_1.Op != OpConst16 {
31324 break
31325 }
31326 c := v_1.AuxInt
31327 if !(x.Op != OpConst16 && (c > 0 || c == -1<<15)) {
31328 break
31329 }
31330 v.reset(OpSub16)
31331 v.AddArg(x)
31332 v0 := b.NewValue0(v.Pos, OpMul16, t)
31333 v1 := b.NewValue0(v.Pos, OpDiv16, t)
31334 v1.AddArg(x)
31335 v2 := b.NewValue0(v.Pos, OpConst16, t)
31336 v2.AuxInt = c
31337 v1.AddArg(v2)
31338 v0.AddArg(v1)
31339 v3 := b.NewValue0(v.Pos, OpConst16, t)
31340 v3.AuxInt = c
31341 v0.AddArg(v3)
31342 v.AddArg(v0)
31343 return true
31344 }
31345 return false
31346 }
31347 func rewriteValuegeneric_OpMod16u_0(v *Value) bool {
31348 b := v.Block
31349
31350
31351
31352 for {
31353 _ = v.Args[1]
31354 v_0 := v.Args[0]
31355 if v_0.Op != OpConst16 {
31356 break
31357 }
31358 c := v_0.AuxInt
31359 v_1 := v.Args[1]
31360 if v_1.Op != OpConst16 {
31361 break
31362 }
31363 d := v_1.AuxInt
31364 if !(d != 0) {
31365 break
31366 }
31367 v.reset(OpConst16)
31368 v.AuxInt = int64(uint16(c) % uint16(d))
31369 return true
31370 }
31371
31372
31373
31374 for {
31375 t := v.Type
31376 _ = v.Args[1]
31377 n := v.Args[0]
31378 v_1 := v.Args[1]
31379 if v_1.Op != OpConst16 {
31380 break
31381 }
31382 c := v_1.AuxInt
31383 if !(isPowerOfTwo(c & 0xffff)) {
31384 break
31385 }
31386 v.reset(OpAnd16)
31387 v.AddArg(n)
31388 v0 := b.NewValue0(v.Pos, OpConst16, t)
31389 v0.AuxInt = (c & 0xffff) - 1
31390 v.AddArg(v0)
31391 return true
31392 }
31393
31394
31395
31396 for {
31397 t := v.Type
31398 _ = v.Args[1]
31399 x := v.Args[0]
31400 v_1 := v.Args[1]
31401 if v_1.Op != OpConst16 {
31402 break
31403 }
31404 c := v_1.AuxInt
31405 if !(x.Op != OpConst16 && c > 0 && umagicOK(16, c)) {
31406 break
31407 }
31408 v.reset(OpSub16)
31409 v.AddArg(x)
31410 v0 := b.NewValue0(v.Pos, OpMul16, t)
31411 v1 := b.NewValue0(v.Pos, OpDiv16u, t)
31412 v1.AddArg(x)
31413 v2 := b.NewValue0(v.Pos, OpConst16, t)
31414 v2.AuxInt = c
31415 v1.AddArg(v2)
31416 v0.AddArg(v1)
31417 v3 := b.NewValue0(v.Pos, OpConst16, t)
31418 v3.AuxInt = c
31419 v0.AddArg(v3)
31420 v.AddArg(v0)
31421 return true
31422 }
31423 return false
31424 }
31425 func rewriteValuegeneric_OpMod32_0(v *Value) bool {
31426 b := v.Block
31427
31428
31429
31430 for {
31431 _ = v.Args[1]
31432 v_0 := v.Args[0]
31433 if v_0.Op != OpConst32 {
31434 break
31435 }
31436 c := v_0.AuxInt
31437 v_1 := v.Args[1]
31438 if v_1.Op != OpConst32 {
31439 break
31440 }
31441 d := v_1.AuxInt
31442 if !(d != 0) {
31443 break
31444 }
31445 v.reset(OpConst32)
31446 v.AuxInt = int64(int32(c % d))
31447 return true
31448 }
31449
31450
31451
31452 for {
31453 t := v.Type
31454 _ = v.Args[1]
31455 n := v.Args[0]
31456 v_1 := v.Args[1]
31457 if v_1.Op != OpConst32 {
31458 break
31459 }
31460 c := v_1.AuxInt
31461 if !(isNonNegative(n) && isPowerOfTwo(c&0xffffffff)) {
31462 break
31463 }
31464 v.reset(OpAnd32)
31465 v.AddArg(n)
31466 v0 := b.NewValue0(v.Pos, OpConst32, t)
31467 v0.AuxInt = (c & 0xffffffff) - 1
31468 v.AddArg(v0)
31469 return true
31470 }
31471
31472
31473
31474 for {
31475 t := v.Type
31476 _ = v.Args[1]
31477 n := v.Args[0]
31478 v_1 := v.Args[1]
31479 if v_1.Op != OpConst32 {
31480 break
31481 }
31482 c := v_1.AuxInt
31483 if !(c < 0 && c != -1<<31) {
31484 break
31485 }
31486 v.reset(OpMod32)
31487 v.Type = t
31488 v.AddArg(n)
31489 v0 := b.NewValue0(v.Pos, OpConst32, t)
31490 v0.AuxInt = -c
31491 v.AddArg(v0)
31492 return true
31493 }
31494
31495
31496
31497 for {
31498 t := v.Type
31499 _ = v.Args[1]
31500 x := v.Args[0]
31501 v_1 := v.Args[1]
31502 if v_1.Op != OpConst32 {
31503 break
31504 }
31505 c := v_1.AuxInt
31506 if !(x.Op != OpConst32 && (c > 0 || c == -1<<31)) {
31507 break
31508 }
31509 v.reset(OpSub32)
31510 v.AddArg(x)
31511 v0 := b.NewValue0(v.Pos, OpMul32, t)
31512 v1 := b.NewValue0(v.Pos, OpDiv32, t)
31513 v1.AddArg(x)
31514 v2 := b.NewValue0(v.Pos, OpConst32, t)
31515 v2.AuxInt = c
31516 v1.AddArg(v2)
31517 v0.AddArg(v1)
31518 v3 := b.NewValue0(v.Pos, OpConst32, t)
31519 v3.AuxInt = c
31520 v0.AddArg(v3)
31521 v.AddArg(v0)
31522 return true
31523 }
31524 return false
31525 }
31526 func rewriteValuegeneric_OpMod32u_0(v *Value) bool {
31527 b := v.Block
31528
31529
31530
31531 for {
31532 _ = v.Args[1]
31533 v_0 := v.Args[0]
31534 if v_0.Op != OpConst32 {
31535 break
31536 }
31537 c := v_0.AuxInt
31538 v_1 := v.Args[1]
31539 if v_1.Op != OpConst32 {
31540 break
31541 }
31542 d := v_1.AuxInt
31543 if !(d != 0) {
31544 break
31545 }
31546 v.reset(OpConst32)
31547 v.AuxInt = int64(uint32(c) % uint32(d))
31548 return true
31549 }
31550
31551
31552
31553 for {
31554 t := v.Type
31555 _ = v.Args[1]
31556 n := v.Args[0]
31557 v_1 := v.Args[1]
31558 if v_1.Op != OpConst32 {
31559 break
31560 }
31561 c := v_1.AuxInt
31562 if !(isPowerOfTwo(c & 0xffffffff)) {
31563 break
31564 }
31565 v.reset(OpAnd32)
31566 v.AddArg(n)
31567 v0 := b.NewValue0(v.Pos, OpConst32, t)
31568 v0.AuxInt = (c & 0xffffffff) - 1
31569 v.AddArg(v0)
31570 return true
31571 }
31572
31573
31574
31575 for {
31576 t := v.Type
31577 _ = v.Args[1]
31578 x := v.Args[0]
31579 v_1 := v.Args[1]
31580 if v_1.Op != OpConst32 {
31581 break
31582 }
31583 c := v_1.AuxInt
31584 if !(x.Op != OpConst32 && c > 0 && umagicOK(32, c)) {
31585 break
31586 }
31587 v.reset(OpSub32)
31588 v.AddArg(x)
31589 v0 := b.NewValue0(v.Pos, OpMul32, t)
31590 v1 := b.NewValue0(v.Pos, OpDiv32u, t)
31591 v1.AddArg(x)
31592 v2 := b.NewValue0(v.Pos, OpConst32, t)
31593 v2.AuxInt = c
31594 v1.AddArg(v2)
31595 v0.AddArg(v1)
31596 v3 := b.NewValue0(v.Pos, OpConst32, t)
31597 v3.AuxInt = c
31598 v0.AddArg(v3)
31599 v.AddArg(v0)
31600 return true
31601 }
31602 return false
31603 }
31604 func rewriteValuegeneric_OpMod64_0(v *Value) bool {
31605 b := v.Block
31606
31607
31608
31609 for {
31610 _ = v.Args[1]
31611 v_0 := v.Args[0]
31612 if v_0.Op != OpConst64 {
31613 break
31614 }
31615 c := v_0.AuxInt
31616 v_1 := v.Args[1]
31617 if v_1.Op != OpConst64 {
31618 break
31619 }
31620 d := v_1.AuxInt
31621 if !(d != 0) {
31622 break
31623 }
31624 v.reset(OpConst64)
31625 v.AuxInt = c % d
31626 return true
31627 }
31628
31629
31630
31631 for {
31632 t := v.Type
31633 _ = v.Args[1]
31634 n := v.Args[0]
31635 v_1 := v.Args[1]
31636 if v_1.Op != OpConst64 {
31637 break
31638 }
31639 c := v_1.AuxInt
31640 if !(isNonNegative(n) && isPowerOfTwo(c)) {
31641 break
31642 }
31643 v.reset(OpAnd64)
31644 v.AddArg(n)
31645 v0 := b.NewValue0(v.Pos, OpConst64, t)
31646 v0.AuxInt = c - 1
31647 v.AddArg(v0)
31648 return true
31649 }
31650
31651
31652
31653 for {
31654 _ = v.Args[1]
31655 n := v.Args[0]
31656 v_1 := v.Args[1]
31657 if v_1.Op != OpConst64 {
31658 break
31659 }
31660 if v_1.AuxInt != -1<<63 {
31661 break
31662 }
31663 if !(isNonNegative(n)) {
31664 break
31665 }
31666 v.reset(OpCopy)
31667 v.Type = n.Type
31668 v.AddArg(n)
31669 return true
31670 }
31671
31672
31673
31674 for {
31675 t := v.Type
31676 _ = v.Args[1]
31677 n := v.Args[0]
31678 v_1 := v.Args[1]
31679 if v_1.Op != OpConst64 {
31680 break
31681 }
31682 c := v_1.AuxInt
31683 if !(c < 0 && c != -1<<63) {
31684 break
31685 }
31686 v.reset(OpMod64)
31687 v.Type = t
31688 v.AddArg(n)
31689 v0 := b.NewValue0(v.Pos, OpConst64, t)
31690 v0.AuxInt = -c
31691 v.AddArg(v0)
31692 return true
31693 }
31694
31695
31696
31697 for {
31698 t := v.Type
31699 _ = v.Args[1]
31700 x := v.Args[0]
31701 v_1 := v.Args[1]
31702 if v_1.Op != OpConst64 {
31703 break
31704 }
31705 c := v_1.AuxInt
31706 if !(x.Op != OpConst64 && (c > 0 || c == -1<<63)) {
31707 break
31708 }
31709 v.reset(OpSub64)
31710 v.AddArg(x)
31711 v0 := b.NewValue0(v.Pos, OpMul64, t)
31712 v1 := b.NewValue0(v.Pos, OpDiv64, t)
31713 v1.AddArg(x)
31714 v2 := b.NewValue0(v.Pos, OpConst64, t)
31715 v2.AuxInt = c
31716 v1.AddArg(v2)
31717 v0.AddArg(v1)
31718 v3 := b.NewValue0(v.Pos, OpConst64, t)
31719 v3.AuxInt = c
31720 v0.AddArg(v3)
31721 v.AddArg(v0)
31722 return true
31723 }
31724 return false
31725 }
31726 func rewriteValuegeneric_OpMod64u_0(v *Value) bool {
31727 b := v.Block
31728
31729
31730
31731 for {
31732 _ = v.Args[1]
31733 v_0 := v.Args[0]
31734 if v_0.Op != OpConst64 {
31735 break
31736 }
31737 c := v_0.AuxInt
31738 v_1 := v.Args[1]
31739 if v_1.Op != OpConst64 {
31740 break
31741 }
31742 d := v_1.AuxInt
31743 if !(d != 0) {
31744 break
31745 }
31746 v.reset(OpConst64)
31747 v.AuxInt = int64(uint64(c) % uint64(d))
31748 return true
31749 }
31750
31751
31752
31753 for {
31754 t := v.Type
31755 _ = v.Args[1]
31756 n := v.Args[0]
31757 v_1 := v.Args[1]
31758 if v_1.Op != OpConst64 {
31759 break
31760 }
31761 c := v_1.AuxInt
31762 if !(isPowerOfTwo(c)) {
31763 break
31764 }
31765 v.reset(OpAnd64)
31766 v.AddArg(n)
31767 v0 := b.NewValue0(v.Pos, OpConst64, t)
31768 v0.AuxInt = c - 1
31769 v.AddArg(v0)
31770 return true
31771 }
31772
31773
31774
31775 for {
31776 t := v.Type
31777 _ = v.Args[1]
31778 n := v.Args[0]
31779 v_1 := v.Args[1]
31780 if v_1.Op != OpConst64 {
31781 break
31782 }
31783 if v_1.AuxInt != -1<<63 {
31784 break
31785 }
31786 v.reset(OpAnd64)
31787 v.AddArg(n)
31788 v0 := b.NewValue0(v.Pos, OpConst64, t)
31789 v0.AuxInt = 1<<63 - 1
31790 v.AddArg(v0)
31791 return true
31792 }
31793
31794
31795
31796 for {
31797 t := v.Type
31798 _ = v.Args[1]
31799 x := v.Args[0]
31800 v_1 := v.Args[1]
31801 if v_1.Op != OpConst64 {
31802 break
31803 }
31804 c := v_1.AuxInt
31805 if !(x.Op != OpConst64 && c > 0 && umagicOK(64, c)) {
31806 break
31807 }
31808 v.reset(OpSub64)
31809 v.AddArg(x)
31810 v0 := b.NewValue0(v.Pos, OpMul64, t)
31811 v1 := b.NewValue0(v.Pos, OpDiv64u, t)
31812 v1.AddArg(x)
31813 v2 := b.NewValue0(v.Pos, OpConst64, t)
31814 v2.AuxInt = c
31815 v1.AddArg(v2)
31816 v0.AddArg(v1)
31817 v3 := b.NewValue0(v.Pos, OpConst64, t)
31818 v3.AuxInt = c
31819 v0.AddArg(v3)
31820 v.AddArg(v0)
31821 return true
31822 }
31823 return false
31824 }
31825 func rewriteValuegeneric_OpMod8_0(v *Value) bool {
31826 b := v.Block
31827
31828
31829
31830 for {
31831 _ = v.Args[1]
31832 v_0 := v.Args[0]
31833 if v_0.Op != OpConst8 {
31834 break
31835 }
31836 c := v_0.AuxInt
31837 v_1 := v.Args[1]
31838 if v_1.Op != OpConst8 {
31839 break
31840 }
31841 d := v_1.AuxInt
31842 if !(d != 0) {
31843 break
31844 }
31845 v.reset(OpConst8)
31846 v.AuxInt = int64(int8(c % d))
31847 return true
31848 }
31849
31850
31851
31852 for {
31853 t := v.Type
31854 _ = v.Args[1]
31855 n := v.Args[0]
31856 v_1 := v.Args[1]
31857 if v_1.Op != OpConst8 {
31858 break
31859 }
31860 c := v_1.AuxInt
31861 if !(isNonNegative(n) && isPowerOfTwo(c&0xff)) {
31862 break
31863 }
31864 v.reset(OpAnd8)
31865 v.AddArg(n)
31866 v0 := b.NewValue0(v.Pos, OpConst8, t)
31867 v0.AuxInt = (c & 0xff) - 1
31868 v.AddArg(v0)
31869 return true
31870 }
31871
31872
31873
31874 for {
31875 t := v.Type
31876 _ = v.Args[1]
31877 n := v.Args[0]
31878 v_1 := v.Args[1]
31879 if v_1.Op != OpConst8 {
31880 break
31881 }
31882 c := v_1.AuxInt
31883 if !(c < 0 && c != -1<<7) {
31884 break
31885 }
31886 v.reset(OpMod8)
31887 v.Type = t
31888 v.AddArg(n)
31889 v0 := b.NewValue0(v.Pos, OpConst8, t)
31890 v0.AuxInt = -c
31891 v.AddArg(v0)
31892 return true
31893 }
31894
31895
31896
31897 for {
31898 t := v.Type
31899 _ = v.Args[1]
31900 x := v.Args[0]
31901 v_1 := v.Args[1]
31902 if v_1.Op != OpConst8 {
31903 break
31904 }
31905 c := v_1.AuxInt
31906 if !(x.Op != OpConst8 && (c > 0 || c == -1<<7)) {
31907 break
31908 }
31909 v.reset(OpSub8)
31910 v.AddArg(x)
31911 v0 := b.NewValue0(v.Pos, OpMul8, t)
31912 v1 := b.NewValue0(v.Pos, OpDiv8, t)
31913 v1.AddArg(x)
31914 v2 := b.NewValue0(v.Pos, OpConst8, t)
31915 v2.AuxInt = c
31916 v1.AddArg(v2)
31917 v0.AddArg(v1)
31918 v3 := b.NewValue0(v.Pos, OpConst8, t)
31919 v3.AuxInt = c
31920 v0.AddArg(v3)
31921 v.AddArg(v0)
31922 return true
31923 }
31924 return false
31925 }
31926 func rewriteValuegeneric_OpMod8u_0(v *Value) bool {
31927 b := v.Block
31928
31929
31930
31931 for {
31932 _ = v.Args[1]
31933 v_0 := v.Args[0]
31934 if v_0.Op != OpConst8 {
31935 break
31936 }
31937 c := v_0.AuxInt
31938 v_1 := v.Args[1]
31939 if v_1.Op != OpConst8 {
31940 break
31941 }
31942 d := v_1.AuxInt
31943 if !(d != 0) {
31944 break
31945 }
31946 v.reset(OpConst8)
31947 v.AuxInt = int64(uint8(c) % uint8(d))
31948 return true
31949 }
31950
31951
31952
31953 for {
31954 t := v.Type
31955 _ = v.Args[1]
31956 n := v.Args[0]
31957 v_1 := v.Args[1]
31958 if v_1.Op != OpConst8 {
31959 break
31960 }
31961 c := v_1.AuxInt
31962 if !(isPowerOfTwo(c & 0xff)) {
31963 break
31964 }
31965 v.reset(OpAnd8)
31966 v.AddArg(n)
31967 v0 := b.NewValue0(v.Pos, OpConst8, t)
31968 v0.AuxInt = (c & 0xff) - 1
31969 v.AddArg(v0)
31970 return true
31971 }
31972
31973
31974
31975 for {
31976 t := v.Type
31977 _ = v.Args[1]
31978 x := v.Args[0]
31979 v_1 := v.Args[1]
31980 if v_1.Op != OpConst8 {
31981 break
31982 }
31983 c := v_1.AuxInt
31984 if !(x.Op != OpConst8 && c > 0 && umagicOK(8, c)) {
31985 break
31986 }
31987 v.reset(OpSub8)
31988 v.AddArg(x)
31989 v0 := b.NewValue0(v.Pos, OpMul8, t)
31990 v1 := b.NewValue0(v.Pos, OpDiv8u, t)
31991 v1.AddArg(x)
31992 v2 := b.NewValue0(v.Pos, OpConst8, t)
31993 v2.AuxInt = c
31994 v1.AddArg(v2)
31995 v0.AddArg(v1)
31996 v3 := b.NewValue0(v.Pos, OpConst8, t)
31997 v3.AuxInt = c
31998 v0.AddArg(v3)
31999 v.AddArg(v0)
32000 return true
32001 }
32002 return false
32003 }
32004 func rewriteValuegeneric_OpMove_0(v *Value) bool {
32005 b := v.Block
32006
32007
32008
32009 for {
32010 n := v.AuxInt
32011 t := v.Aux
32012 _ = v.Args[2]
32013 dst1 := v.Args[0]
32014 src := v.Args[1]
32015 mem := v.Args[2]
32016 if mem.Op != OpZero {
32017 break
32018 }
32019 if mem.AuxInt != n {
32020 break
32021 }
32022 if mem.Aux != t {
32023 break
32024 }
32025 _ = mem.Args[1]
32026 dst2 := mem.Args[0]
32027 if !(isSamePtr(src, dst2)) {
32028 break
32029 }
32030 v.reset(OpZero)
32031 v.AuxInt = n
32032 v.Aux = t
32033 v.AddArg(dst1)
32034 v.AddArg(mem)
32035 return true
32036 }
32037
32038
32039
32040 for {
32041 n := v.AuxInt
32042 t := v.Aux
32043 _ = v.Args[2]
32044 dst1 := v.Args[0]
32045 src := v.Args[1]
32046 mem := v.Args[2]
32047 if mem.Op != OpVarDef {
32048 break
32049 }
32050 mem_0 := mem.Args[0]
32051 if mem_0.Op != OpZero {
32052 break
32053 }
32054 if mem_0.AuxInt != n {
32055 break
32056 }
32057 if mem_0.Aux != t {
32058 break
32059 }
32060 _ = mem_0.Args[1]
32061 dst0 := mem_0.Args[0]
32062 if !(isSamePtr(src, dst0)) {
32063 break
32064 }
32065 v.reset(OpZero)
32066 v.AuxInt = n
32067 v.Aux = t
32068 v.AddArg(dst1)
32069 v.AddArg(mem)
32070 return true
32071 }
32072
32073
32074
32075 for {
32076 n := v.AuxInt
32077 t1 := v.Aux
32078 _ = v.Args[2]
32079 dst1 := v.Args[0]
32080 src1 := v.Args[1]
32081 store := v.Args[2]
32082 if store.Op != OpStore {
32083 break
32084 }
32085 t2 := store.Aux
32086 mem := store.Args[2]
32087 op := store.Args[0]
32088 if op.Op != OpOffPtr {
32089 break
32090 }
32091 o2 := op.AuxInt
32092 dst2 := op.Args[0]
32093 if !(isSamePtr(dst1, dst2) && store.Uses == 1 && n >= o2+sizeof(t2) && disjoint(src1, n, op, sizeof(t2)) && clobber(store)) {
32094 break
32095 }
32096 v.reset(OpMove)
32097 v.AuxInt = n
32098 v.Aux = t1
32099 v.AddArg(dst1)
32100 v.AddArg(src1)
32101 v.AddArg(mem)
32102 return true
32103 }
32104
32105
32106
32107 for {
32108 n := v.AuxInt
32109 t := v.Aux
32110 _ = v.Args[2]
32111 dst1 := v.Args[0]
32112 src1 := v.Args[1]
32113 move := v.Args[2]
32114 if move.Op != OpMove {
32115 break
32116 }
32117 if move.AuxInt != n {
32118 break
32119 }
32120 if move.Aux != t {
32121 break
32122 }
32123 mem := move.Args[2]
32124 dst2 := move.Args[0]
32125 if !(move.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(move)) {
32126 break
32127 }
32128 v.reset(OpMove)
32129 v.AuxInt = n
32130 v.Aux = t
32131 v.AddArg(dst1)
32132 v.AddArg(src1)
32133 v.AddArg(mem)
32134 return true
32135 }
32136
32137
32138
32139 for {
32140 n := v.AuxInt
32141 t := v.Aux
32142 _ = v.Args[2]
32143 dst1 := v.Args[0]
32144 src1 := v.Args[1]
32145 vardef := v.Args[2]
32146 if vardef.Op != OpVarDef {
32147 break
32148 }
32149 x := vardef.Aux
32150 move := vardef.Args[0]
32151 if move.Op != OpMove {
32152 break
32153 }
32154 if move.AuxInt != n {
32155 break
32156 }
32157 if move.Aux != t {
32158 break
32159 }
32160 mem := move.Args[2]
32161 dst2 := move.Args[0]
32162 if !(move.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(move) && clobber(vardef)) {
32163 break
32164 }
32165 v.reset(OpMove)
32166 v.AuxInt = n
32167 v.Aux = t
32168 v.AddArg(dst1)
32169 v.AddArg(src1)
32170 v0 := b.NewValue0(v.Pos, OpVarDef, types.TypeMem)
32171 v0.Aux = x
32172 v0.AddArg(mem)
32173 v.AddArg(v0)
32174 return true
32175 }
32176
32177
32178
32179 for {
32180 n := v.AuxInt
32181 t := v.Aux
32182 _ = v.Args[2]
32183 dst1 := v.Args[0]
32184 src1 := v.Args[1]
32185 zero := v.Args[2]
32186 if zero.Op != OpZero {
32187 break
32188 }
32189 if zero.AuxInt != n {
32190 break
32191 }
32192 if zero.Aux != t {
32193 break
32194 }
32195 mem := zero.Args[1]
32196 dst2 := zero.Args[0]
32197 if !(zero.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(zero)) {
32198 break
32199 }
32200 v.reset(OpMove)
32201 v.AuxInt = n
32202 v.Aux = t
32203 v.AddArg(dst1)
32204 v.AddArg(src1)
32205 v.AddArg(mem)
32206 return true
32207 }
32208
32209
32210
32211 for {
32212 n := v.AuxInt
32213 t := v.Aux
32214 _ = v.Args[2]
32215 dst1 := v.Args[0]
32216 src1 := v.Args[1]
32217 vardef := v.Args[2]
32218 if vardef.Op != OpVarDef {
32219 break
32220 }
32221 x := vardef.Aux
32222 zero := vardef.Args[0]
32223 if zero.Op != OpZero {
32224 break
32225 }
32226 if zero.AuxInt != n {
32227 break
32228 }
32229 if zero.Aux != t {
32230 break
32231 }
32232 mem := zero.Args[1]
32233 dst2 := zero.Args[0]
32234 if !(zero.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(zero) && clobber(vardef)) {
32235 break
32236 }
32237 v.reset(OpMove)
32238 v.AuxInt = n
32239 v.Aux = t
32240 v.AddArg(dst1)
32241 v.AddArg(src1)
32242 v0 := b.NewValue0(v.Pos, OpVarDef, types.TypeMem)
32243 v0.Aux = x
32244 v0.AddArg(mem)
32245 v.AddArg(v0)
32246 return true
32247 }
32248
32249
32250
32251 for {
32252 n := v.AuxInt
32253 t1 := v.Aux
32254 _ = v.Args[2]
32255 dst := v.Args[0]
32256 p1 := v.Args[1]
32257 mem := v.Args[2]
32258 if mem.Op != OpStore {
32259 break
32260 }
32261 t2 := mem.Aux
32262 _ = mem.Args[2]
32263 op2 := mem.Args[0]
32264 if op2.Op != OpOffPtr {
32265 break
32266 }
32267 tt2 := op2.Type
32268 o2 := op2.AuxInt
32269 p2 := op2.Args[0]
32270 d1 := mem.Args[1]
32271 mem_2 := mem.Args[2]
32272 if mem_2.Op != OpStore {
32273 break
32274 }
32275 t3 := mem_2.Aux
32276 _ = mem_2.Args[2]
32277 op3 := mem_2.Args[0]
32278 if op3.Op != OpOffPtr {
32279 break
32280 }
32281 tt3 := op3.Type
32282 if op3.AuxInt != 0 {
32283 break
32284 }
32285 p3 := op3.Args[0]
32286 d2 := mem_2.Args[1]
32287 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && o2 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)) {
32288 break
32289 }
32290 v.reset(OpStore)
32291 v.Aux = t2
32292 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32293 v0.AuxInt = o2
32294 v0.AddArg(dst)
32295 v.AddArg(v0)
32296 v.AddArg(d1)
32297 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32298 v1.Aux = t3
32299 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32300 v2.AuxInt = 0
32301 v2.AddArg(dst)
32302 v1.AddArg(v2)
32303 v1.AddArg(d2)
32304 v1.AddArg(mem)
32305 v.AddArg(v1)
32306 return true
32307 }
32308
32309
32310
32311 for {
32312 n := v.AuxInt
32313 t1 := v.Aux
32314 _ = v.Args[2]
32315 dst := v.Args[0]
32316 p1 := v.Args[1]
32317 mem := v.Args[2]
32318 if mem.Op != OpStore {
32319 break
32320 }
32321 t2 := mem.Aux
32322 _ = mem.Args[2]
32323 op2 := mem.Args[0]
32324 if op2.Op != OpOffPtr {
32325 break
32326 }
32327 tt2 := op2.Type
32328 o2 := op2.AuxInt
32329 p2 := op2.Args[0]
32330 d1 := mem.Args[1]
32331 mem_2 := mem.Args[2]
32332 if mem_2.Op != OpStore {
32333 break
32334 }
32335 t3 := mem_2.Aux
32336 _ = mem_2.Args[2]
32337 op3 := mem_2.Args[0]
32338 if op3.Op != OpOffPtr {
32339 break
32340 }
32341 tt3 := op3.Type
32342 o3 := op3.AuxInt
32343 p3 := op3.Args[0]
32344 d2 := mem_2.Args[1]
32345 mem_2_2 := mem_2.Args[2]
32346 if mem_2_2.Op != OpStore {
32347 break
32348 }
32349 t4 := mem_2_2.Aux
32350 _ = mem_2_2.Args[2]
32351 op4 := mem_2_2.Args[0]
32352 if op4.Op != OpOffPtr {
32353 break
32354 }
32355 tt4 := op4.Type
32356 if op4.AuxInt != 0 {
32357 break
32358 }
32359 p4 := op4.Args[0]
32360 d3 := mem_2_2.Args[1]
32361 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)+sizeof(t4)) {
32362 break
32363 }
32364 v.reset(OpStore)
32365 v.Aux = t2
32366 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32367 v0.AuxInt = o2
32368 v0.AddArg(dst)
32369 v.AddArg(v0)
32370 v.AddArg(d1)
32371 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32372 v1.Aux = t3
32373 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32374 v2.AuxInt = o3
32375 v2.AddArg(dst)
32376 v1.AddArg(v2)
32377 v1.AddArg(d2)
32378 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32379 v3.Aux = t4
32380 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
32381 v4.AuxInt = 0
32382 v4.AddArg(dst)
32383 v3.AddArg(v4)
32384 v3.AddArg(d3)
32385 v3.AddArg(mem)
32386 v1.AddArg(v3)
32387 v.AddArg(v1)
32388 return true
32389 }
32390
32391
32392
32393 for {
32394 n := v.AuxInt
32395 t1 := v.Aux
32396 _ = v.Args[2]
32397 dst := v.Args[0]
32398 p1 := v.Args[1]
32399 mem := v.Args[2]
32400 if mem.Op != OpStore {
32401 break
32402 }
32403 t2 := mem.Aux
32404 _ = mem.Args[2]
32405 op2 := mem.Args[0]
32406 if op2.Op != OpOffPtr {
32407 break
32408 }
32409 tt2 := op2.Type
32410 o2 := op2.AuxInt
32411 p2 := op2.Args[0]
32412 d1 := mem.Args[1]
32413 mem_2 := mem.Args[2]
32414 if mem_2.Op != OpStore {
32415 break
32416 }
32417 t3 := mem_2.Aux
32418 _ = mem_2.Args[2]
32419 op3 := mem_2.Args[0]
32420 if op3.Op != OpOffPtr {
32421 break
32422 }
32423 tt3 := op3.Type
32424 o3 := op3.AuxInt
32425 p3 := op3.Args[0]
32426 d2 := mem_2.Args[1]
32427 mem_2_2 := mem_2.Args[2]
32428 if mem_2_2.Op != OpStore {
32429 break
32430 }
32431 t4 := mem_2_2.Aux
32432 _ = mem_2_2.Args[2]
32433 op4 := mem_2_2.Args[0]
32434 if op4.Op != OpOffPtr {
32435 break
32436 }
32437 tt4 := op4.Type
32438 o4 := op4.AuxInt
32439 p4 := op4.Args[0]
32440 d3 := mem_2_2.Args[1]
32441 mem_2_2_2 := mem_2_2.Args[2]
32442 if mem_2_2_2.Op != OpStore {
32443 break
32444 }
32445 t5 := mem_2_2_2.Aux
32446 _ = mem_2_2_2.Args[2]
32447 op5 := mem_2_2_2.Args[0]
32448 if op5.Op != OpOffPtr {
32449 break
32450 }
32451 tt5 := op5.Type
32452 if op5.AuxInt != 0 {
32453 break
32454 }
32455 p5 := op5.Args[0]
32456 d4 := mem_2_2_2.Args[1]
32457 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && o4 == sizeof(t5) && o3-o4 == sizeof(t4) && o2-o3 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)+sizeof(t4)+sizeof(t5)) {
32458 break
32459 }
32460 v.reset(OpStore)
32461 v.Aux = t2
32462 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32463 v0.AuxInt = o2
32464 v0.AddArg(dst)
32465 v.AddArg(v0)
32466 v.AddArg(d1)
32467 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32468 v1.Aux = t3
32469 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32470 v2.AuxInt = o3
32471 v2.AddArg(dst)
32472 v1.AddArg(v2)
32473 v1.AddArg(d2)
32474 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32475 v3.Aux = t4
32476 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
32477 v4.AuxInt = o4
32478 v4.AddArg(dst)
32479 v3.AddArg(v4)
32480 v3.AddArg(d3)
32481 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32482 v5.Aux = t5
32483 v6 := b.NewValue0(v.Pos, OpOffPtr, tt5)
32484 v6.AuxInt = 0
32485 v6.AddArg(dst)
32486 v5.AddArg(v6)
32487 v5.AddArg(d4)
32488 v5.AddArg(mem)
32489 v3.AddArg(v5)
32490 v1.AddArg(v3)
32491 v.AddArg(v1)
32492 return true
32493 }
32494 return false
32495 }
32496 func rewriteValuegeneric_OpMove_10(v *Value) bool {
32497 b := v.Block
32498
32499
32500
32501 for {
32502 n := v.AuxInt
32503 t1 := v.Aux
32504 _ = v.Args[2]
32505 dst := v.Args[0]
32506 p1 := v.Args[1]
32507 mem := v.Args[2]
32508 if mem.Op != OpVarDef {
32509 break
32510 }
32511 mem_0 := mem.Args[0]
32512 if mem_0.Op != OpStore {
32513 break
32514 }
32515 t2 := mem_0.Aux
32516 _ = mem_0.Args[2]
32517 op2 := mem_0.Args[0]
32518 if op2.Op != OpOffPtr {
32519 break
32520 }
32521 tt2 := op2.Type
32522 o2 := op2.AuxInt
32523 p2 := op2.Args[0]
32524 d1 := mem_0.Args[1]
32525 mem_0_2 := mem_0.Args[2]
32526 if mem_0_2.Op != OpStore {
32527 break
32528 }
32529 t3 := mem_0_2.Aux
32530 _ = mem_0_2.Args[2]
32531 op3 := mem_0_2.Args[0]
32532 if op3.Op != OpOffPtr {
32533 break
32534 }
32535 tt3 := op3.Type
32536 if op3.AuxInt != 0 {
32537 break
32538 }
32539 p3 := op3.Args[0]
32540 d2 := mem_0_2.Args[1]
32541 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && o2 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)) {
32542 break
32543 }
32544 v.reset(OpStore)
32545 v.Aux = t2
32546 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32547 v0.AuxInt = o2
32548 v0.AddArg(dst)
32549 v.AddArg(v0)
32550 v.AddArg(d1)
32551 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32552 v1.Aux = t3
32553 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32554 v2.AuxInt = 0
32555 v2.AddArg(dst)
32556 v1.AddArg(v2)
32557 v1.AddArg(d2)
32558 v1.AddArg(mem)
32559 v.AddArg(v1)
32560 return true
32561 }
32562
32563
32564
32565 for {
32566 n := v.AuxInt
32567 t1 := v.Aux
32568 _ = v.Args[2]
32569 dst := v.Args[0]
32570 p1 := v.Args[1]
32571 mem := v.Args[2]
32572 if mem.Op != OpVarDef {
32573 break
32574 }
32575 mem_0 := mem.Args[0]
32576 if mem_0.Op != OpStore {
32577 break
32578 }
32579 t2 := mem_0.Aux
32580 _ = mem_0.Args[2]
32581 op2 := mem_0.Args[0]
32582 if op2.Op != OpOffPtr {
32583 break
32584 }
32585 tt2 := op2.Type
32586 o2 := op2.AuxInt
32587 p2 := op2.Args[0]
32588 d1 := mem_0.Args[1]
32589 mem_0_2 := mem_0.Args[2]
32590 if mem_0_2.Op != OpStore {
32591 break
32592 }
32593 t3 := mem_0_2.Aux
32594 _ = mem_0_2.Args[2]
32595 op3 := mem_0_2.Args[0]
32596 if op3.Op != OpOffPtr {
32597 break
32598 }
32599 tt3 := op3.Type
32600 o3 := op3.AuxInt
32601 p3 := op3.Args[0]
32602 d2 := mem_0_2.Args[1]
32603 mem_0_2_2 := mem_0_2.Args[2]
32604 if mem_0_2_2.Op != OpStore {
32605 break
32606 }
32607 t4 := mem_0_2_2.Aux
32608 _ = mem_0_2_2.Args[2]
32609 op4 := mem_0_2_2.Args[0]
32610 if op4.Op != OpOffPtr {
32611 break
32612 }
32613 tt4 := op4.Type
32614 if op4.AuxInt != 0 {
32615 break
32616 }
32617 p4 := op4.Args[0]
32618 d3 := mem_0_2_2.Args[1]
32619 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)+sizeof(t4)) {
32620 break
32621 }
32622 v.reset(OpStore)
32623 v.Aux = t2
32624 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32625 v0.AuxInt = o2
32626 v0.AddArg(dst)
32627 v.AddArg(v0)
32628 v.AddArg(d1)
32629 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32630 v1.Aux = t3
32631 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32632 v2.AuxInt = o3
32633 v2.AddArg(dst)
32634 v1.AddArg(v2)
32635 v1.AddArg(d2)
32636 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32637 v3.Aux = t4
32638 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
32639 v4.AuxInt = 0
32640 v4.AddArg(dst)
32641 v3.AddArg(v4)
32642 v3.AddArg(d3)
32643 v3.AddArg(mem)
32644 v1.AddArg(v3)
32645 v.AddArg(v1)
32646 return true
32647 }
32648
32649
32650
32651 for {
32652 n := v.AuxInt
32653 t1 := v.Aux
32654 _ = v.Args[2]
32655 dst := v.Args[0]
32656 p1 := v.Args[1]
32657 mem := v.Args[2]
32658 if mem.Op != OpVarDef {
32659 break
32660 }
32661 mem_0 := mem.Args[0]
32662 if mem_0.Op != OpStore {
32663 break
32664 }
32665 t2 := mem_0.Aux
32666 _ = mem_0.Args[2]
32667 op2 := mem_0.Args[0]
32668 if op2.Op != OpOffPtr {
32669 break
32670 }
32671 tt2 := op2.Type
32672 o2 := op2.AuxInt
32673 p2 := op2.Args[0]
32674 d1 := mem_0.Args[1]
32675 mem_0_2 := mem_0.Args[2]
32676 if mem_0_2.Op != OpStore {
32677 break
32678 }
32679 t3 := mem_0_2.Aux
32680 _ = mem_0_2.Args[2]
32681 op3 := mem_0_2.Args[0]
32682 if op3.Op != OpOffPtr {
32683 break
32684 }
32685 tt3 := op3.Type
32686 o3 := op3.AuxInt
32687 p3 := op3.Args[0]
32688 d2 := mem_0_2.Args[1]
32689 mem_0_2_2 := mem_0_2.Args[2]
32690 if mem_0_2_2.Op != OpStore {
32691 break
32692 }
32693 t4 := mem_0_2_2.Aux
32694 _ = mem_0_2_2.Args[2]
32695 op4 := mem_0_2_2.Args[0]
32696 if op4.Op != OpOffPtr {
32697 break
32698 }
32699 tt4 := op4.Type
32700 o4 := op4.AuxInt
32701 p4 := op4.Args[0]
32702 d3 := mem_0_2_2.Args[1]
32703 mem_0_2_2_2 := mem_0_2_2.Args[2]
32704 if mem_0_2_2_2.Op != OpStore {
32705 break
32706 }
32707 t5 := mem_0_2_2_2.Aux
32708 _ = mem_0_2_2_2.Args[2]
32709 op5 := mem_0_2_2_2.Args[0]
32710 if op5.Op != OpOffPtr {
32711 break
32712 }
32713 tt5 := op5.Type
32714 if op5.AuxInt != 0 {
32715 break
32716 }
32717 p5 := op5.Args[0]
32718 d4 := mem_0_2_2_2.Args[1]
32719 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && o4 == sizeof(t5) && o3-o4 == sizeof(t4) && o2-o3 == sizeof(t3) && n == sizeof(t2)+sizeof(t3)+sizeof(t4)+sizeof(t5)) {
32720 break
32721 }
32722 v.reset(OpStore)
32723 v.Aux = t2
32724 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32725 v0.AuxInt = o2
32726 v0.AddArg(dst)
32727 v.AddArg(v0)
32728 v.AddArg(d1)
32729 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32730 v1.Aux = t3
32731 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32732 v2.AuxInt = o3
32733 v2.AddArg(dst)
32734 v1.AddArg(v2)
32735 v1.AddArg(d2)
32736 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32737 v3.Aux = t4
32738 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
32739 v4.AuxInt = o4
32740 v4.AddArg(dst)
32741 v3.AddArg(v4)
32742 v3.AddArg(d3)
32743 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32744 v5.Aux = t5
32745 v6 := b.NewValue0(v.Pos, OpOffPtr, tt5)
32746 v6.AuxInt = 0
32747 v6.AddArg(dst)
32748 v5.AddArg(v6)
32749 v5.AddArg(d4)
32750 v5.AddArg(mem)
32751 v3.AddArg(v5)
32752 v1.AddArg(v3)
32753 v.AddArg(v1)
32754 return true
32755 }
32756
32757
32758
32759 for {
32760 n := v.AuxInt
32761 t1 := v.Aux
32762 _ = v.Args[2]
32763 dst := v.Args[0]
32764 p1 := v.Args[1]
32765 mem := v.Args[2]
32766 if mem.Op != OpStore {
32767 break
32768 }
32769 t2 := mem.Aux
32770 _ = mem.Args[2]
32771 op2 := mem.Args[0]
32772 if op2.Op != OpOffPtr {
32773 break
32774 }
32775 tt2 := op2.Type
32776 o2 := op2.AuxInt
32777 p2 := op2.Args[0]
32778 d1 := mem.Args[1]
32779 mem_2 := mem.Args[2]
32780 if mem_2.Op != OpZero {
32781 break
32782 }
32783 if mem_2.AuxInt != n {
32784 break
32785 }
32786 t3 := mem_2.Aux
32787 _ = mem_2.Args[1]
32788 p3 := mem_2.Args[0]
32789 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && registerizable(b, t2) && n >= o2+sizeof(t2)) {
32790 break
32791 }
32792 v.reset(OpStore)
32793 v.Aux = t2
32794 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32795 v0.AuxInt = o2
32796 v0.AddArg(dst)
32797 v.AddArg(v0)
32798 v.AddArg(d1)
32799 v1 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
32800 v1.AuxInt = n
32801 v1.Aux = t1
32802 v1.AddArg(dst)
32803 v1.AddArg(mem)
32804 v.AddArg(v1)
32805 return true
32806 }
32807
32808
32809
32810 for {
32811 n := v.AuxInt
32812 t1 := v.Aux
32813 _ = v.Args[2]
32814 dst := v.Args[0]
32815 p1 := v.Args[1]
32816 mem := v.Args[2]
32817 if mem.Op != OpStore {
32818 break
32819 }
32820 t2 := mem.Aux
32821 _ = mem.Args[2]
32822 mem_0 := mem.Args[0]
32823 if mem_0.Op != OpOffPtr {
32824 break
32825 }
32826 tt2 := mem_0.Type
32827 o2 := mem_0.AuxInt
32828 p2 := mem_0.Args[0]
32829 d1 := mem.Args[1]
32830 mem_2 := mem.Args[2]
32831 if mem_2.Op != OpStore {
32832 break
32833 }
32834 t3 := mem_2.Aux
32835 _ = mem_2.Args[2]
32836 mem_2_0 := mem_2.Args[0]
32837 if mem_2_0.Op != OpOffPtr {
32838 break
32839 }
32840 tt3 := mem_2_0.Type
32841 o3 := mem_2_0.AuxInt
32842 p3 := mem_2_0.Args[0]
32843 d2 := mem_2.Args[1]
32844 mem_2_2 := mem_2.Args[2]
32845 if mem_2_2.Op != OpZero {
32846 break
32847 }
32848 if mem_2_2.AuxInt != n {
32849 break
32850 }
32851 t4 := mem_2_2.Aux
32852 _ = mem_2_2.Args[1]
32853 p4 := mem_2_2.Args[0]
32854 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3)) {
32855 break
32856 }
32857 v.reset(OpStore)
32858 v.Aux = t2
32859 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32860 v0.AuxInt = o2
32861 v0.AddArg(dst)
32862 v.AddArg(v0)
32863 v.AddArg(d1)
32864 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32865 v1.Aux = t3
32866 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32867 v2.AuxInt = o3
32868 v2.AddArg(dst)
32869 v1.AddArg(v2)
32870 v1.AddArg(d2)
32871 v3 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
32872 v3.AuxInt = n
32873 v3.Aux = t1
32874 v3.AddArg(dst)
32875 v3.AddArg(mem)
32876 v1.AddArg(v3)
32877 v.AddArg(v1)
32878 return true
32879 }
32880
32881
32882
32883 for {
32884 n := v.AuxInt
32885 t1 := v.Aux
32886 _ = v.Args[2]
32887 dst := v.Args[0]
32888 p1 := v.Args[1]
32889 mem := v.Args[2]
32890 if mem.Op != OpStore {
32891 break
32892 }
32893 t2 := mem.Aux
32894 _ = mem.Args[2]
32895 mem_0 := mem.Args[0]
32896 if mem_0.Op != OpOffPtr {
32897 break
32898 }
32899 tt2 := mem_0.Type
32900 o2 := mem_0.AuxInt
32901 p2 := mem_0.Args[0]
32902 d1 := mem.Args[1]
32903 mem_2 := mem.Args[2]
32904 if mem_2.Op != OpStore {
32905 break
32906 }
32907 t3 := mem_2.Aux
32908 _ = mem_2.Args[2]
32909 mem_2_0 := mem_2.Args[0]
32910 if mem_2_0.Op != OpOffPtr {
32911 break
32912 }
32913 tt3 := mem_2_0.Type
32914 o3 := mem_2_0.AuxInt
32915 p3 := mem_2_0.Args[0]
32916 d2 := mem_2.Args[1]
32917 mem_2_2 := mem_2.Args[2]
32918 if mem_2_2.Op != OpStore {
32919 break
32920 }
32921 t4 := mem_2_2.Aux
32922 _ = mem_2_2.Args[2]
32923 mem_2_2_0 := mem_2_2.Args[0]
32924 if mem_2_2_0.Op != OpOffPtr {
32925 break
32926 }
32927 tt4 := mem_2_2_0.Type
32928 o4 := mem_2_2_0.AuxInt
32929 p4 := mem_2_2_0.Args[0]
32930 d3 := mem_2_2.Args[1]
32931 mem_2_2_2 := mem_2_2.Args[2]
32932 if mem_2_2_2.Op != OpZero {
32933 break
32934 }
32935 if mem_2_2_2.AuxInt != n {
32936 break
32937 }
32938 t5 := mem_2_2_2.Aux
32939 _ = mem_2_2_2.Args[1]
32940 p5 := mem_2_2_2.Args[0]
32941 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3) && n >= o4+sizeof(t4)) {
32942 break
32943 }
32944 v.reset(OpStore)
32945 v.Aux = t2
32946 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
32947 v0.AuxInt = o2
32948 v0.AddArg(dst)
32949 v.AddArg(v0)
32950 v.AddArg(d1)
32951 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32952 v1.Aux = t3
32953 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
32954 v2.AuxInt = o3
32955 v2.AddArg(dst)
32956 v1.AddArg(v2)
32957 v1.AddArg(d2)
32958 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
32959 v3.Aux = t4
32960 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
32961 v4.AuxInt = o4
32962 v4.AddArg(dst)
32963 v3.AddArg(v4)
32964 v3.AddArg(d3)
32965 v5 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
32966 v5.AuxInt = n
32967 v5.Aux = t1
32968 v5.AddArg(dst)
32969 v5.AddArg(mem)
32970 v3.AddArg(v5)
32971 v1.AddArg(v3)
32972 v.AddArg(v1)
32973 return true
32974 }
32975
32976
32977
32978 for {
32979 n := v.AuxInt
32980 t1 := v.Aux
32981 _ = v.Args[2]
32982 dst := v.Args[0]
32983 p1 := v.Args[1]
32984 mem := v.Args[2]
32985 if mem.Op != OpStore {
32986 break
32987 }
32988 t2 := mem.Aux
32989 _ = mem.Args[2]
32990 mem_0 := mem.Args[0]
32991 if mem_0.Op != OpOffPtr {
32992 break
32993 }
32994 tt2 := mem_0.Type
32995 o2 := mem_0.AuxInt
32996 p2 := mem_0.Args[0]
32997 d1 := mem.Args[1]
32998 mem_2 := mem.Args[2]
32999 if mem_2.Op != OpStore {
33000 break
33001 }
33002 t3 := mem_2.Aux
33003 _ = mem_2.Args[2]
33004 mem_2_0 := mem_2.Args[0]
33005 if mem_2_0.Op != OpOffPtr {
33006 break
33007 }
33008 tt3 := mem_2_0.Type
33009 o3 := mem_2_0.AuxInt
33010 p3 := mem_2_0.Args[0]
33011 d2 := mem_2.Args[1]
33012 mem_2_2 := mem_2.Args[2]
33013 if mem_2_2.Op != OpStore {
33014 break
33015 }
33016 t4 := mem_2_2.Aux
33017 _ = mem_2_2.Args[2]
33018 mem_2_2_0 := mem_2_2.Args[0]
33019 if mem_2_2_0.Op != OpOffPtr {
33020 break
33021 }
33022 tt4 := mem_2_2_0.Type
33023 o4 := mem_2_2_0.AuxInt
33024 p4 := mem_2_2_0.Args[0]
33025 d3 := mem_2_2.Args[1]
33026 mem_2_2_2 := mem_2_2.Args[2]
33027 if mem_2_2_2.Op != OpStore {
33028 break
33029 }
33030 t5 := mem_2_2_2.Aux
33031 _ = mem_2_2_2.Args[2]
33032 mem_2_2_2_0 := mem_2_2_2.Args[0]
33033 if mem_2_2_2_0.Op != OpOffPtr {
33034 break
33035 }
33036 tt5 := mem_2_2_2_0.Type
33037 o5 := mem_2_2_2_0.AuxInt
33038 p5 := mem_2_2_2_0.Args[0]
33039 d4 := mem_2_2_2.Args[1]
33040 mem_2_2_2_2 := mem_2_2_2.Args[2]
33041 if mem_2_2_2_2.Op != OpZero {
33042 break
33043 }
33044 if mem_2_2_2_2.AuxInt != n {
33045 break
33046 }
33047 t6 := mem_2_2_2_2.Aux
33048 _ = mem_2_2_2_2.Args[1]
33049 p6 := mem_2_2_2_2.Args[0]
33050 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && isSamePtr(p5, p6) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && alignof(t6) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3) && n >= o4+sizeof(t4) && n >= o5+sizeof(t5)) {
33051 break
33052 }
33053 v.reset(OpStore)
33054 v.Aux = t2
33055 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
33056 v0.AuxInt = o2
33057 v0.AddArg(dst)
33058 v.AddArg(v0)
33059 v.AddArg(d1)
33060 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33061 v1.Aux = t3
33062 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
33063 v2.AuxInt = o3
33064 v2.AddArg(dst)
33065 v1.AddArg(v2)
33066 v1.AddArg(d2)
33067 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33068 v3.Aux = t4
33069 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
33070 v4.AuxInt = o4
33071 v4.AddArg(dst)
33072 v3.AddArg(v4)
33073 v3.AddArg(d3)
33074 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33075 v5.Aux = t5
33076 v6 := b.NewValue0(v.Pos, OpOffPtr, tt5)
33077 v6.AuxInt = o5
33078 v6.AddArg(dst)
33079 v5.AddArg(v6)
33080 v5.AddArg(d4)
33081 v7 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
33082 v7.AuxInt = n
33083 v7.Aux = t1
33084 v7.AddArg(dst)
33085 v7.AddArg(mem)
33086 v5.AddArg(v7)
33087 v3.AddArg(v5)
33088 v1.AddArg(v3)
33089 v.AddArg(v1)
33090 return true
33091 }
33092
33093
33094
33095 for {
33096 n := v.AuxInt
33097 t1 := v.Aux
33098 _ = v.Args[2]
33099 dst := v.Args[0]
33100 p1 := v.Args[1]
33101 mem := v.Args[2]
33102 if mem.Op != OpVarDef {
33103 break
33104 }
33105 mem_0 := mem.Args[0]
33106 if mem_0.Op != OpStore {
33107 break
33108 }
33109 t2 := mem_0.Aux
33110 _ = mem_0.Args[2]
33111 op2 := mem_0.Args[0]
33112 if op2.Op != OpOffPtr {
33113 break
33114 }
33115 tt2 := op2.Type
33116 o2 := op2.AuxInt
33117 p2 := op2.Args[0]
33118 d1 := mem_0.Args[1]
33119 mem_0_2 := mem_0.Args[2]
33120 if mem_0_2.Op != OpZero {
33121 break
33122 }
33123 if mem_0_2.AuxInt != n {
33124 break
33125 }
33126 t3 := mem_0_2.Aux
33127 _ = mem_0_2.Args[1]
33128 p3 := mem_0_2.Args[0]
33129 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && registerizable(b, t2) && n >= o2+sizeof(t2)) {
33130 break
33131 }
33132 v.reset(OpStore)
33133 v.Aux = t2
33134 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
33135 v0.AuxInt = o2
33136 v0.AddArg(dst)
33137 v.AddArg(v0)
33138 v.AddArg(d1)
33139 v1 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
33140 v1.AuxInt = n
33141 v1.Aux = t1
33142 v1.AddArg(dst)
33143 v1.AddArg(mem)
33144 v.AddArg(v1)
33145 return true
33146 }
33147
33148
33149
33150 for {
33151 n := v.AuxInt
33152 t1 := v.Aux
33153 _ = v.Args[2]
33154 dst := v.Args[0]
33155 p1 := v.Args[1]
33156 mem := v.Args[2]
33157 if mem.Op != OpVarDef {
33158 break
33159 }
33160 mem_0 := mem.Args[0]
33161 if mem_0.Op != OpStore {
33162 break
33163 }
33164 t2 := mem_0.Aux
33165 _ = mem_0.Args[2]
33166 mem_0_0 := mem_0.Args[0]
33167 if mem_0_0.Op != OpOffPtr {
33168 break
33169 }
33170 tt2 := mem_0_0.Type
33171 o2 := mem_0_0.AuxInt
33172 p2 := mem_0_0.Args[0]
33173 d1 := mem_0.Args[1]
33174 mem_0_2 := mem_0.Args[2]
33175 if mem_0_2.Op != OpStore {
33176 break
33177 }
33178 t3 := mem_0_2.Aux
33179 _ = mem_0_2.Args[2]
33180 mem_0_2_0 := mem_0_2.Args[0]
33181 if mem_0_2_0.Op != OpOffPtr {
33182 break
33183 }
33184 tt3 := mem_0_2_0.Type
33185 o3 := mem_0_2_0.AuxInt
33186 p3 := mem_0_2_0.Args[0]
33187 d2 := mem_0_2.Args[1]
33188 mem_0_2_2 := mem_0_2.Args[2]
33189 if mem_0_2_2.Op != OpZero {
33190 break
33191 }
33192 if mem_0_2_2.AuxInt != n {
33193 break
33194 }
33195 t4 := mem_0_2_2.Aux
33196 _ = mem_0_2_2.Args[1]
33197 p4 := mem_0_2_2.Args[0]
33198 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3)) {
33199 break
33200 }
33201 v.reset(OpStore)
33202 v.Aux = t2
33203 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
33204 v0.AuxInt = o2
33205 v0.AddArg(dst)
33206 v.AddArg(v0)
33207 v.AddArg(d1)
33208 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33209 v1.Aux = t3
33210 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
33211 v2.AuxInt = o3
33212 v2.AddArg(dst)
33213 v1.AddArg(v2)
33214 v1.AddArg(d2)
33215 v3 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
33216 v3.AuxInt = n
33217 v3.Aux = t1
33218 v3.AddArg(dst)
33219 v3.AddArg(mem)
33220 v1.AddArg(v3)
33221 v.AddArg(v1)
33222 return true
33223 }
33224
33225
33226
33227 for {
33228 n := v.AuxInt
33229 t1 := v.Aux
33230 _ = v.Args[2]
33231 dst := v.Args[0]
33232 p1 := v.Args[1]
33233 mem := v.Args[2]
33234 if mem.Op != OpVarDef {
33235 break
33236 }
33237 mem_0 := mem.Args[0]
33238 if mem_0.Op != OpStore {
33239 break
33240 }
33241 t2 := mem_0.Aux
33242 _ = mem_0.Args[2]
33243 mem_0_0 := mem_0.Args[0]
33244 if mem_0_0.Op != OpOffPtr {
33245 break
33246 }
33247 tt2 := mem_0_0.Type
33248 o2 := mem_0_0.AuxInt
33249 p2 := mem_0_0.Args[0]
33250 d1 := mem_0.Args[1]
33251 mem_0_2 := mem_0.Args[2]
33252 if mem_0_2.Op != OpStore {
33253 break
33254 }
33255 t3 := mem_0_2.Aux
33256 _ = mem_0_2.Args[2]
33257 mem_0_2_0 := mem_0_2.Args[0]
33258 if mem_0_2_0.Op != OpOffPtr {
33259 break
33260 }
33261 tt3 := mem_0_2_0.Type
33262 o3 := mem_0_2_0.AuxInt
33263 p3 := mem_0_2_0.Args[0]
33264 d2 := mem_0_2.Args[1]
33265 mem_0_2_2 := mem_0_2.Args[2]
33266 if mem_0_2_2.Op != OpStore {
33267 break
33268 }
33269 t4 := mem_0_2_2.Aux
33270 _ = mem_0_2_2.Args[2]
33271 mem_0_2_2_0 := mem_0_2_2.Args[0]
33272 if mem_0_2_2_0.Op != OpOffPtr {
33273 break
33274 }
33275 tt4 := mem_0_2_2_0.Type
33276 o4 := mem_0_2_2_0.AuxInt
33277 p4 := mem_0_2_2_0.Args[0]
33278 d3 := mem_0_2_2.Args[1]
33279 mem_0_2_2_2 := mem_0_2_2.Args[2]
33280 if mem_0_2_2_2.Op != OpZero {
33281 break
33282 }
33283 if mem_0_2_2_2.AuxInt != n {
33284 break
33285 }
33286 t5 := mem_0_2_2_2.Aux
33287 _ = mem_0_2_2_2.Args[1]
33288 p5 := mem_0_2_2_2.Args[0]
33289 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3) && n >= o4+sizeof(t4)) {
33290 break
33291 }
33292 v.reset(OpStore)
33293 v.Aux = t2
33294 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
33295 v0.AuxInt = o2
33296 v0.AddArg(dst)
33297 v.AddArg(v0)
33298 v.AddArg(d1)
33299 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33300 v1.Aux = t3
33301 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
33302 v2.AuxInt = o3
33303 v2.AddArg(dst)
33304 v1.AddArg(v2)
33305 v1.AddArg(d2)
33306 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33307 v3.Aux = t4
33308 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
33309 v4.AuxInt = o4
33310 v4.AddArg(dst)
33311 v3.AddArg(v4)
33312 v3.AddArg(d3)
33313 v5 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
33314 v5.AuxInt = n
33315 v5.Aux = t1
33316 v5.AddArg(dst)
33317 v5.AddArg(mem)
33318 v3.AddArg(v5)
33319 v1.AddArg(v3)
33320 v.AddArg(v1)
33321 return true
33322 }
33323 return false
33324 }
33325 func rewriteValuegeneric_OpMove_20(v *Value) bool {
33326 b := v.Block
33327 config := b.Func.Config
33328
33329
33330
33331 for {
33332 n := v.AuxInt
33333 t1 := v.Aux
33334 _ = v.Args[2]
33335 dst := v.Args[0]
33336 p1 := v.Args[1]
33337 mem := v.Args[2]
33338 if mem.Op != OpVarDef {
33339 break
33340 }
33341 mem_0 := mem.Args[0]
33342 if mem_0.Op != OpStore {
33343 break
33344 }
33345 t2 := mem_0.Aux
33346 _ = mem_0.Args[2]
33347 mem_0_0 := mem_0.Args[0]
33348 if mem_0_0.Op != OpOffPtr {
33349 break
33350 }
33351 tt2 := mem_0_0.Type
33352 o2 := mem_0_0.AuxInt
33353 p2 := mem_0_0.Args[0]
33354 d1 := mem_0.Args[1]
33355 mem_0_2 := mem_0.Args[2]
33356 if mem_0_2.Op != OpStore {
33357 break
33358 }
33359 t3 := mem_0_2.Aux
33360 _ = mem_0_2.Args[2]
33361 mem_0_2_0 := mem_0_2.Args[0]
33362 if mem_0_2_0.Op != OpOffPtr {
33363 break
33364 }
33365 tt3 := mem_0_2_0.Type
33366 o3 := mem_0_2_0.AuxInt
33367 p3 := mem_0_2_0.Args[0]
33368 d2 := mem_0_2.Args[1]
33369 mem_0_2_2 := mem_0_2.Args[2]
33370 if mem_0_2_2.Op != OpStore {
33371 break
33372 }
33373 t4 := mem_0_2_2.Aux
33374 _ = mem_0_2_2.Args[2]
33375 mem_0_2_2_0 := mem_0_2_2.Args[0]
33376 if mem_0_2_2_0.Op != OpOffPtr {
33377 break
33378 }
33379 tt4 := mem_0_2_2_0.Type
33380 o4 := mem_0_2_2_0.AuxInt
33381 p4 := mem_0_2_2_0.Args[0]
33382 d3 := mem_0_2_2.Args[1]
33383 mem_0_2_2_2 := mem_0_2_2.Args[2]
33384 if mem_0_2_2_2.Op != OpStore {
33385 break
33386 }
33387 t5 := mem_0_2_2_2.Aux
33388 _ = mem_0_2_2_2.Args[2]
33389 mem_0_2_2_2_0 := mem_0_2_2_2.Args[0]
33390 if mem_0_2_2_2_0.Op != OpOffPtr {
33391 break
33392 }
33393 tt5 := mem_0_2_2_2_0.Type
33394 o5 := mem_0_2_2_2_0.AuxInt
33395 p5 := mem_0_2_2_2_0.Args[0]
33396 d4 := mem_0_2_2_2.Args[1]
33397 mem_0_2_2_2_2 := mem_0_2_2_2.Args[2]
33398 if mem_0_2_2_2_2.Op != OpZero {
33399 break
33400 }
33401 if mem_0_2_2_2_2.AuxInt != n {
33402 break
33403 }
33404 t6 := mem_0_2_2_2_2.Aux
33405 _ = mem_0_2_2_2_2.Args[1]
33406 p6 := mem_0_2_2_2_2.Args[0]
33407 if !(isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && isSamePtr(p5, p6) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && alignof(t6) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && n >= o2+sizeof(t2) && n >= o3+sizeof(t3) && n >= o4+sizeof(t4) && n >= o5+sizeof(t5)) {
33408 break
33409 }
33410 v.reset(OpStore)
33411 v.Aux = t2
33412 v0 := b.NewValue0(v.Pos, OpOffPtr, tt2)
33413 v0.AuxInt = o2
33414 v0.AddArg(dst)
33415 v.AddArg(v0)
33416 v.AddArg(d1)
33417 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33418 v1.Aux = t3
33419 v2 := b.NewValue0(v.Pos, OpOffPtr, tt3)
33420 v2.AuxInt = o3
33421 v2.AddArg(dst)
33422 v1.AddArg(v2)
33423 v1.AddArg(d2)
33424 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33425 v3.Aux = t4
33426 v4 := b.NewValue0(v.Pos, OpOffPtr, tt4)
33427 v4.AuxInt = o4
33428 v4.AddArg(dst)
33429 v3.AddArg(v4)
33430 v3.AddArg(d3)
33431 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
33432 v5.Aux = t5
33433 v6 := b.NewValue0(v.Pos, OpOffPtr, tt5)
33434 v6.AuxInt = o5
33435 v6.AddArg(dst)
33436 v5.AddArg(v6)
33437 v5.AddArg(d4)
33438 v7 := b.NewValue0(v.Pos, OpZero, types.TypeMem)
33439 v7.AuxInt = n
33440 v7.Aux = t1
33441 v7.AddArg(dst)
33442 v7.AddArg(mem)
33443 v5.AddArg(v7)
33444 v3.AddArg(v5)
33445 v1.AddArg(v3)
33446 v.AddArg(v1)
33447 return true
33448 }
33449
33450
33451
33452 for {
33453 s := v.AuxInt
33454 t1 := v.Aux
33455 _ = v.Args[2]
33456 dst := v.Args[0]
33457 tmp1 := v.Args[1]
33458 midmem := v.Args[2]
33459 if midmem.Op != OpMove {
33460 break
33461 }
33462 if midmem.AuxInt != s {
33463 break
33464 }
33465 t2 := midmem.Aux
33466 _ = midmem.Args[2]
33467 tmp2 := midmem.Args[0]
33468 src := midmem.Args[1]
33469 if !(t1.(*types.Type).Compare(t2.(*types.Type)) == types.CMPeq && isSamePtr(tmp1, tmp2) && isStackPtr(src) && disjoint(src, s, tmp2, s) && (disjoint(src, s, dst, s) || isInlinableMemmove(dst, src, s, config))) {
33470 break
33471 }
33472 v.reset(OpMove)
33473 v.AuxInt = s
33474 v.Aux = t1
33475 v.AddArg(dst)
33476 v.AddArg(src)
33477 v.AddArg(midmem)
33478 return true
33479 }
33480
33481
33482
33483 for {
33484 s := v.AuxInt
33485 t1 := v.Aux
33486 _ = v.Args[2]
33487 dst := v.Args[0]
33488 tmp1 := v.Args[1]
33489 midmem := v.Args[2]
33490 if midmem.Op != OpVarDef {
33491 break
33492 }
33493 midmem_0 := midmem.Args[0]
33494 if midmem_0.Op != OpMove {
33495 break
33496 }
33497 if midmem_0.AuxInt != s {
33498 break
33499 }
33500 t2 := midmem_0.Aux
33501 _ = midmem_0.Args[2]
33502 tmp2 := midmem_0.Args[0]
33503 src := midmem_0.Args[1]
33504 if !(t1.(*types.Type).Compare(t2.(*types.Type)) == types.CMPeq && isSamePtr(tmp1, tmp2) && isStackPtr(src) && disjoint(src, s, tmp2, s) && (disjoint(src, s, dst, s) || isInlinableMemmove(dst, src, s, config))) {
33505 break
33506 }
33507 v.reset(OpMove)
33508 v.AuxInt = s
33509 v.Aux = t1
33510 v.AddArg(dst)
33511 v.AddArg(src)
33512 v.AddArg(midmem)
33513 return true
33514 }
33515
33516
33517
33518 for {
33519 mem := v.Args[2]
33520 dst := v.Args[0]
33521 src := v.Args[1]
33522 if !(isSamePtr(dst, src)) {
33523 break
33524 }
33525 v.reset(OpCopy)
33526 v.Type = mem.Type
33527 v.AddArg(mem)
33528 return true
33529 }
33530 return false
33531 }
33532 func rewriteValuegeneric_OpMul16_0(v *Value) bool {
33533 b := v.Block
33534 typ := &b.Func.Config.Types
33535
33536
33537
33538 for {
33539 _ = v.Args[1]
33540 v_0 := v.Args[0]
33541 if v_0.Op != OpConst16 {
33542 break
33543 }
33544 c := v_0.AuxInt
33545 v_1 := v.Args[1]
33546 if v_1.Op != OpConst16 {
33547 break
33548 }
33549 d := v_1.AuxInt
33550 v.reset(OpConst16)
33551 v.AuxInt = int64(int16(c * d))
33552 return true
33553 }
33554
33555
33556
33557 for {
33558 _ = v.Args[1]
33559 v_0 := v.Args[0]
33560 if v_0.Op != OpConst16 {
33561 break
33562 }
33563 d := v_0.AuxInt
33564 v_1 := v.Args[1]
33565 if v_1.Op != OpConst16 {
33566 break
33567 }
33568 c := v_1.AuxInt
33569 v.reset(OpConst16)
33570 v.AuxInt = int64(int16(c * d))
33571 return true
33572 }
33573
33574
33575
33576 for {
33577 x := v.Args[1]
33578 v_0 := v.Args[0]
33579 if v_0.Op != OpConst16 {
33580 break
33581 }
33582 if v_0.AuxInt != 1 {
33583 break
33584 }
33585 v.reset(OpCopy)
33586 v.Type = x.Type
33587 v.AddArg(x)
33588 return true
33589 }
33590
33591
33592
33593 for {
33594 _ = v.Args[1]
33595 x := v.Args[0]
33596 v_1 := v.Args[1]
33597 if v_1.Op != OpConst16 {
33598 break
33599 }
33600 if v_1.AuxInt != 1 {
33601 break
33602 }
33603 v.reset(OpCopy)
33604 v.Type = x.Type
33605 v.AddArg(x)
33606 return true
33607 }
33608
33609
33610
33611 for {
33612 x := v.Args[1]
33613 v_0 := v.Args[0]
33614 if v_0.Op != OpConst16 {
33615 break
33616 }
33617 if v_0.AuxInt != -1 {
33618 break
33619 }
33620 v.reset(OpNeg16)
33621 v.AddArg(x)
33622 return true
33623 }
33624
33625
33626
33627 for {
33628 _ = v.Args[1]
33629 x := v.Args[0]
33630 v_1 := v.Args[1]
33631 if v_1.Op != OpConst16 {
33632 break
33633 }
33634 if v_1.AuxInt != -1 {
33635 break
33636 }
33637 v.reset(OpNeg16)
33638 v.AddArg(x)
33639 return true
33640 }
33641
33642
33643
33644 for {
33645 t := v.Type
33646 _ = v.Args[1]
33647 n := v.Args[0]
33648 v_1 := v.Args[1]
33649 if v_1.Op != OpConst16 {
33650 break
33651 }
33652 c := v_1.AuxInt
33653 if !(isPowerOfTwo(c)) {
33654 break
33655 }
33656 v.reset(OpLsh16x64)
33657 v.Type = t
33658 v.AddArg(n)
33659 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
33660 v0.AuxInt = log2(c)
33661 v.AddArg(v0)
33662 return true
33663 }
33664
33665
33666
33667 for {
33668 t := v.Type
33669 n := v.Args[1]
33670 v_0 := v.Args[0]
33671 if v_0.Op != OpConst16 {
33672 break
33673 }
33674 c := v_0.AuxInt
33675 if !(isPowerOfTwo(c)) {
33676 break
33677 }
33678 v.reset(OpLsh16x64)
33679 v.Type = t
33680 v.AddArg(n)
33681 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
33682 v0.AuxInt = log2(c)
33683 v.AddArg(v0)
33684 return true
33685 }
33686
33687
33688
33689 for {
33690 t := v.Type
33691 _ = v.Args[1]
33692 n := v.Args[0]
33693 v_1 := v.Args[1]
33694 if v_1.Op != OpConst16 {
33695 break
33696 }
33697 c := v_1.AuxInt
33698 if !(t.IsSigned() && isPowerOfTwo(-c)) {
33699 break
33700 }
33701 v.reset(OpNeg16)
33702 v0 := b.NewValue0(v.Pos, OpLsh16x64, t)
33703 v0.AddArg(n)
33704 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
33705 v1.AuxInt = log2(-c)
33706 v0.AddArg(v1)
33707 v.AddArg(v0)
33708 return true
33709 }
33710
33711
33712
33713 for {
33714 t := v.Type
33715 n := v.Args[1]
33716 v_0 := v.Args[0]
33717 if v_0.Op != OpConst16 {
33718 break
33719 }
33720 c := v_0.AuxInt
33721 if !(t.IsSigned() && isPowerOfTwo(-c)) {
33722 break
33723 }
33724 v.reset(OpNeg16)
33725 v0 := b.NewValue0(v.Pos, OpLsh16x64, t)
33726 v0.AddArg(n)
33727 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
33728 v1.AuxInt = log2(-c)
33729 v0.AddArg(v1)
33730 v.AddArg(v0)
33731 return true
33732 }
33733 return false
33734 }
33735 func rewriteValuegeneric_OpMul16_10(v *Value) bool {
33736 b := v.Block
33737
33738
33739
33740 for {
33741 _ = v.Args[1]
33742 v_0 := v.Args[0]
33743 if v_0.Op != OpConst16 {
33744 break
33745 }
33746 if v_0.AuxInt != 0 {
33747 break
33748 }
33749 v.reset(OpConst16)
33750 v.AuxInt = 0
33751 return true
33752 }
33753
33754
33755
33756 for {
33757 _ = v.Args[1]
33758 v_1 := v.Args[1]
33759 if v_1.Op != OpConst16 {
33760 break
33761 }
33762 if v_1.AuxInt != 0 {
33763 break
33764 }
33765 v.reset(OpConst16)
33766 v.AuxInt = 0
33767 return true
33768 }
33769
33770
33771
33772 for {
33773 _ = v.Args[1]
33774 v_0 := v.Args[0]
33775 if v_0.Op != OpConst16 {
33776 break
33777 }
33778 t := v_0.Type
33779 c := v_0.AuxInt
33780 v_1 := v.Args[1]
33781 if v_1.Op != OpMul16 {
33782 break
33783 }
33784 x := v_1.Args[1]
33785 v_1_0 := v_1.Args[0]
33786 if v_1_0.Op != OpConst16 {
33787 break
33788 }
33789 if v_1_0.Type != t {
33790 break
33791 }
33792 d := v_1_0.AuxInt
33793 v.reset(OpMul16)
33794 v0 := b.NewValue0(v.Pos, OpConst16, t)
33795 v0.AuxInt = int64(int16(c * d))
33796 v.AddArg(v0)
33797 v.AddArg(x)
33798 return true
33799 }
33800
33801
33802
33803 for {
33804 _ = v.Args[1]
33805 v_0 := v.Args[0]
33806 if v_0.Op != OpConst16 {
33807 break
33808 }
33809 t := v_0.Type
33810 c := v_0.AuxInt
33811 v_1 := v.Args[1]
33812 if v_1.Op != OpMul16 {
33813 break
33814 }
33815 _ = v_1.Args[1]
33816 x := v_1.Args[0]
33817 v_1_1 := v_1.Args[1]
33818 if v_1_1.Op != OpConst16 {
33819 break
33820 }
33821 if v_1_1.Type != t {
33822 break
33823 }
33824 d := v_1_1.AuxInt
33825 v.reset(OpMul16)
33826 v0 := b.NewValue0(v.Pos, OpConst16, t)
33827 v0.AuxInt = int64(int16(c * d))
33828 v.AddArg(v0)
33829 v.AddArg(x)
33830 return true
33831 }
33832
33833
33834
33835 for {
33836 _ = v.Args[1]
33837 v_0 := v.Args[0]
33838 if v_0.Op != OpMul16 {
33839 break
33840 }
33841 x := v_0.Args[1]
33842 v_0_0 := v_0.Args[0]
33843 if v_0_0.Op != OpConst16 {
33844 break
33845 }
33846 t := v_0_0.Type
33847 d := v_0_0.AuxInt
33848 v_1 := v.Args[1]
33849 if v_1.Op != OpConst16 {
33850 break
33851 }
33852 if v_1.Type != t {
33853 break
33854 }
33855 c := v_1.AuxInt
33856 v.reset(OpMul16)
33857 v0 := b.NewValue0(v.Pos, OpConst16, t)
33858 v0.AuxInt = int64(int16(c * d))
33859 v.AddArg(v0)
33860 v.AddArg(x)
33861 return true
33862 }
33863
33864
33865
33866 for {
33867 _ = v.Args[1]
33868 v_0 := v.Args[0]
33869 if v_0.Op != OpMul16 {
33870 break
33871 }
33872 _ = v_0.Args[1]
33873 x := v_0.Args[0]
33874 v_0_1 := v_0.Args[1]
33875 if v_0_1.Op != OpConst16 {
33876 break
33877 }
33878 t := v_0_1.Type
33879 d := v_0_1.AuxInt
33880 v_1 := v.Args[1]
33881 if v_1.Op != OpConst16 {
33882 break
33883 }
33884 if v_1.Type != t {
33885 break
33886 }
33887 c := v_1.AuxInt
33888 v.reset(OpMul16)
33889 v0 := b.NewValue0(v.Pos, OpConst16, t)
33890 v0.AuxInt = int64(int16(c * d))
33891 v.AddArg(v0)
33892 v.AddArg(x)
33893 return true
33894 }
33895 return false
33896 }
33897 func rewriteValuegeneric_OpMul32_0(v *Value) bool {
33898 b := v.Block
33899 typ := &b.Func.Config.Types
33900
33901
33902
33903 for {
33904 _ = v.Args[1]
33905 v_0 := v.Args[0]
33906 if v_0.Op != OpConst32 {
33907 break
33908 }
33909 c := v_0.AuxInt
33910 v_1 := v.Args[1]
33911 if v_1.Op != OpConst32 {
33912 break
33913 }
33914 d := v_1.AuxInt
33915 v.reset(OpConst32)
33916 v.AuxInt = int64(int32(c * d))
33917 return true
33918 }
33919
33920
33921
33922 for {
33923 _ = v.Args[1]
33924 v_0 := v.Args[0]
33925 if v_0.Op != OpConst32 {
33926 break
33927 }
33928 d := v_0.AuxInt
33929 v_1 := v.Args[1]
33930 if v_1.Op != OpConst32 {
33931 break
33932 }
33933 c := v_1.AuxInt
33934 v.reset(OpConst32)
33935 v.AuxInt = int64(int32(c * d))
33936 return true
33937 }
33938
33939
33940
33941 for {
33942 x := v.Args[1]
33943 v_0 := v.Args[0]
33944 if v_0.Op != OpConst32 {
33945 break
33946 }
33947 if v_0.AuxInt != 1 {
33948 break
33949 }
33950 v.reset(OpCopy)
33951 v.Type = x.Type
33952 v.AddArg(x)
33953 return true
33954 }
33955
33956
33957
33958 for {
33959 _ = v.Args[1]
33960 x := v.Args[0]
33961 v_1 := v.Args[1]
33962 if v_1.Op != OpConst32 {
33963 break
33964 }
33965 if v_1.AuxInt != 1 {
33966 break
33967 }
33968 v.reset(OpCopy)
33969 v.Type = x.Type
33970 v.AddArg(x)
33971 return true
33972 }
33973
33974
33975
33976 for {
33977 x := v.Args[1]
33978 v_0 := v.Args[0]
33979 if v_0.Op != OpConst32 {
33980 break
33981 }
33982 if v_0.AuxInt != -1 {
33983 break
33984 }
33985 v.reset(OpNeg32)
33986 v.AddArg(x)
33987 return true
33988 }
33989
33990
33991
33992 for {
33993 _ = v.Args[1]
33994 x := v.Args[0]
33995 v_1 := v.Args[1]
33996 if v_1.Op != OpConst32 {
33997 break
33998 }
33999 if v_1.AuxInt != -1 {
34000 break
34001 }
34002 v.reset(OpNeg32)
34003 v.AddArg(x)
34004 return true
34005 }
34006
34007
34008
34009 for {
34010 t := v.Type
34011 _ = v.Args[1]
34012 n := v.Args[0]
34013 v_1 := v.Args[1]
34014 if v_1.Op != OpConst32 {
34015 break
34016 }
34017 c := v_1.AuxInt
34018 if !(isPowerOfTwo(c)) {
34019 break
34020 }
34021 v.reset(OpLsh32x64)
34022 v.Type = t
34023 v.AddArg(n)
34024 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34025 v0.AuxInt = log2(c)
34026 v.AddArg(v0)
34027 return true
34028 }
34029
34030
34031
34032 for {
34033 t := v.Type
34034 n := v.Args[1]
34035 v_0 := v.Args[0]
34036 if v_0.Op != OpConst32 {
34037 break
34038 }
34039 c := v_0.AuxInt
34040 if !(isPowerOfTwo(c)) {
34041 break
34042 }
34043 v.reset(OpLsh32x64)
34044 v.Type = t
34045 v.AddArg(n)
34046 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34047 v0.AuxInt = log2(c)
34048 v.AddArg(v0)
34049 return true
34050 }
34051
34052
34053
34054 for {
34055 t := v.Type
34056 _ = v.Args[1]
34057 n := v.Args[0]
34058 v_1 := v.Args[1]
34059 if v_1.Op != OpConst32 {
34060 break
34061 }
34062 c := v_1.AuxInt
34063 if !(t.IsSigned() && isPowerOfTwo(-c)) {
34064 break
34065 }
34066 v.reset(OpNeg32)
34067 v0 := b.NewValue0(v.Pos, OpLsh32x64, t)
34068 v0.AddArg(n)
34069 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34070 v1.AuxInt = log2(-c)
34071 v0.AddArg(v1)
34072 v.AddArg(v0)
34073 return true
34074 }
34075
34076
34077
34078 for {
34079 t := v.Type
34080 n := v.Args[1]
34081 v_0 := v.Args[0]
34082 if v_0.Op != OpConst32 {
34083 break
34084 }
34085 c := v_0.AuxInt
34086 if !(t.IsSigned() && isPowerOfTwo(-c)) {
34087 break
34088 }
34089 v.reset(OpNeg32)
34090 v0 := b.NewValue0(v.Pos, OpLsh32x64, t)
34091 v0.AddArg(n)
34092 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34093 v1.AuxInt = log2(-c)
34094 v0.AddArg(v1)
34095 v.AddArg(v0)
34096 return true
34097 }
34098 return false
34099 }
34100 func rewriteValuegeneric_OpMul32_10(v *Value) bool {
34101 b := v.Block
34102
34103
34104
34105 for {
34106 _ = v.Args[1]
34107 v_0 := v.Args[0]
34108 if v_0.Op != OpConst32 {
34109 break
34110 }
34111 t := v_0.Type
34112 c := v_0.AuxInt
34113 v_1 := v.Args[1]
34114 if v_1.Op != OpAdd32 {
34115 break
34116 }
34117 if v_1.Type != t {
34118 break
34119 }
34120 x := v_1.Args[1]
34121 v_1_0 := v_1.Args[0]
34122 if v_1_0.Op != OpConst32 {
34123 break
34124 }
34125 if v_1_0.Type != t {
34126 break
34127 }
34128 d := v_1_0.AuxInt
34129 v.reset(OpAdd32)
34130 v0 := b.NewValue0(v.Pos, OpConst32, t)
34131 v0.AuxInt = int64(int32(c * d))
34132 v.AddArg(v0)
34133 v1 := b.NewValue0(v.Pos, OpMul32, t)
34134 v2 := b.NewValue0(v.Pos, OpConst32, t)
34135 v2.AuxInt = c
34136 v1.AddArg(v2)
34137 v1.AddArg(x)
34138 v.AddArg(v1)
34139 return true
34140 }
34141
34142
34143
34144 for {
34145 _ = v.Args[1]
34146 v_0 := v.Args[0]
34147 if v_0.Op != OpConst32 {
34148 break
34149 }
34150 t := v_0.Type
34151 c := v_0.AuxInt
34152 v_1 := v.Args[1]
34153 if v_1.Op != OpAdd32 {
34154 break
34155 }
34156 if v_1.Type != t {
34157 break
34158 }
34159 _ = v_1.Args[1]
34160 x := v_1.Args[0]
34161 v_1_1 := v_1.Args[1]
34162 if v_1_1.Op != OpConst32 {
34163 break
34164 }
34165 if v_1_1.Type != t {
34166 break
34167 }
34168 d := v_1_1.AuxInt
34169 v.reset(OpAdd32)
34170 v0 := b.NewValue0(v.Pos, OpConst32, t)
34171 v0.AuxInt = int64(int32(c * d))
34172 v.AddArg(v0)
34173 v1 := b.NewValue0(v.Pos, OpMul32, t)
34174 v2 := b.NewValue0(v.Pos, OpConst32, t)
34175 v2.AuxInt = c
34176 v1.AddArg(v2)
34177 v1.AddArg(x)
34178 v.AddArg(v1)
34179 return true
34180 }
34181
34182
34183
34184 for {
34185 _ = v.Args[1]
34186 v_0 := v.Args[0]
34187 if v_0.Op != OpAdd32 {
34188 break
34189 }
34190 t := v_0.Type
34191 x := v_0.Args[1]
34192 v_0_0 := v_0.Args[0]
34193 if v_0_0.Op != OpConst32 {
34194 break
34195 }
34196 if v_0_0.Type != t {
34197 break
34198 }
34199 d := v_0_0.AuxInt
34200 v_1 := v.Args[1]
34201 if v_1.Op != OpConst32 {
34202 break
34203 }
34204 if v_1.Type != t {
34205 break
34206 }
34207 c := v_1.AuxInt
34208 v.reset(OpAdd32)
34209 v0 := b.NewValue0(v.Pos, OpConst32, t)
34210 v0.AuxInt = int64(int32(c * d))
34211 v.AddArg(v0)
34212 v1 := b.NewValue0(v.Pos, OpMul32, t)
34213 v2 := b.NewValue0(v.Pos, OpConst32, t)
34214 v2.AuxInt = c
34215 v1.AddArg(v2)
34216 v1.AddArg(x)
34217 v.AddArg(v1)
34218 return true
34219 }
34220
34221
34222
34223 for {
34224 _ = v.Args[1]
34225 v_0 := v.Args[0]
34226 if v_0.Op != OpAdd32 {
34227 break
34228 }
34229 t := v_0.Type
34230 _ = v_0.Args[1]
34231 x := v_0.Args[0]
34232 v_0_1 := v_0.Args[1]
34233 if v_0_1.Op != OpConst32 {
34234 break
34235 }
34236 if v_0_1.Type != t {
34237 break
34238 }
34239 d := v_0_1.AuxInt
34240 v_1 := v.Args[1]
34241 if v_1.Op != OpConst32 {
34242 break
34243 }
34244 if v_1.Type != t {
34245 break
34246 }
34247 c := v_1.AuxInt
34248 v.reset(OpAdd32)
34249 v0 := b.NewValue0(v.Pos, OpConst32, t)
34250 v0.AuxInt = int64(int32(c * d))
34251 v.AddArg(v0)
34252 v1 := b.NewValue0(v.Pos, OpMul32, t)
34253 v2 := b.NewValue0(v.Pos, OpConst32, t)
34254 v2.AuxInt = c
34255 v1.AddArg(v2)
34256 v1.AddArg(x)
34257 v.AddArg(v1)
34258 return true
34259 }
34260
34261
34262
34263 for {
34264 _ = v.Args[1]
34265 v_0 := v.Args[0]
34266 if v_0.Op != OpConst32 {
34267 break
34268 }
34269 if v_0.AuxInt != 0 {
34270 break
34271 }
34272 v.reset(OpConst32)
34273 v.AuxInt = 0
34274 return true
34275 }
34276
34277
34278
34279 for {
34280 _ = v.Args[1]
34281 v_1 := v.Args[1]
34282 if v_1.Op != OpConst32 {
34283 break
34284 }
34285 if v_1.AuxInt != 0 {
34286 break
34287 }
34288 v.reset(OpConst32)
34289 v.AuxInt = 0
34290 return true
34291 }
34292
34293
34294
34295 for {
34296 _ = v.Args[1]
34297 v_0 := v.Args[0]
34298 if v_0.Op != OpConst32 {
34299 break
34300 }
34301 t := v_0.Type
34302 c := v_0.AuxInt
34303 v_1 := v.Args[1]
34304 if v_1.Op != OpMul32 {
34305 break
34306 }
34307 x := v_1.Args[1]
34308 v_1_0 := v_1.Args[0]
34309 if v_1_0.Op != OpConst32 {
34310 break
34311 }
34312 if v_1_0.Type != t {
34313 break
34314 }
34315 d := v_1_0.AuxInt
34316 v.reset(OpMul32)
34317 v0 := b.NewValue0(v.Pos, OpConst32, t)
34318 v0.AuxInt = int64(int32(c * d))
34319 v.AddArg(v0)
34320 v.AddArg(x)
34321 return true
34322 }
34323
34324
34325
34326 for {
34327 _ = v.Args[1]
34328 v_0 := v.Args[0]
34329 if v_0.Op != OpConst32 {
34330 break
34331 }
34332 t := v_0.Type
34333 c := v_0.AuxInt
34334 v_1 := v.Args[1]
34335 if v_1.Op != OpMul32 {
34336 break
34337 }
34338 _ = v_1.Args[1]
34339 x := v_1.Args[0]
34340 v_1_1 := v_1.Args[1]
34341 if v_1_1.Op != OpConst32 {
34342 break
34343 }
34344 if v_1_1.Type != t {
34345 break
34346 }
34347 d := v_1_1.AuxInt
34348 v.reset(OpMul32)
34349 v0 := b.NewValue0(v.Pos, OpConst32, t)
34350 v0.AuxInt = int64(int32(c * d))
34351 v.AddArg(v0)
34352 v.AddArg(x)
34353 return true
34354 }
34355
34356
34357
34358 for {
34359 _ = v.Args[1]
34360 v_0 := v.Args[0]
34361 if v_0.Op != OpMul32 {
34362 break
34363 }
34364 x := v_0.Args[1]
34365 v_0_0 := v_0.Args[0]
34366 if v_0_0.Op != OpConst32 {
34367 break
34368 }
34369 t := v_0_0.Type
34370 d := v_0_0.AuxInt
34371 v_1 := v.Args[1]
34372 if v_1.Op != OpConst32 {
34373 break
34374 }
34375 if v_1.Type != t {
34376 break
34377 }
34378 c := v_1.AuxInt
34379 v.reset(OpMul32)
34380 v0 := b.NewValue0(v.Pos, OpConst32, t)
34381 v0.AuxInt = int64(int32(c * d))
34382 v.AddArg(v0)
34383 v.AddArg(x)
34384 return true
34385 }
34386
34387
34388
34389 for {
34390 _ = v.Args[1]
34391 v_0 := v.Args[0]
34392 if v_0.Op != OpMul32 {
34393 break
34394 }
34395 _ = v_0.Args[1]
34396 x := v_0.Args[0]
34397 v_0_1 := v_0.Args[1]
34398 if v_0_1.Op != OpConst32 {
34399 break
34400 }
34401 t := v_0_1.Type
34402 d := v_0_1.AuxInt
34403 v_1 := v.Args[1]
34404 if v_1.Op != OpConst32 {
34405 break
34406 }
34407 if v_1.Type != t {
34408 break
34409 }
34410 c := v_1.AuxInt
34411 v.reset(OpMul32)
34412 v0 := b.NewValue0(v.Pos, OpConst32, t)
34413 v0.AuxInt = int64(int32(c * d))
34414 v.AddArg(v0)
34415 v.AddArg(x)
34416 return true
34417 }
34418 return false
34419 }
34420 func rewriteValuegeneric_OpMul32F_0(v *Value) bool {
34421
34422
34423
34424 for {
34425 _ = v.Args[1]
34426 v_0 := v.Args[0]
34427 if v_0.Op != OpConst32F {
34428 break
34429 }
34430 c := v_0.AuxInt
34431 v_1 := v.Args[1]
34432 if v_1.Op != OpConst32F {
34433 break
34434 }
34435 d := v_1.AuxInt
34436 v.reset(OpConst32F)
34437 v.AuxInt = auxFrom32F(auxTo32F(c) * auxTo32F(d))
34438 return true
34439 }
34440
34441
34442
34443 for {
34444 _ = v.Args[1]
34445 v_0 := v.Args[0]
34446 if v_0.Op != OpConst32F {
34447 break
34448 }
34449 d := v_0.AuxInt
34450 v_1 := v.Args[1]
34451 if v_1.Op != OpConst32F {
34452 break
34453 }
34454 c := v_1.AuxInt
34455 v.reset(OpConst32F)
34456 v.AuxInt = auxFrom32F(auxTo32F(c) * auxTo32F(d))
34457 return true
34458 }
34459
34460
34461
34462 for {
34463 _ = v.Args[1]
34464 x := v.Args[0]
34465 v_1 := v.Args[1]
34466 if v_1.Op != OpConst32F {
34467 break
34468 }
34469 if v_1.AuxInt != auxFrom64F(1) {
34470 break
34471 }
34472 v.reset(OpCopy)
34473 v.Type = x.Type
34474 v.AddArg(x)
34475 return true
34476 }
34477
34478
34479
34480 for {
34481 x := v.Args[1]
34482 v_0 := v.Args[0]
34483 if v_0.Op != OpConst32F {
34484 break
34485 }
34486 if v_0.AuxInt != auxFrom64F(1) {
34487 break
34488 }
34489 v.reset(OpCopy)
34490 v.Type = x.Type
34491 v.AddArg(x)
34492 return true
34493 }
34494
34495
34496
34497 for {
34498 _ = v.Args[1]
34499 x := v.Args[0]
34500 v_1 := v.Args[1]
34501 if v_1.Op != OpConst32F {
34502 break
34503 }
34504 if v_1.AuxInt != auxFrom32F(-1) {
34505 break
34506 }
34507 v.reset(OpNeg32F)
34508 v.AddArg(x)
34509 return true
34510 }
34511
34512
34513
34514 for {
34515 x := v.Args[1]
34516 v_0 := v.Args[0]
34517 if v_0.Op != OpConst32F {
34518 break
34519 }
34520 if v_0.AuxInt != auxFrom32F(-1) {
34521 break
34522 }
34523 v.reset(OpNeg32F)
34524 v.AddArg(x)
34525 return true
34526 }
34527
34528
34529
34530 for {
34531 _ = v.Args[1]
34532 x := v.Args[0]
34533 v_1 := v.Args[1]
34534 if v_1.Op != OpConst32F {
34535 break
34536 }
34537 if v_1.AuxInt != auxFrom32F(2) {
34538 break
34539 }
34540 v.reset(OpAdd32F)
34541 v.AddArg(x)
34542 v.AddArg(x)
34543 return true
34544 }
34545
34546
34547
34548 for {
34549 x := v.Args[1]
34550 v_0 := v.Args[0]
34551 if v_0.Op != OpConst32F {
34552 break
34553 }
34554 if v_0.AuxInt != auxFrom32F(2) {
34555 break
34556 }
34557 v.reset(OpAdd32F)
34558 v.AddArg(x)
34559 v.AddArg(x)
34560 return true
34561 }
34562 return false
34563 }
34564 func rewriteValuegeneric_OpMul64_0(v *Value) bool {
34565 b := v.Block
34566 typ := &b.Func.Config.Types
34567
34568
34569
34570 for {
34571 _ = v.Args[1]
34572 v_0 := v.Args[0]
34573 if v_0.Op != OpConst64 {
34574 break
34575 }
34576 c := v_0.AuxInt
34577 v_1 := v.Args[1]
34578 if v_1.Op != OpConst64 {
34579 break
34580 }
34581 d := v_1.AuxInt
34582 v.reset(OpConst64)
34583 v.AuxInt = c * d
34584 return true
34585 }
34586
34587
34588
34589 for {
34590 _ = v.Args[1]
34591 v_0 := v.Args[0]
34592 if v_0.Op != OpConst64 {
34593 break
34594 }
34595 d := v_0.AuxInt
34596 v_1 := v.Args[1]
34597 if v_1.Op != OpConst64 {
34598 break
34599 }
34600 c := v_1.AuxInt
34601 v.reset(OpConst64)
34602 v.AuxInt = c * d
34603 return true
34604 }
34605
34606
34607
34608 for {
34609 x := v.Args[1]
34610 v_0 := v.Args[0]
34611 if v_0.Op != OpConst64 {
34612 break
34613 }
34614 if v_0.AuxInt != 1 {
34615 break
34616 }
34617 v.reset(OpCopy)
34618 v.Type = x.Type
34619 v.AddArg(x)
34620 return true
34621 }
34622
34623
34624
34625 for {
34626 _ = v.Args[1]
34627 x := v.Args[0]
34628 v_1 := v.Args[1]
34629 if v_1.Op != OpConst64 {
34630 break
34631 }
34632 if v_1.AuxInt != 1 {
34633 break
34634 }
34635 v.reset(OpCopy)
34636 v.Type = x.Type
34637 v.AddArg(x)
34638 return true
34639 }
34640
34641
34642
34643 for {
34644 x := v.Args[1]
34645 v_0 := v.Args[0]
34646 if v_0.Op != OpConst64 {
34647 break
34648 }
34649 if v_0.AuxInt != -1 {
34650 break
34651 }
34652 v.reset(OpNeg64)
34653 v.AddArg(x)
34654 return true
34655 }
34656
34657
34658
34659 for {
34660 _ = v.Args[1]
34661 x := v.Args[0]
34662 v_1 := v.Args[1]
34663 if v_1.Op != OpConst64 {
34664 break
34665 }
34666 if v_1.AuxInt != -1 {
34667 break
34668 }
34669 v.reset(OpNeg64)
34670 v.AddArg(x)
34671 return true
34672 }
34673
34674
34675
34676 for {
34677 t := v.Type
34678 _ = v.Args[1]
34679 n := v.Args[0]
34680 v_1 := v.Args[1]
34681 if v_1.Op != OpConst64 {
34682 break
34683 }
34684 c := v_1.AuxInt
34685 if !(isPowerOfTwo(c)) {
34686 break
34687 }
34688 v.reset(OpLsh64x64)
34689 v.Type = t
34690 v.AddArg(n)
34691 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34692 v0.AuxInt = log2(c)
34693 v.AddArg(v0)
34694 return true
34695 }
34696
34697
34698
34699 for {
34700 t := v.Type
34701 n := v.Args[1]
34702 v_0 := v.Args[0]
34703 if v_0.Op != OpConst64 {
34704 break
34705 }
34706 c := v_0.AuxInt
34707 if !(isPowerOfTwo(c)) {
34708 break
34709 }
34710 v.reset(OpLsh64x64)
34711 v.Type = t
34712 v.AddArg(n)
34713 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34714 v0.AuxInt = log2(c)
34715 v.AddArg(v0)
34716 return true
34717 }
34718
34719
34720
34721 for {
34722 t := v.Type
34723 _ = v.Args[1]
34724 n := v.Args[0]
34725 v_1 := v.Args[1]
34726 if v_1.Op != OpConst64 {
34727 break
34728 }
34729 c := v_1.AuxInt
34730 if !(t.IsSigned() && isPowerOfTwo(-c)) {
34731 break
34732 }
34733 v.reset(OpNeg64)
34734 v0 := b.NewValue0(v.Pos, OpLsh64x64, t)
34735 v0.AddArg(n)
34736 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34737 v1.AuxInt = log2(-c)
34738 v0.AddArg(v1)
34739 v.AddArg(v0)
34740 return true
34741 }
34742
34743
34744
34745 for {
34746 t := v.Type
34747 n := v.Args[1]
34748 v_0 := v.Args[0]
34749 if v_0.Op != OpConst64 {
34750 break
34751 }
34752 c := v_0.AuxInt
34753 if !(t.IsSigned() && isPowerOfTwo(-c)) {
34754 break
34755 }
34756 v.reset(OpNeg64)
34757 v0 := b.NewValue0(v.Pos, OpLsh64x64, t)
34758 v0.AddArg(n)
34759 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
34760 v1.AuxInt = log2(-c)
34761 v0.AddArg(v1)
34762 v.AddArg(v0)
34763 return true
34764 }
34765 return false
34766 }
34767 func rewriteValuegeneric_OpMul64_10(v *Value) bool {
34768 b := v.Block
34769
34770
34771
34772 for {
34773 _ = v.Args[1]
34774 v_0 := v.Args[0]
34775 if v_0.Op != OpConst64 {
34776 break
34777 }
34778 t := v_0.Type
34779 c := v_0.AuxInt
34780 v_1 := v.Args[1]
34781 if v_1.Op != OpAdd64 {
34782 break
34783 }
34784 if v_1.Type != t {
34785 break
34786 }
34787 x := v_1.Args[1]
34788 v_1_0 := v_1.Args[0]
34789 if v_1_0.Op != OpConst64 {
34790 break
34791 }
34792 if v_1_0.Type != t {
34793 break
34794 }
34795 d := v_1_0.AuxInt
34796 v.reset(OpAdd64)
34797 v0 := b.NewValue0(v.Pos, OpConst64, t)
34798 v0.AuxInt = c * d
34799 v.AddArg(v0)
34800 v1 := b.NewValue0(v.Pos, OpMul64, t)
34801 v2 := b.NewValue0(v.Pos, OpConst64, t)
34802 v2.AuxInt = c
34803 v1.AddArg(v2)
34804 v1.AddArg(x)
34805 v.AddArg(v1)
34806 return true
34807 }
34808
34809
34810
34811 for {
34812 _ = v.Args[1]
34813 v_0 := v.Args[0]
34814 if v_0.Op != OpConst64 {
34815 break
34816 }
34817 t := v_0.Type
34818 c := v_0.AuxInt
34819 v_1 := v.Args[1]
34820 if v_1.Op != OpAdd64 {
34821 break
34822 }
34823 if v_1.Type != t {
34824 break
34825 }
34826 _ = v_1.Args[1]
34827 x := v_1.Args[0]
34828 v_1_1 := v_1.Args[1]
34829 if v_1_1.Op != OpConst64 {
34830 break
34831 }
34832 if v_1_1.Type != t {
34833 break
34834 }
34835 d := v_1_1.AuxInt
34836 v.reset(OpAdd64)
34837 v0 := b.NewValue0(v.Pos, OpConst64, t)
34838 v0.AuxInt = c * d
34839 v.AddArg(v0)
34840 v1 := b.NewValue0(v.Pos, OpMul64, t)
34841 v2 := b.NewValue0(v.Pos, OpConst64, t)
34842 v2.AuxInt = c
34843 v1.AddArg(v2)
34844 v1.AddArg(x)
34845 v.AddArg(v1)
34846 return true
34847 }
34848
34849
34850
34851 for {
34852 _ = v.Args[1]
34853 v_0 := v.Args[0]
34854 if v_0.Op != OpAdd64 {
34855 break
34856 }
34857 t := v_0.Type
34858 x := v_0.Args[1]
34859 v_0_0 := v_0.Args[0]
34860 if v_0_0.Op != OpConst64 {
34861 break
34862 }
34863 if v_0_0.Type != t {
34864 break
34865 }
34866 d := v_0_0.AuxInt
34867 v_1 := v.Args[1]
34868 if v_1.Op != OpConst64 {
34869 break
34870 }
34871 if v_1.Type != t {
34872 break
34873 }
34874 c := v_1.AuxInt
34875 v.reset(OpAdd64)
34876 v0 := b.NewValue0(v.Pos, OpConst64, t)
34877 v0.AuxInt = c * d
34878 v.AddArg(v0)
34879 v1 := b.NewValue0(v.Pos, OpMul64, t)
34880 v2 := b.NewValue0(v.Pos, OpConst64, t)
34881 v2.AuxInt = c
34882 v1.AddArg(v2)
34883 v1.AddArg(x)
34884 v.AddArg(v1)
34885 return true
34886 }
34887
34888
34889
34890 for {
34891 _ = v.Args[1]
34892 v_0 := v.Args[0]
34893 if v_0.Op != OpAdd64 {
34894 break
34895 }
34896 t := v_0.Type
34897 _ = v_0.Args[1]
34898 x := v_0.Args[0]
34899 v_0_1 := v_0.Args[1]
34900 if v_0_1.Op != OpConst64 {
34901 break
34902 }
34903 if v_0_1.Type != t {
34904 break
34905 }
34906 d := v_0_1.AuxInt
34907 v_1 := v.Args[1]
34908 if v_1.Op != OpConst64 {
34909 break
34910 }
34911 if v_1.Type != t {
34912 break
34913 }
34914 c := v_1.AuxInt
34915 v.reset(OpAdd64)
34916 v0 := b.NewValue0(v.Pos, OpConst64, t)
34917 v0.AuxInt = c * d
34918 v.AddArg(v0)
34919 v1 := b.NewValue0(v.Pos, OpMul64, t)
34920 v2 := b.NewValue0(v.Pos, OpConst64, t)
34921 v2.AuxInt = c
34922 v1.AddArg(v2)
34923 v1.AddArg(x)
34924 v.AddArg(v1)
34925 return true
34926 }
34927
34928
34929
34930 for {
34931 _ = v.Args[1]
34932 v_0 := v.Args[0]
34933 if v_0.Op != OpConst64 {
34934 break
34935 }
34936 if v_0.AuxInt != 0 {
34937 break
34938 }
34939 v.reset(OpConst64)
34940 v.AuxInt = 0
34941 return true
34942 }
34943
34944
34945
34946 for {
34947 _ = v.Args[1]
34948 v_1 := v.Args[1]
34949 if v_1.Op != OpConst64 {
34950 break
34951 }
34952 if v_1.AuxInt != 0 {
34953 break
34954 }
34955 v.reset(OpConst64)
34956 v.AuxInt = 0
34957 return true
34958 }
34959
34960
34961
34962 for {
34963 _ = v.Args[1]
34964 v_0 := v.Args[0]
34965 if v_0.Op != OpConst64 {
34966 break
34967 }
34968 t := v_0.Type
34969 c := v_0.AuxInt
34970 v_1 := v.Args[1]
34971 if v_1.Op != OpMul64 {
34972 break
34973 }
34974 x := v_1.Args[1]
34975 v_1_0 := v_1.Args[0]
34976 if v_1_0.Op != OpConst64 {
34977 break
34978 }
34979 if v_1_0.Type != t {
34980 break
34981 }
34982 d := v_1_0.AuxInt
34983 v.reset(OpMul64)
34984 v0 := b.NewValue0(v.Pos, OpConst64, t)
34985 v0.AuxInt = c * d
34986 v.AddArg(v0)
34987 v.AddArg(x)
34988 return true
34989 }
34990
34991
34992
34993 for {
34994 _ = v.Args[1]
34995 v_0 := v.Args[0]
34996 if v_0.Op != OpConst64 {
34997 break
34998 }
34999 t := v_0.Type
35000 c := v_0.AuxInt
35001 v_1 := v.Args[1]
35002 if v_1.Op != OpMul64 {
35003 break
35004 }
35005 _ = v_1.Args[1]
35006 x := v_1.Args[0]
35007 v_1_1 := v_1.Args[1]
35008 if v_1_1.Op != OpConst64 {
35009 break
35010 }
35011 if v_1_1.Type != t {
35012 break
35013 }
35014 d := v_1_1.AuxInt
35015 v.reset(OpMul64)
35016 v0 := b.NewValue0(v.Pos, OpConst64, t)
35017 v0.AuxInt = c * d
35018 v.AddArg(v0)
35019 v.AddArg(x)
35020 return true
35021 }
35022
35023
35024
35025 for {
35026 _ = v.Args[1]
35027 v_0 := v.Args[0]
35028 if v_0.Op != OpMul64 {
35029 break
35030 }
35031 x := v_0.Args[1]
35032 v_0_0 := v_0.Args[0]
35033 if v_0_0.Op != OpConst64 {
35034 break
35035 }
35036 t := v_0_0.Type
35037 d := v_0_0.AuxInt
35038 v_1 := v.Args[1]
35039 if v_1.Op != OpConst64 {
35040 break
35041 }
35042 if v_1.Type != t {
35043 break
35044 }
35045 c := v_1.AuxInt
35046 v.reset(OpMul64)
35047 v0 := b.NewValue0(v.Pos, OpConst64, t)
35048 v0.AuxInt = c * d
35049 v.AddArg(v0)
35050 v.AddArg(x)
35051 return true
35052 }
35053
35054
35055
35056 for {
35057 _ = v.Args[1]
35058 v_0 := v.Args[0]
35059 if v_0.Op != OpMul64 {
35060 break
35061 }
35062 _ = v_0.Args[1]
35063 x := v_0.Args[0]
35064 v_0_1 := v_0.Args[1]
35065 if v_0_1.Op != OpConst64 {
35066 break
35067 }
35068 t := v_0_1.Type
35069 d := v_0_1.AuxInt
35070 v_1 := v.Args[1]
35071 if v_1.Op != OpConst64 {
35072 break
35073 }
35074 if v_1.Type != t {
35075 break
35076 }
35077 c := v_1.AuxInt
35078 v.reset(OpMul64)
35079 v0 := b.NewValue0(v.Pos, OpConst64, t)
35080 v0.AuxInt = c * d
35081 v.AddArg(v0)
35082 v.AddArg(x)
35083 return true
35084 }
35085 return false
35086 }
35087 func rewriteValuegeneric_OpMul64F_0(v *Value) bool {
35088
35089
35090
35091 for {
35092 _ = v.Args[1]
35093 v_0 := v.Args[0]
35094 if v_0.Op != OpConst64F {
35095 break
35096 }
35097 c := v_0.AuxInt
35098 v_1 := v.Args[1]
35099 if v_1.Op != OpConst64F {
35100 break
35101 }
35102 d := v_1.AuxInt
35103 v.reset(OpConst64F)
35104 v.AuxInt = auxFrom64F(auxTo64F(c) * auxTo64F(d))
35105 return true
35106 }
35107
35108
35109
35110 for {
35111 _ = v.Args[1]
35112 v_0 := v.Args[0]
35113 if v_0.Op != OpConst64F {
35114 break
35115 }
35116 d := v_0.AuxInt
35117 v_1 := v.Args[1]
35118 if v_1.Op != OpConst64F {
35119 break
35120 }
35121 c := v_1.AuxInt
35122 v.reset(OpConst64F)
35123 v.AuxInt = auxFrom64F(auxTo64F(c) * auxTo64F(d))
35124 return true
35125 }
35126
35127
35128
35129 for {
35130 _ = v.Args[1]
35131 x := v.Args[0]
35132 v_1 := v.Args[1]
35133 if v_1.Op != OpConst64F {
35134 break
35135 }
35136 if v_1.AuxInt != auxFrom64F(1) {
35137 break
35138 }
35139 v.reset(OpCopy)
35140 v.Type = x.Type
35141 v.AddArg(x)
35142 return true
35143 }
35144
35145
35146
35147 for {
35148 x := v.Args[1]
35149 v_0 := v.Args[0]
35150 if v_0.Op != OpConst64F {
35151 break
35152 }
35153 if v_0.AuxInt != auxFrom64F(1) {
35154 break
35155 }
35156 v.reset(OpCopy)
35157 v.Type = x.Type
35158 v.AddArg(x)
35159 return true
35160 }
35161
35162
35163
35164 for {
35165 _ = v.Args[1]
35166 x := v.Args[0]
35167 v_1 := v.Args[1]
35168 if v_1.Op != OpConst64F {
35169 break
35170 }
35171 if v_1.AuxInt != auxFrom64F(-1) {
35172 break
35173 }
35174 v.reset(OpNeg64F)
35175 v.AddArg(x)
35176 return true
35177 }
35178
35179
35180
35181 for {
35182 x := v.Args[1]
35183 v_0 := v.Args[0]
35184 if v_0.Op != OpConst64F {
35185 break
35186 }
35187 if v_0.AuxInt != auxFrom64F(-1) {
35188 break
35189 }
35190 v.reset(OpNeg64F)
35191 v.AddArg(x)
35192 return true
35193 }
35194
35195
35196
35197 for {
35198 _ = v.Args[1]
35199 x := v.Args[0]
35200 v_1 := v.Args[1]
35201 if v_1.Op != OpConst64F {
35202 break
35203 }
35204 if v_1.AuxInt != auxFrom64F(2) {
35205 break
35206 }
35207 v.reset(OpAdd64F)
35208 v.AddArg(x)
35209 v.AddArg(x)
35210 return true
35211 }
35212
35213
35214
35215 for {
35216 x := v.Args[1]
35217 v_0 := v.Args[0]
35218 if v_0.Op != OpConst64F {
35219 break
35220 }
35221 if v_0.AuxInt != auxFrom64F(2) {
35222 break
35223 }
35224 v.reset(OpAdd64F)
35225 v.AddArg(x)
35226 v.AddArg(x)
35227 return true
35228 }
35229 return false
35230 }
35231 func rewriteValuegeneric_OpMul8_0(v *Value) bool {
35232 b := v.Block
35233 typ := &b.Func.Config.Types
35234
35235
35236
35237 for {
35238 _ = v.Args[1]
35239 v_0 := v.Args[0]
35240 if v_0.Op != OpConst8 {
35241 break
35242 }
35243 c := v_0.AuxInt
35244 v_1 := v.Args[1]
35245 if v_1.Op != OpConst8 {
35246 break
35247 }
35248 d := v_1.AuxInt
35249 v.reset(OpConst8)
35250 v.AuxInt = int64(int8(c * d))
35251 return true
35252 }
35253
35254
35255
35256 for {
35257 _ = v.Args[1]
35258 v_0 := v.Args[0]
35259 if v_0.Op != OpConst8 {
35260 break
35261 }
35262 d := v_0.AuxInt
35263 v_1 := v.Args[1]
35264 if v_1.Op != OpConst8 {
35265 break
35266 }
35267 c := v_1.AuxInt
35268 v.reset(OpConst8)
35269 v.AuxInt = int64(int8(c * d))
35270 return true
35271 }
35272
35273
35274
35275 for {
35276 x := v.Args[1]
35277 v_0 := v.Args[0]
35278 if v_0.Op != OpConst8 {
35279 break
35280 }
35281 if v_0.AuxInt != 1 {
35282 break
35283 }
35284 v.reset(OpCopy)
35285 v.Type = x.Type
35286 v.AddArg(x)
35287 return true
35288 }
35289
35290
35291
35292 for {
35293 _ = v.Args[1]
35294 x := v.Args[0]
35295 v_1 := v.Args[1]
35296 if v_1.Op != OpConst8 {
35297 break
35298 }
35299 if v_1.AuxInt != 1 {
35300 break
35301 }
35302 v.reset(OpCopy)
35303 v.Type = x.Type
35304 v.AddArg(x)
35305 return true
35306 }
35307
35308
35309
35310 for {
35311 x := v.Args[1]
35312 v_0 := v.Args[0]
35313 if v_0.Op != OpConst8 {
35314 break
35315 }
35316 if v_0.AuxInt != -1 {
35317 break
35318 }
35319 v.reset(OpNeg8)
35320 v.AddArg(x)
35321 return true
35322 }
35323
35324
35325
35326 for {
35327 _ = v.Args[1]
35328 x := v.Args[0]
35329 v_1 := v.Args[1]
35330 if v_1.Op != OpConst8 {
35331 break
35332 }
35333 if v_1.AuxInt != -1 {
35334 break
35335 }
35336 v.reset(OpNeg8)
35337 v.AddArg(x)
35338 return true
35339 }
35340
35341
35342
35343 for {
35344 t := v.Type
35345 _ = v.Args[1]
35346 n := v.Args[0]
35347 v_1 := v.Args[1]
35348 if v_1.Op != OpConst8 {
35349 break
35350 }
35351 c := v_1.AuxInt
35352 if !(isPowerOfTwo(c)) {
35353 break
35354 }
35355 v.reset(OpLsh8x64)
35356 v.Type = t
35357 v.AddArg(n)
35358 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
35359 v0.AuxInt = log2(c)
35360 v.AddArg(v0)
35361 return true
35362 }
35363
35364
35365
35366 for {
35367 t := v.Type
35368 n := v.Args[1]
35369 v_0 := v.Args[0]
35370 if v_0.Op != OpConst8 {
35371 break
35372 }
35373 c := v_0.AuxInt
35374 if !(isPowerOfTwo(c)) {
35375 break
35376 }
35377 v.reset(OpLsh8x64)
35378 v.Type = t
35379 v.AddArg(n)
35380 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
35381 v0.AuxInt = log2(c)
35382 v.AddArg(v0)
35383 return true
35384 }
35385
35386
35387
35388 for {
35389 t := v.Type
35390 _ = v.Args[1]
35391 n := v.Args[0]
35392 v_1 := v.Args[1]
35393 if v_1.Op != OpConst8 {
35394 break
35395 }
35396 c := v_1.AuxInt
35397 if !(t.IsSigned() && isPowerOfTwo(-c)) {
35398 break
35399 }
35400 v.reset(OpNeg8)
35401 v0 := b.NewValue0(v.Pos, OpLsh8x64, t)
35402 v0.AddArg(n)
35403 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
35404 v1.AuxInt = log2(-c)
35405 v0.AddArg(v1)
35406 v.AddArg(v0)
35407 return true
35408 }
35409
35410
35411
35412 for {
35413 t := v.Type
35414 n := v.Args[1]
35415 v_0 := v.Args[0]
35416 if v_0.Op != OpConst8 {
35417 break
35418 }
35419 c := v_0.AuxInt
35420 if !(t.IsSigned() && isPowerOfTwo(-c)) {
35421 break
35422 }
35423 v.reset(OpNeg8)
35424 v0 := b.NewValue0(v.Pos, OpLsh8x64, t)
35425 v0.AddArg(n)
35426 v1 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
35427 v1.AuxInt = log2(-c)
35428 v0.AddArg(v1)
35429 v.AddArg(v0)
35430 return true
35431 }
35432 return false
35433 }
35434 func rewriteValuegeneric_OpMul8_10(v *Value) bool {
35435 b := v.Block
35436
35437
35438
35439 for {
35440 _ = v.Args[1]
35441 v_0 := v.Args[0]
35442 if v_0.Op != OpConst8 {
35443 break
35444 }
35445 if v_0.AuxInt != 0 {
35446 break
35447 }
35448 v.reset(OpConst8)
35449 v.AuxInt = 0
35450 return true
35451 }
35452
35453
35454
35455 for {
35456 _ = v.Args[1]
35457 v_1 := v.Args[1]
35458 if v_1.Op != OpConst8 {
35459 break
35460 }
35461 if v_1.AuxInt != 0 {
35462 break
35463 }
35464 v.reset(OpConst8)
35465 v.AuxInt = 0
35466 return true
35467 }
35468
35469
35470
35471 for {
35472 _ = v.Args[1]
35473 v_0 := v.Args[0]
35474 if v_0.Op != OpConst8 {
35475 break
35476 }
35477 t := v_0.Type
35478 c := v_0.AuxInt
35479 v_1 := v.Args[1]
35480 if v_1.Op != OpMul8 {
35481 break
35482 }
35483 x := v_1.Args[1]
35484 v_1_0 := v_1.Args[0]
35485 if v_1_0.Op != OpConst8 {
35486 break
35487 }
35488 if v_1_0.Type != t {
35489 break
35490 }
35491 d := v_1_0.AuxInt
35492 v.reset(OpMul8)
35493 v0 := b.NewValue0(v.Pos, OpConst8, t)
35494 v0.AuxInt = int64(int8(c * d))
35495 v.AddArg(v0)
35496 v.AddArg(x)
35497 return true
35498 }
35499
35500
35501
35502 for {
35503 _ = v.Args[1]
35504 v_0 := v.Args[0]
35505 if v_0.Op != OpConst8 {
35506 break
35507 }
35508 t := v_0.Type
35509 c := v_0.AuxInt
35510 v_1 := v.Args[1]
35511 if v_1.Op != OpMul8 {
35512 break
35513 }
35514 _ = v_1.Args[1]
35515 x := v_1.Args[0]
35516 v_1_1 := v_1.Args[1]
35517 if v_1_1.Op != OpConst8 {
35518 break
35519 }
35520 if v_1_1.Type != t {
35521 break
35522 }
35523 d := v_1_1.AuxInt
35524 v.reset(OpMul8)
35525 v0 := b.NewValue0(v.Pos, OpConst8, t)
35526 v0.AuxInt = int64(int8(c * d))
35527 v.AddArg(v0)
35528 v.AddArg(x)
35529 return true
35530 }
35531
35532
35533
35534 for {
35535 _ = v.Args[1]
35536 v_0 := v.Args[0]
35537 if v_0.Op != OpMul8 {
35538 break
35539 }
35540 x := v_0.Args[1]
35541 v_0_0 := v_0.Args[0]
35542 if v_0_0.Op != OpConst8 {
35543 break
35544 }
35545 t := v_0_0.Type
35546 d := v_0_0.AuxInt
35547 v_1 := v.Args[1]
35548 if v_1.Op != OpConst8 {
35549 break
35550 }
35551 if v_1.Type != t {
35552 break
35553 }
35554 c := v_1.AuxInt
35555 v.reset(OpMul8)
35556 v0 := b.NewValue0(v.Pos, OpConst8, t)
35557 v0.AuxInt = int64(int8(c * d))
35558 v.AddArg(v0)
35559 v.AddArg(x)
35560 return true
35561 }
35562
35563
35564
35565 for {
35566 _ = v.Args[1]
35567 v_0 := v.Args[0]
35568 if v_0.Op != OpMul8 {
35569 break
35570 }
35571 _ = v_0.Args[1]
35572 x := v_0.Args[0]
35573 v_0_1 := v_0.Args[1]
35574 if v_0_1.Op != OpConst8 {
35575 break
35576 }
35577 t := v_0_1.Type
35578 d := v_0_1.AuxInt
35579 v_1 := v.Args[1]
35580 if v_1.Op != OpConst8 {
35581 break
35582 }
35583 if v_1.Type != t {
35584 break
35585 }
35586 c := v_1.AuxInt
35587 v.reset(OpMul8)
35588 v0 := b.NewValue0(v.Pos, OpConst8, t)
35589 v0.AuxInt = int64(int8(c * d))
35590 v.AddArg(v0)
35591 v.AddArg(x)
35592 return true
35593 }
35594 return false
35595 }
35596 func rewriteValuegeneric_OpNeg16_0(v *Value) bool {
35597
35598
35599
35600 for {
35601 v_0 := v.Args[0]
35602 if v_0.Op != OpConst16 {
35603 break
35604 }
35605 c := v_0.AuxInt
35606 v.reset(OpConst16)
35607 v.AuxInt = int64(-int16(c))
35608 return true
35609 }
35610
35611
35612
35613 for {
35614 v_0 := v.Args[0]
35615 if v_0.Op != OpSub16 {
35616 break
35617 }
35618 y := v_0.Args[1]
35619 x := v_0.Args[0]
35620 v.reset(OpSub16)
35621 v.AddArg(y)
35622 v.AddArg(x)
35623 return true
35624 }
35625 return false
35626 }
35627 func rewriteValuegeneric_OpNeg32_0(v *Value) bool {
35628
35629
35630
35631 for {
35632 v_0 := v.Args[0]
35633 if v_0.Op != OpConst32 {
35634 break
35635 }
35636 c := v_0.AuxInt
35637 v.reset(OpConst32)
35638 v.AuxInt = int64(-int32(c))
35639 return true
35640 }
35641
35642
35643
35644 for {
35645 v_0 := v.Args[0]
35646 if v_0.Op != OpSub32 {
35647 break
35648 }
35649 y := v_0.Args[1]
35650 x := v_0.Args[0]
35651 v.reset(OpSub32)
35652 v.AddArg(y)
35653 v.AddArg(x)
35654 return true
35655 }
35656 return false
35657 }
35658 func rewriteValuegeneric_OpNeg32F_0(v *Value) bool {
35659
35660
35661
35662 for {
35663 v_0 := v.Args[0]
35664 if v_0.Op != OpConst32F {
35665 break
35666 }
35667 c := v_0.AuxInt
35668 if !(auxTo32F(c) != 0) {
35669 break
35670 }
35671 v.reset(OpConst32F)
35672 v.AuxInt = auxFrom32F(-auxTo32F(c))
35673 return true
35674 }
35675 return false
35676 }
35677 func rewriteValuegeneric_OpNeg64_0(v *Value) bool {
35678
35679
35680
35681 for {
35682 v_0 := v.Args[0]
35683 if v_0.Op != OpConst64 {
35684 break
35685 }
35686 c := v_0.AuxInt
35687 v.reset(OpConst64)
35688 v.AuxInt = -c
35689 return true
35690 }
35691
35692
35693
35694 for {
35695 v_0 := v.Args[0]
35696 if v_0.Op != OpSub64 {
35697 break
35698 }
35699 y := v_0.Args[1]
35700 x := v_0.Args[0]
35701 v.reset(OpSub64)
35702 v.AddArg(y)
35703 v.AddArg(x)
35704 return true
35705 }
35706 return false
35707 }
35708 func rewriteValuegeneric_OpNeg64F_0(v *Value) bool {
35709
35710
35711
35712 for {
35713 v_0 := v.Args[0]
35714 if v_0.Op != OpConst64F {
35715 break
35716 }
35717 c := v_0.AuxInt
35718 if !(auxTo64F(c) != 0) {
35719 break
35720 }
35721 v.reset(OpConst64F)
35722 v.AuxInt = auxFrom64F(-auxTo64F(c))
35723 return true
35724 }
35725 return false
35726 }
35727 func rewriteValuegeneric_OpNeg8_0(v *Value) bool {
35728
35729
35730
35731 for {
35732 v_0 := v.Args[0]
35733 if v_0.Op != OpConst8 {
35734 break
35735 }
35736 c := v_0.AuxInt
35737 v.reset(OpConst8)
35738 v.AuxInt = int64(-int8(c))
35739 return true
35740 }
35741
35742
35743
35744 for {
35745 v_0 := v.Args[0]
35746 if v_0.Op != OpSub8 {
35747 break
35748 }
35749 y := v_0.Args[1]
35750 x := v_0.Args[0]
35751 v.reset(OpSub8)
35752 v.AddArg(y)
35753 v.AddArg(x)
35754 return true
35755 }
35756 return false
35757 }
35758 func rewriteValuegeneric_OpNeq16_0(v *Value) bool {
35759 b := v.Block
35760
35761
35762
35763 for {
35764 x := v.Args[1]
35765 if x != v.Args[0] {
35766 break
35767 }
35768 v.reset(OpConstBool)
35769 v.AuxInt = 0
35770 return true
35771 }
35772
35773
35774
35775 for {
35776 _ = v.Args[1]
35777 v_0 := v.Args[0]
35778 if v_0.Op != OpConst16 {
35779 break
35780 }
35781 t := v_0.Type
35782 c := v_0.AuxInt
35783 v_1 := v.Args[1]
35784 if v_1.Op != OpAdd16 {
35785 break
35786 }
35787 x := v_1.Args[1]
35788 v_1_0 := v_1.Args[0]
35789 if v_1_0.Op != OpConst16 {
35790 break
35791 }
35792 if v_1_0.Type != t {
35793 break
35794 }
35795 d := v_1_0.AuxInt
35796 v.reset(OpNeq16)
35797 v0 := b.NewValue0(v.Pos, OpConst16, t)
35798 v0.AuxInt = int64(int16(c - d))
35799 v.AddArg(v0)
35800 v.AddArg(x)
35801 return true
35802 }
35803
35804
35805
35806 for {
35807 _ = v.Args[1]
35808 v_0 := v.Args[0]
35809 if v_0.Op != OpConst16 {
35810 break
35811 }
35812 t := v_0.Type
35813 c := v_0.AuxInt
35814 v_1 := v.Args[1]
35815 if v_1.Op != OpAdd16 {
35816 break
35817 }
35818 _ = v_1.Args[1]
35819 x := v_1.Args[0]
35820 v_1_1 := v_1.Args[1]
35821 if v_1_1.Op != OpConst16 {
35822 break
35823 }
35824 if v_1_1.Type != t {
35825 break
35826 }
35827 d := v_1_1.AuxInt
35828 v.reset(OpNeq16)
35829 v0 := b.NewValue0(v.Pos, OpConst16, t)
35830 v0.AuxInt = int64(int16(c - d))
35831 v.AddArg(v0)
35832 v.AddArg(x)
35833 return true
35834 }
35835
35836
35837
35838 for {
35839 _ = v.Args[1]
35840 v_0 := v.Args[0]
35841 if v_0.Op != OpAdd16 {
35842 break
35843 }
35844 x := v_0.Args[1]
35845 v_0_0 := v_0.Args[0]
35846 if v_0_0.Op != OpConst16 {
35847 break
35848 }
35849 t := v_0_0.Type
35850 d := v_0_0.AuxInt
35851 v_1 := v.Args[1]
35852 if v_1.Op != OpConst16 {
35853 break
35854 }
35855 if v_1.Type != t {
35856 break
35857 }
35858 c := v_1.AuxInt
35859 v.reset(OpNeq16)
35860 v0 := b.NewValue0(v.Pos, OpConst16, t)
35861 v0.AuxInt = int64(int16(c - d))
35862 v.AddArg(v0)
35863 v.AddArg(x)
35864 return true
35865 }
35866
35867
35868
35869 for {
35870 _ = v.Args[1]
35871 v_0 := v.Args[0]
35872 if v_0.Op != OpAdd16 {
35873 break
35874 }
35875 _ = v_0.Args[1]
35876 x := v_0.Args[0]
35877 v_0_1 := v_0.Args[1]
35878 if v_0_1.Op != OpConst16 {
35879 break
35880 }
35881 t := v_0_1.Type
35882 d := v_0_1.AuxInt
35883 v_1 := v.Args[1]
35884 if v_1.Op != OpConst16 {
35885 break
35886 }
35887 if v_1.Type != t {
35888 break
35889 }
35890 c := v_1.AuxInt
35891 v.reset(OpNeq16)
35892 v0 := b.NewValue0(v.Pos, OpConst16, t)
35893 v0.AuxInt = int64(int16(c - d))
35894 v.AddArg(v0)
35895 v.AddArg(x)
35896 return true
35897 }
35898
35899
35900
35901 for {
35902 _ = v.Args[1]
35903 v_0 := v.Args[0]
35904 if v_0.Op != OpConst16 {
35905 break
35906 }
35907 c := v_0.AuxInt
35908 v_1 := v.Args[1]
35909 if v_1.Op != OpConst16 {
35910 break
35911 }
35912 d := v_1.AuxInt
35913 v.reset(OpConstBool)
35914 v.AuxInt = b2i(c != d)
35915 return true
35916 }
35917
35918
35919
35920 for {
35921 _ = v.Args[1]
35922 v_0 := v.Args[0]
35923 if v_0.Op != OpConst16 {
35924 break
35925 }
35926 d := v_0.AuxInt
35927 v_1 := v.Args[1]
35928 if v_1.Op != OpConst16 {
35929 break
35930 }
35931 c := v_1.AuxInt
35932 v.reset(OpConstBool)
35933 v.AuxInt = b2i(c != d)
35934 return true
35935 }
35936
35937
35938
35939 for {
35940 _ = v.Args[1]
35941 s := v.Args[0]
35942 if s.Op != OpSub16 {
35943 break
35944 }
35945 y := s.Args[1]
35946 x := s.Args[0]
35947 v_1 := v.Args[1]
35948 if v_1.Op != OpConst16 {
35949 break
35950 }
35951 if v_1.AuxInt != 0 {
35952 break
35953 }
35954 if !(s.Uses == 1) {
35955 break
35956 }
35957 v.reset(OpNeq16)
35958 v.AddArg(x)
35959 v.AddArg(y)
35960 return true
35961 }
35962
35963
35964
35965 for {
35966 _ = v.Args[1]
35967 v_0 := v.Args[0]
35968 if v_0.Op != OpConst16 {
35969 break
35970 }
35971 if v_0.AuxInt != 0 {
35972 break
35973 }
35974 s := v.Args[1]
35975 if s.Op != OpSub16 {
35976 break
35977 }
35978 y := s.Args[1]
35979 x := s.Args[0]
35980 if !(s.Uses == 1) {
35981 break
35982 }
35983 v.reset(OpNeq16)
35984 v.AddArg(x)
35985 v.AddArg(y)
35986 return true
35987 }
35988 return false
35989 }
35990 func rewriteValuegeneric_OpNeq32_0(v *Value) bool {
35991 b := v.Block
35992
35993
35994
35995 for {
35996 x := v.Args[1]
35997 if x != v.Args[0] {
35998 break
35999 }
36000 v.reset(OpConstBool)
36001 v.AuxInt = 0
36002 return true
36003 }
36004
36005
36006
36007 for {
36008 _ = v.Args[1]
36009 v_0 := v.Args[0]
36010 if v_0.Op != OpConst32 {
36011 break
36012 }
36013 t := v_0.Type
36014 c := v_0.AuxInt
36015 v_1 := v.Args[1]
36016 if v_1.Op != OpAdd32 {
36017 break
36018 }
36019 x := v_1.Args[1]
36020 v_1_0 := v_1.Args[0]
36021 if v_1_0.Op != OpConst32 {
36022 break
36023 }
36024 if v_1_0.Type != t {
36025 break
36026 }
36027 d := v_1_0.AuxInt
36028 v.reset(OpNeq32)
36029 v0 := b.NewValue0(v.Pos, OpConst32, t)
36030 v0.AuxInt = int64(int32(c - d))
36031 v.AddArg(v0)
36032 v.AddArg(x)
36033 return true
36034 }
36035
36036
36037
36038 for {
36039 _ = v.Args[1]
36040 v_0 := v.Args[0]
36041 if v_0.Op != OpConst32 {
36042 break
36043 }
36044 t := v_0.Type
36045 c := v_0.AuxInt
36046 v_1 := v.Args[1]
36047 if v_1.Op != OpAdd32 {
36048 break
36049 }
36050 _ = v_1.Args[1]
36051 x := v_1.Args[0]
36052 v_1_1 := v_1.Args[1]
36053 if v_1_1.Op != OpConst32 {
36054 break
36055 }
36056 if v_1_1.Type != t {
36057 break
36058 }
36059 d := v_1_1.AuxInt
36060 v.reset(OpNeq32)
36061 v0 := b.NewValue0(v.Pos, OpConst32, t)
36062 v0.AuxInt = int64(int32(c - d))
36063 v.AddArg(v0)
36064 v.AddArg(x)
36065 return true
36066 }
36067
36068
36069
36070 for {
36071 _ = v.Args[1]
36072 v_0 := v.Args[0]
36073 if v_0.Op != OpAdd32 {
36074 break
36075 }
36076 x := v_0.Args[1]
36077 v_0_0 := v_0.Args[0]
36078 if v_0_0.Op != OpConst32 {
36079 break
36080 }
36081 t := v_0_0.Type
36082 d := v_0_0.AuxInt
36083 v_1 := v.Args[1]
36084 if v_1.Op != OpConst32 {
36085 break
36086 }
36087 if v_1.Type != t {
36088 break
36089 }
36090 c := v_1.AuxInt
36091 v.reset(OpNeq32)
36092 v0 := b.NewValue0(v.Pos, OpConst32, t)
36093 v0.AuxInt = int64(int32(c - d))
36094 v.AddArg(v0)
36095 v.AddArg(x)
36096 return true
36097 }
36098
36099
36100
36101 for {
36102 _ = v.Args[1]
36103 v_0 := v.Args[0]
36104 if v_0.Op != OpAdd32 {
36105 break
36106 }
36107 _ = v_0.Args[1]
36108 x := v_0.Args[0]
36109 v_0_1 := v_0.Args[1]
36110 if v_0_1.Op != OpConst32 {
36111 break
36112 }
36113 t := v_0_1.Type
36114 d := v_0_1.AuxInt
36115 v_1 := v.Args[1]
36116 if v_1.Op != OpConst32 {
36117 break
36118 }
36119 if v_1.Type != t {
36120 break
36121 }
36122 c := v_1.AuxInt
36123 v.reset(OpNeq32)
36124 v0 := b.NewValue0(v.Pos, OpConst32, t)
36125 v0.AuxInt = int64(int32(c - d))
36126 v.AddArg(v0)
36127 v.AddArg(x)
36128 return true
36129 }
36130
36131
36132
36133 for {
36134 _ = v.Args[1]
36135 v_0 := v.Args[0]
36136 if v_0.Op != OpConst32 {
36137 break
36138 }
36139 c := v_0.AuxInt
36140 v_1 := v.Args[1]
36141 if v_1.Op != OpConst32 {
36142 break
36143 }
36144 d := v_1.AuxInt
36145 v.reset(OpConstBool)
36146 v.AuxInt = b2i(c != d)
36147 return true
36148 }
36149
36150
36151
36152 for {
36153 _ = v.Args[1]
36154 v_0 := v.Args[0]
36155 if v_0.Op != OpConst32 {
36156 break
36157 }
36158 d := v_0.AuxInt
36159 v_1 := v.Args[1]
36160 if v_1.Op != OpConst32 {
36161 break
36162 }
36163 c := v_1.AuxInt
36164 v.reset(OpConstBool)
36165 v.AuxInt = b2i(c != d)
36166 return true
36167 }
36168
36169
36170
36171 for {
36172 _ = v.Args[1]
36173 s := v.Args[0]
36174 if s.Op != OpSub32 {
36175 break
36176 }
36177 y := s.Args[1]
36178 x := s.Args[0]
36179 v_1 := v.Args[1]
36180 if v_1.Op != OpConst32 {
36181 break
36182 }
36183 if v_1.AuxInt != 0 {
36184 break
36185 }
36186 if !(s.Uses == 1) {
36187 break
36188 }
36189 v.reset(OpNeq32)
36190 v.AddArg(x)
36191 v.AddArg(y)
36192 return true
36193 }
36194
36195
36196
36197 for {
36198 _ = v.Args[1]
36199 v_0 := v.Args[0]
36200 if v_0.Op != OpConst32 {
36201 break
36202 }
36203 if v_0.AuxInt != 0 {
36204 break
36205 }
36206 s := v.Args[1]
36207 if s.Op != OpSub32 {
36208 break
36209 }
36210 y := s.Args[1]
36211 x := s.Args[0]
36212 if !(s.Uses == 1) {
36213 break
36214 }
36215 v.reset(OpNeq32)
36216 v.AddArg(x)
36217 v.AddArg(y)
36218 return true
36219 }
36220 return false
36221 }
36222 func rewriteValuegeneric_OpNeq32F_0(v *Value) bool {
36223
36224
36225
36226 for {
36227 _ = v.Args[1]
36228 v_0 := v.Args[0]
36229 if v_0.Op != OpConst32F {
36230 break
36231 }
36232 c := v_0.AuxInt
36233 v_1 := v.Args[1]
36234 if v_1.Op != OpConst32F {
36235 break
36236 }
36237 d := v_1.AuxInt
36238 v.reset(OpConstBool)
36239 v.AuxInt = b2i(auxTo32F(c) != auxTo32F(d))
36240 return true
36241 }
36242
36243
36244
36245 for {
36246 _ = v.Args[1]
36247 v_0 := v.Args[0]
36248 if v_0.Op != OpConst32F {
36249 break
36250 }
36251 d := v_0.AuxInt
36252 v_1 := v.Args[1]
36253 if v_1.Op != OpConst32F {
36254 break
36255 }
36256 c := v_1.AuxInt
36257 v.reset(OpConstBool)
36258 v.AuxInt = b2i(auxTo32F(c) != auxTo32F(d))
36259 return true
36260 }
36261 return false
36262 }
36263 func rewriteValuegeneric_OpNeq64_0(v *Value) bool {
36264 b := v.Block
36265
36266
36267
36268 for {
36269 x := v.Args[1]
36270 if x != v.Args[0] {
36271 break
36272 }
36273 v.reset(OpConstBool)
36274 v.AuxInt = 0
36275 return true
36276 }
36277
36278
36279
36280 for {
36281 _ = v.Args[1]
36282 v_0 := v.Args[0]
36283 if v_0.Op != OpConst64 {
36284 break
36285 }
36286 t := v_0.Type
36287 c := v_0.AuxInt
36288 v_1 := v.Args[1]
36289 if v_1.Op != OpAdd64 {
36290 break
36291 }
36292 x := v_1.Args[1]
36293 v_1_0 := v_1.Args[0]
36294 if v_1_0.Op != OpConst64 {
36295 break
36296 }
36297 if v_1_0.Type != t {
36298 break
36299 }
36300 d := v_1_0.AuxInt
36301 v.reset(OpNeq64)
36302 v0 := b.NewValue0(v.Pos, OpConst64, t)
36303 v0.AuxInt = c - d
36304 v.AddArg(v0)
36305 v.AddArg(x)
36306 return true
36307 }
36308
36309
36310
36311 for {
36312 _ = v.Args[1]
36313 v_0 := v.Args[0]
36314 if v_0.Op != OpConst64 {
36315 break
36316 }
36317 t := v_0.Type
36318 c := v_0.AuxInt
36319 v_1 := v.Args[1]
36320 if v_1.Op != OpAdd64 {
36321 break
36322 }
36323 _ = v_1.Args[1]
36324 x := v_1.Args[0]
36325 v_1_1 := v_1.Args[1]
36326 if v_1_1.Op != OpConst64 {
36327 break
36328 }
36329 if v_1_1.Type != t {
36330 break
36331 }
36332 d := v_1_1.AuxInt
36333 v.reset(OpNeq64)
36334 v0 := b.NewValue0(v.Pos, OpConst64, t)
36335 v0.AuxInt = c - d
36336 v.AddArg(v0)
36337 v.AddArg(x)
36338 return true
36339 }
36340
36341
36342
36343 for {
36344 _ = v.Args[1]
36345 v_0 := v.Args[0]
36346 if v_0.Op != OpAdd64 {
36347 break
36348 }
36349 x := v_0.Args[1]
36350 v_0_0 := v_0.Args[0]
36351 if v_0_0.Op != OpConst64 {
36352 break
36353 }
36354 t := v_0_0.Type
36355 d := v_0_0.AuxInt
36356 v_1 := v.Args[1]
36357 if v_1.Op != OpConst64 {
36358 break
36359 }
36360 if v_1.Type != t {
36361 break
36362 }
36363 c := v_1.AuxInt
36364 v.reset(OpNeq64)
36365 v0 := b.NewValue0(v.Pos, OpConst64, t)
36366 v0.AuxInt = c - d
36367 v.AddArg(v0)
36368 v.AddArg(x)
36369 return true
36370 }
36371
36372
36373
36374 for {
36375 _ = v.Args[1]
36376 v_0 := v.Args[0]
36377 if v_0.Op != OpAdd64 {
36378 break
36379 }
36380 _ = v_0.Args[1]
36381 x := v_0.Args[0]
36382 v_0_1 := v_0.Args[1]
36383 if v_0_1.Op != OpConst64 {
36384 break
36385 }
36386 t := v_0_1.Type
36387 d := v_0_1.AuxInt
36388 v_1 := v.Args[1]
36389 if v_1.Op != OpConst64 {
36390 break
36391 }
36392 if v_1.Type != t {
36393 break
36394 }
36395 c := v_1.AuxInt
36396 v.reset(OpNeq64)
36397 v0 := b.NewValue0(v.Pos, OpConst64, t)
36398 v0.AuxInt = c - d
36399 v.AddArg(v0)
36400 v.AddArg(x)
36401 return true
36402 }
36403
36404
36405
36406 for {
36407 _ = v.Args[1]
36408 v_0 := v.Args[0]
36409 if v_0.Op != OpConst64 {
36410 break
36411 }
36412 c := v_0.AuxInt
36413 v_1 := v.Args[1]
36414 if v_1.Op != OpConst64 {
36415 break
36416 }
36417 d := v_1.AuxInt
36418 v.reset(OpConstBool)
36419 v.AuxInt = b2i(c != d)
36420 return true
36421 }
36422
36423
36424
36425 for {
36426 _ = v.Args[1]
36427 v_0 := v.Args[0]
36428 if v_0.Op != OpConst64 {
36429 break
36430 }
36431 d := v_0.AuxInt
36432 v_1 := v.Args[1]
36433 if v_1.Op != OpConst64 {
36434 break
36435 }
36436 c := v_1.AuxInt
36437 v.reset(OpConstBool)
36438 v.AuxInt = b2i(c != d)
36439 return true
36440 }
36441
36442
36443
36444 for {
36445 _ = v.Args[1]
36446 s := v.Args[0]
36447 if s.Op != OpSub64 {
36448 break
36449 }
36450 y := s.Args[1]
36451 x := s.Args[0]
36452 v_1 := v.Args[1]
36453 if v_1.Op != OpConst64 {
36454 break
36455 }
36456 if v_1.AuxInt != 0 {
36457 break
36458 }
36459 if !(s.Uses == 1) {
36460 break
36461 }
36462 v.reset(OpNeq64)
36463 v.AddArg(x)
36464 v.AddArg(y)
36465 return true
36466 }
36467
36468
36469
36470 for {
36471 _ = v.Args[1]
36472 v_0 := v.Args[0]
36473 if v_0.Op != OpConst64 {
36474 break
36475 }
36476 if v_0.AuxInt != 0 {
36477 break
36478 }
36479 s := v.Args[1]
36480 if s.Op != OpSub64 {
36481 break
36482 }
36483 y := s.Args[1]
36484 x := s.Args[0]
36485 if !(s.Uses == 1) {
36486 break
36487 }
36488 v.reset(OpNeq64)
36489 v.AddArg(x)
36490 v.AddArg(y)
36491 return true
36492 }
36493 return false
36494 }
36495 func rewriteValuegeneric_OpNeq64F_0(v *Value) bool {
36496
36497
36498
36499 for {
36500 _ = v.Args[1]
36501 v_0 := v.Args[0]
36502 if v_0.Op != OpConst64F {
36503 break
36504 }
36505 c := v_0.AuxInt
36506 v_1 := v.Args[1]
36507 if v_1.Op != OpConst64F {
36508 break
36509 }
36510 d := v_1.AuxInt
36511 v.reset(OpConstBool)
36512 v.AuxInt = b2i(auxTo64F(c) != auxTo64F(d))
36513 return true
36514 }
36515
36516
36517
36518 for {
36519 _ = v.Args[1]
36520 v_0 := v.Args[0]
36521 if v_0.Op != OpConst64F {
36522 break
36523 }
36524 d := v_0.AuxInt
36525 v_1 := v.Args[1]
36526 if v_1.Op != OpConst64F {
36527 break
36528 }
36529 c := v_1.AuxInt
36530 v.reset(OpConstBool)
36531 v.AuxInt = b2i(auxTo64F(c) != auxTo64F(d))
36532 return true
36533 }
36534 return false
36535 }
36536 func rewriteValuegeneric_OpNeq8_0(v *Value) bool {
36537 b := v.Block
36538
36539
36540
36541 for {
36542 x := v.Args[1]
36543 if x != v.Args[0] {
36544 break
36545 }
36546 v.reset(OpConstBool)
36547 v.AuxInt = 0
36548 return true
36549 }
36550
36551
36552
36553 for {
36554 _ = v.Args[1]
36555 v_0 := v.Args[0]
36556 if v_0.Op != OpConst8 {
36557 break
36558 }
36559 t := v_0.Type
36560 c := v_0.AuxInt
36561 v_1 := v.Args[1]
36562 if v_1.Op != OpAdd8 {
36563 break
36564 }
36565 x := v_1.Args[1]
36566 v_1_0 := v_1.Args[0]
36567 if v_1_0.Op != OpConst8 {
36568 break
36569 }
36570 if v_1_0.Type != t {
36571 break
36572 }
36573 d := v_1_0.AuxInt
36574 v.reset(OpNeq8)
36575 v0 := b.NewValue0(v.Pos, OpConst8, t)
36576 v0.AuxInt = int64(int8(c - d))
36577 v.AddArg(v0)
36578 v.AddArg(x)
36579 return true
36580 }
36581
36582
36583
36584 for {
36585 _ = v.Args[1]
36586 v_0 := v.Args[0]
36587 if v_0.Op != OpConst8 {
36588 break
36589 }
36590 t := v_0.Type
36591 c := v_0.AuxInt
36592 v_1 := v.Args[1]
36593 if v_1.Op != OpAdd8 {
36594 break
36595 }
36596 _ = v_1.Args[1]
36597 x := v_1.Args[0]
36598 v_1_1 := v_1.Args[1]
36599 if v_1_1.Op != OpConst8 {
36600 break
36601 }
36602 if v_1_1.Type != t {
36603 break
36604 }
36605 d := v_1_1.AuxInt
36606 v.reset(OpNeq8)
36607 v0 := b.NewValue0(v.Pos, OpConst8, t)
36608 v0.AuxInt = int64(int8(c - d))
36609 v.AddArg(v0)
36610 v.AddArg(x)
36611 return true
36612 }
36613
36614
36615
36616 for {
36617 _ = v.Args[1]
36618 v_0 := v.Args[0]
36619 if v_0.Op != OpAdd8 {
36620 break
36621 }
36622 x := v_0.Args[1]
36623 v_0_0 := v_0.Args[0]
36624 if v_0_0.Op != OpConst8 {
36625 break
36626 }
36627 t := v_0_0.Type
36628 d := v_0_0.AuxInt
36629 v_1 := v.Args[1]
36630 if v_1.Op != OpConst8 {
36631 break
36632 }
36633 if v_1.Type != t {
36634 break
36635 }
36636 c := v_1.AuxInt
36637 v.reset(OpNeq8)
36638 v0 := b.NewValue0(v.Pos, OpConst8, t)
36639 v0.AuxInt = int64(int8(c - d))
36640 v.AddArg(v0)
36641 v.AddArg(x)
36642 return true
36643 }
36644
36645
36646
36647 for {
36648 _ = v.Args[1]
36649 v_0 := v.Args[0]
36650 if v_0.Op != OpAdd8 {
36651 break
36652 }
36653 _ = v_0.Args[1]
36654 x := v_0.Args[0]
36655 v_0_1 := v_0.Args[1]
36656 if v_0_1.Op != OpConst8 {
36657 break
36658 }
36659 t := v_0_1.Type
36660 d := v_0_1.AuxInt
36661 v_1 := v.Args[1]
36662 if v_1.Op != OpConst8 {
36663 break
36664 }
36665 if v_1.Type != t {
36666 break
36667 }
36668 c := v_1.AuxInt
36669 v.reset(OpNeq8)
36670 v0 := b.NewValue0(v.Pos, OpConst8, t)
36671 v0.AuxInt = int64(int8(c - d))
36672 v.AddArg(v0)
36673 v.AddArg(x)
36674 return true
36675 }
36676
36677
36678
36679 for {
36680 _ = v.Args[1]
36681 v_0 := v.Args[0]
36682 if v_0.Op != OpConst8 {
36683 break
36684 }
36685 c := v_0.AuxInt
36686 v_1 := v.Args[1]
36687 if v_1.Op != OpConst8 {
36688 break
36689 }
36690 d := v_1.AuxInt
36691 v.reset(OpConstBool)
36692 v.AuxInt = b2i(c != d)
36693 return true
36694 }
36695
36696
36697
36698 for {
36699 _ = v.Args[1]
36700 v_0 := v.Args[0]
36701 if v_0.Op != OpConst8 {
36702 break
36703 }
36704 d := v_0.AuxInt
36705 v_1 := v.Args[1]
36706 if v_1.Op != OpConst8 {
36707 break
36708 }
36709 c := v_1.AuxInt
36710 v.reset(OpConstBool)
36711 v.AuxInt = b2i(c != d)
36712 return true
36713 }
36714
36715
36716
36717 for {
36718 _ = v.Args[1]
36719 s := v.Args[0]
36720 if s.Op != OpSub8 {
36721 break
36722 }
36723 y := s.Args[1]
36724 x := s.Args[0]
36725 v_1 := v.Args[1]
36726 if v_1.Op != OpConst8 {
36727 break
36728 }
36729 if v_1.AuxInt != 0 {
36730 break
36731 }
36732 if !(s.Uses == 1) {
36733 break
36734 }
36735 v.reset(OpNeq8)
36736 v.AddArg(x)
36737 v.AddArg(y)
36738 return true
36739 }
36740
36741
36742
36743 for {
36744 _ = v.Args[1]
36745 v_0 := v.Args[0]
36746 if v_0.Op != OpConst8 {
36747 break
36748 }
36749 if v_0.AuxInt != 0 {
36750 break
36751 }
36752 s := v.Args[1]
36753 if s.Op != OpSub8 {
36754 break
36755 }
36756 y := s.Args[1]
36757 x := s.Args[0]
36758 if !(s.Uses == 1) {
36759 break
36760 }
36761 v.reset(OpNeq8)
36762 v.AddArg(x)
36763 v.AddArg(y)
36764 return true
36765 }
36766 return false
36767 }
36768 func rewriteValuegeneric_OpNeqB_0(v *Value) bool {
36769
36770
36771
36772 for {
36773 _ = v.Args[1]
36774 v_0 := v.Args[0]
36775 if v_0.Op != OpConstBool {
36776 break
36777 }
36778 c := v_0.AuxInt
36779 v_1 := v.Args[1]
36780 if v_1.Op != OpConstBool {
36781 break
36782 }
36783 d := v_1.AuxInt
36784 v.reset(OpConstBool)
36785 v.AuxInt = b2i(c != d)
36786 return true
36787 }
36788
36789
36790
36791 for {
36792 _ = v.Args[1]
36793 v_0 := v.Args[0]
36794 if v_0.Op != OpConstBool {
36795 break
36796 }
36797 d := v_0.AuxInt
36798 v_1 := v.Args[1]
36799 if v_1.Op != OpConstBool {
36800 break
36801 }
36802 c := v_1.AuxInt
36803 v.reset(OpConstBool)
36804 v.AuxInt = b2i(c != d)
36805 return true
36806 }
36807
36808
36809
36810 for {
36811 x := v.Args[1]
36812 v_0 := v.Args[0]
36813 if v_0.Op != OpConstBool {
36814 break
36815 }
36816 if v_0.AuxInt != 0 {
36817 break
36818 }
36819 v.reset(OpCopy)
36820 v.Type = x.Type
36821 v.AddArg(x)
36822 return true
36823 }
36824
36825
36826
36827 for {
36828 _ = v.Args[1]
36829 x := v.Args[0]
36830 v_1 := v.Args[1]
36831 if v_1.Op != OpConstBool {
36832 break
36833 }
36834 if v_1.AuxInt != 0 {
36835 break
36836 }
36837 v.reset(OpCopy)
36838 v.Type = x.Type
36839 v.AddArg(x)
36840 return true
36841 }
36842
36843
36844
36845 for {
36846 x := v.Args[1]
36847 v_0 := v.Args[0]
36848 if v_0.Op != OpConstBool {
36849 break
36850 }
36851 if v_0.AuxInt != 1 {
36852 break
36853 }
36854 v.reset(OpNot)
36855 v.AddArg(x)
36856 return true
36857 }
36858
36859
36860
36861 for {
36862 _ = v.Args[1]
36863 x := v.Args[0]
36864 v_1 := v.Args[1]
36865 if v_1.Op != OpConstBool {
36866 break
36867 }
36868 if v_1.AuxInt != 1 {
36869 break
36870 }
36871 v.reset(OpNot)
36872 v.AddArg(x)
36873 return true
36874 }
36875
36876
36877
36878 for {
36879 _ = v.Args[1]
36880 v_0 := v.Args[0]
36881 if v_0.Op != OpNot {
36882 break
36883 }
36884 x := v_0.Args[0]
36885 v_1 := v.Args[1]
36886 if v_1.Op != OpNot {
36887 break
36888 }
36889 y := v_1.Args[0]
36890 v.reset(OpNeqB)
36891 v.AddArg(x)
36892 v.AddArg(y)
36893 return true
36894 }
36895
36896
36897
36898 for {
36899 _ = v.Args[1]
36900 v_0 := v.Args[0]
36901 if v_0.Op != OpNot {
36902 break
36903 }
36904 y := v_0.Args[0]
36905 v_1 := v.Args[1]
36906 if v_1.Op != OpNot {
36907 break
36908 }
36909 x := v_1.Args[0]
36910 v.reset(OpNeqB)
36911 v.AddArg(x)
36912 v.AddArg(y)
36913 return true
36914 }
36915 return false
36916 }
36917 func rewriteValuegeneric_OpNeqInter_0(v *Value) bool {
36918 b := v.Block
36919 typ := &b.Func.Config.Types
36920
36921
36922
36923 for {
36924 y := v.Args[1]
36925 x := v.Args[0]
36926 v.reset(OpNeqPtr)
36927 v0 := b.NewValue0(v.Pos, OpITab, typ.Uintptr)
36928 v0.AddArg(x)
36929 v.AddArg(v0)
36930 v1 := b.NewValue0(v.Pos, OpITab, typ.Uintptr)
36931 v1.AddArg(y)
36932 v.AddArg(v1)
36933 return true
36934 }
36935 }
36936 func rewriteValuegeneric_OpNeqPtr_0(v *Value) bool {
36937
36938
36939
36940 for {
36941 x := v.Args[1]
36942 if x != v.Args[0] {
36943 break
36944 }
36945 v.reset(OpConstBool)
36946 v.AuxInt = 0
36947 return true
36948 }
36949
36950
36951
36952 for {
36953 _ = v.Args[1]
36954 v_0 := v.Args[0]
36955 if v_0.Op != OpAddr {
36956 break
36957 }
36958 a := v_0.Aux
36959 v_1 := v.Args[1]
36960 if v_1.Op != OpAddr {
36961 break
36962 }
36963 b := v_1.Aux
36964 v.reset(OpConstBool)
36965 v.AuxInt = b2i(a != b)
36966 return true
36967 }
36968
36969
36970
36971 for {
36972 _ = v.Args[1]
36973 v_0 := v.Args[0]
36974 if v_0.Op != OpAddr {
36975 break
36976 }
36977 b := v_0.Aux
36978 v_1 := v.Args[1]
36979 if v_1.Op != OpAddr {
36980 break
36981 }
36982 a := v_1.Aux
36983 v.reset(OpConstBool)
36984 v.AuxInt = b2i(a != b)
36985 return true
36986 }
36987
36988
36989
36990 for {
36991 _ = v.Args[1]
36992 v_0 := v.Args[0]
36993 if v_0.Op != OpLocalAddr {
36994 break
36995 }
36996 a := v_0.Aux
36997 _ = v_0.Args[1]
36998 v_1 := v.Args[1]
36999 if v_1.Op != OpLocalAddr {
37000 break
37001 }
37002 b := v_1.Aux
37003 _ = v_1.Args[1]
37004 v.reset(OpConstBool)
37005 v.AuxInt = b2i(a != b)
37006 return true
37007 }
37008
37009
37010
37011 for {
37012 _ = v.Args[1]
37013 v_0 := v.Args[0]
37014 if v_0.Op != OpLocalAddr {
37015 break
37016 }
37017 b := v_0.Aux
37018 _ = v_0.Args[1]
37019 v_1 := v.Args[1]
37020 if v_1.Op != OpLocalAddr {
37021 break
37022 }
37023 a := v_1.Aux
37024 _ = v_1.Args[1]
37025 v.reset(OpConstBool)
37026 v.AuxInt = b2i(a != b)
37027 return true
37028 }
37029
37030
37031
37032 for {
37033 p2 := v.Args[1]
37034 v_0 := v.Args[0]
37035 if v_0.Op != OpOffPtr {
37036 break
37037 }
37038 o1 := v_0.AuxInt
37039 p1 := v_0.Args[0]
37040 if !(isSamePtr(p1, p2)) {
37041 break
37042 }
37043 v.reset(OpConstBool)
37044 v.AuxInt = b2i(o1 != 0)
37045 return true
37046 }
37047
37048
37049
37050 for {
37051 _ = v.Args[1]
37052 p2 := v.Args[0]
37053 v_1 := v.Args[1]
37054 if v_1.Op != OpOffPtr {
37055 break
37056 }
37057 o1 := v_1.AuxInt
37058 p1 := v_1.Args[0]
37059 if !(isSamePtr(p1, p2)) {
37060 break
37061 }
37062 v.reset(OpConstBool)
37063 v.AuxInt = b2i(o1 != 0)
37064 return true
37065 }
37066
37067
37068
37069 for {
37070 _ = v.Args[1]
37071 v_0 := v.Args[0]
37072 if v_0.Op != OpOffPtr {
37073 break
37074 }
37075 o1 := v_0.AuxInt
37076 p1 := v_0.Args[0]
37077 v_1 := v.Args[1]
37078 if v_1.Op != OpOffPtr {
37079 break
37080 }
37081 o2 := v_1.AuxInt
37082 p2 := v_1.Args[0]
37083 if !(isSamePtr(p1, p2)) {
37084 break
37085 }
37086 v.reset(OpConstBool)
37087 v.AuxInt = b2i(o1 != o2)
37088 return true
37089 }
37090
37091
37092
37093 for {
37094 _ = v.Args[1]
37095 v_0 := v.Args[0]
37096 if v_0.Op != OpOffPtr {
37097 break
37098 }
37099 o2 := v_0.AuxInt
37100 p2 := v_0.Args[0]
37101 v_1 := v.Args[1]
37102 if v_1.Op != OpOffPtr {
37103 break
37104 }
37105 o1 := v_1.AuxInt
37106 p1 := v_1.Args[0]
37107 if !(isSamePtr(p1, p2)) {
37108 break
37109 }
37110 v.reset(OpConstBool)
37111 v.AuxInt = b2i(o1 != o2)
37112 return true
37113 }
37114
37115
37116
37117 for {
37118 _ = v.Args[1]
37119 v_0 := v.Args[0]
37120 if v_0.Op != OpConst32 {
37121 break
37122 }
37123 c := v_0.AuxInt
37124 v_1 := v.Args[1]
37125 if v_1.Op != OpConst32 {
37126 break
37127 }
37128 d := v_1.AuxInt
37129 v.reset(OpConstBool)
37130 v.AuxInt = b2i(c != d)
37131 return true
37132 }
37133 return false
37134 }
37135 func rewriteValuegeneric_OpNeqPtr_10(v *Value) bool {
37136
37137
37138
37139 for {
37140 _ = v.Args[1]
37141 v_0 := v.Args[0]
37142 if v_0.Op != OpConst32 {
37143 break
37144 }
37145 d := v_0.AuxInt
37146 v_1 := v.Args[1]
37147 if v_1.Op != OpConst32 {
37148 break
37149 }
37150 c := v_1.AuxInt
37151 v.reset(OpConstBool)
37152 v.AuxInt = b2i(c != d)
37153 return true
37154 }
37155
37156
37157
37158 for {
37159 _ = v.Args[1]
37160 v_0 := v.Args[0]
37161 if v_0.Op != OpConst64 {
37162 break
37163 }
37164 c := v_0.AuxInt
37165 v_1 := v.Args[1]
37166 if v_1.Op != OpConst64 {
37167 break
37168 }
37169 d := v_1.AuxInt
37170 v.reset(OpConstBool)
37171 v.AuxInt = b2i(c != d)
37172 return true
37173 }
37174
37175
37176
37177 for {
37178 _ = v.Args[1]
37179 v_0 := v.Args[0]
37180 if v_0.Op != OpConst64 {
37181 break
37182 }
37183 d := v_0.AuxInt
37184 v_1 := v.Args[1]
37185 if v_1.Op != OpConst64 {
37186 break
37187 }
37188 c := v_1.AuxInt
37189 v.reset(OpConstBool)
37190 v.AuxInt = b2i(c != d)
37191 return true
37192 }
37193
37194
37195
37196 for {
37197 _ = v.Args[1]
37198 v_0 := v.Args[0]
37199 if v_0.Op != OpLocalAddr {
37200 break
37201 }
37202 _ = v_0.Args[1]
37203 v_1 := v.Args[1]
37204 if v_1.Op != OpAddr {
37205 break
37206 }
37207 v.reset(OpConstBool)
37208 v.AuxInt = 1
37209 return true
37210 }
37211
37212
37213
37214 for {
37215 _ = v.Args[1]
37216 v_0 := v.Args[0]
37217 if v_0.Op != OpAddr {
37218 break
37219 }
37220 v_1 := v.Args[1]
37221 if v_1.Op != OpLocalAddr {
37222 break
37223 }
37224 _ = v_1.Args[1]
37225 v.reset(OpConstBool)
37226 v.AuxInt = 1
37227 return true
37228 }
37229
37230
37231
37232 for {
37233 _ = v.Args[1]
37234 v_0 := v.Args[0]
37235 if v_0.Op != OpAddr {
37236 break
37237 }
37238 v_1 := v.Args[1]
37239 if v_1.Op != OpLocalAddr {
37240 break
37241 }
37242 _ = v_1.Args[1]
37243 v.reset(OpConstBool)
37244 v.AuxInt = 1
37245 return true
37246 }
37247
37248
37249
37250 for {
37251 _ = v.Args[1]
37252 v_0 := v.Args[0]
37253 if v_0.Op != OpLocalAddr {
37254 break
37255 }
37256 _ = v_0.Args[1]
37257 v_1 := v.Args[1]
37258 if v_1.Op != OpAddr {
37259 break
37260 }
37261 v.reset(OpConstBool)
37262 v.AuxInt = 1
37263 return true
37264 }
37265
37266
37267
37268 for {
37269 p2 := v.Args[1]
37270 v_0 := v.Args[0]
37271 if v_0.Op != OpAddPtr {
37272 break
37273 }
37274 o1 := v_0.Args[1]
37275 p1 := v_0.Args[0]
37276 if !(isSamePtr(p1, p2)) {
37277 break
37278 }
37279 v.reset(OpIsNonNil)
37280 v.AddArg(o1)
37281 return true
37282 }
37283
37284
37285
37286 for {
37287 _ = v.Args[1]
37288 p2 := v.Args[0]
37289 v_1 := v.Args[1]
37290 if v_1.Op != OpAddPtr {
37291 break
37292 }
37293 o1 := v_1.Args[1]
37294 p1 := v_1.Args[0]
37295 if !(isSamePtr(p1, p2)) {
37296 break
37297 }
37298 v.reset(OpIsNonNil)
37299 v.AddArg(o1)
37300 return true
37301 }
37302
37303
37304
37305 for {
37306 p := v.Args[1]
37307 v_0 := v.Args[0]
37308 if v_0.Op != OpConst32 {
37309 break
37310 }
37311 if v_0.AuxInt != 0 {
37312 break
37313 }
37314 v.reset(OpIsNonNil)
37315 v.AddArg(p)
37316 return true
37317 }
37318 return false
37319 }
37320 func rewriteValuegeneric_OpNeqPtr_20(v *Value) bool {
37321
37322
37323
37324 for {
37325 _ = v.Args[1]
37326 p := v.Args[0]
37327 v_1 := v.Args[1]
37328 if v_1.Op != OpConst32 {
37329 break
37330 }
37331 if v_1.AuxInt != 0 {
37332 break
37333 }
37334 v.reset(OpIsNonNil)
37335 v.AddArg(p)
37336 return true
37337 }
37338
37339
37340
37341 for {
37342 p := v.Args[1]
37343 v_0 := v.Args[0]
37344 if v_0.Op != OpConst64 {
37345 break
37346 }
37347 if v_0.AuxInt != 0 {
37348 break
37349 }
37350 v.reset(OpIsNonNil)
37351 v.AddArg(p)
37352 return true
37353 }
37354
37355
37356
37357 for {
37358 _ = v.Args[1]
37359 p := v.Args[0]
37360 v_1 := v.Args[1]
37361 if v_1.Op != OpConst64 {
37362 break
37363 }
37364 if v_1.AuxInt != 0 {
37365 break
37366 }
37367 v.reset(OpIsNonNil)
37368 v.AddArg(p)
37369 return true
37370 }
37371
37372
37373
37374 for {
37375 p := v.Args[1]
37376 v_0 := v.Args[0]
37377 if v_0.Op != OpConstNil {
37378 break
37379 }
37380 v.reset(OpIsNonNil)
37381 v.AddArg(p)
37382 return true
37383 }
37384
37385
37386
37387 for {
37388 _ = v.Args[1]
37389 p := v.Args[0]
37390 v_1 := v.Args[1]
37391 if v_1.Op != OpConstNil {
37392 break
37393 }
37394 v.reset(OpIsNonNil)
37395 v.AddArg(p)
37396 return true
37397 }
37398 return false
37399 }
37400 func rewriteValuegeneric_OpNeqSlice_0(v *Value) bool {
37401 b := v.Block
37402 typ := &b.Func.Config.Types
37403
37404
37405
37406 for {
37407 y := v.Args[1]
37408 x := v.Args[0]
37409 v.reset(OpNeqPtr)
37410 v0 := b.NewValue0(v.Pos, OpSlicePtr, typ.BytePtr)
37411 v0.AddArg(x)
37412 v.AddArg(v0)
37413 v1 := b.NewValue0(v.Pos, OpSlicePtr, typ.BytePtr)
37414 v1.AddArg(y)
37415 v.AddArg(v1)
37416 return true
37417 }
37418 }
37419 func rewriteValuegeneric_OpNilCheck_0(v *Value) bool {
37420 b := v.Block
37421 config := b.Func.Config
37422 fe := b.Func.fe
37423
37424
37425
37426 for {
37427 mem := v.Args[1]
37428 v_0 := v.Args[0]
37429 if v_0.Op != OpGetG {
37430 break
37431 }
37432 if mem != v_0.Args[0] {
37433 break
37434 }
37435 v.reset(OpCopy)
37436 v.Type = mem.Type
37437 v.AddArg(mem)
37438 return true
37439 }
37440
37441
37442
37443 for {
37444 _ = v.Args[1]
37445 v_0 := v.Args[0]
37446 if v_0.Op != OpLoad {
37447 break
37448 }
37449 _ = v_0.Args[1]
37450 v_0_0 := v_0.Args[0]
37451 if v_0_0.Op != OpOffPtr {
37452 break
37453 }
37454 c := v_0_0.AuxInt
37455 v_0_0_0 := v_0_0.Args[0]
37456 if v_0_0_0.Op != OpSP {
37457 break
37458 }
37459 v_0_1 := v_0.Args[1]
37460 if v_0_1.Op != OpStaticCall {
37461 break
37462 }
37463 sym := v_0_1.Aux
37464 if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
37465 break
37466 }
37467 v.reset(OpInvalid)
37468 return true
37469 }
37470
37471
37472
37473 for {
37474 _ = v.Args[1]
37475 v_0 := v.Args[0]
37476 if v_0.Op != OpOffPtr {
37477 break
37478 }
37479 v_0_0 := v_0.Args[0]
37480 if v_0_0.Op != OpLoad {
37481 break
37482 }
37483 _ = v_0_0.Args[1]
37484 v_0_0_0 := v_0_0.Args[0]
37485 if v_0_0_0.Op != OpOffPtr {
37486 break
37487 }
37488 c := v_0_0_0.AuxInt
37489 v_0_0_0_0 := v_0_0_0.Args[0]
37490 if v_0_0_0_0.Op != OpSP {
37491 break
37492 }
37493 v_0_0_1 := v_0_0.Args[1]
37494 if v_0_0_1.Op != OpStaticCall {
37495 break
37496 }
37497 sym := v_0_0_1.Aux
37498 if !(isSameSym(sym, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
37499 break
37500 }
37501 v.reset(OpInvalid)
37502 return true
37503 }
37504 return false
37505 }
37506 func rewriteValuegeneric_OpNot_0(v *Value) bool {
37507
37508
37509
37510 for {
37511 v_0 := v.Args[0]
37512 if v_0.Op != OpConstBool {
37513 break
37514 }
37515 c := v_0.AuxInt
37516 v.reset(OpConstBool)
37517 v.AuxInt = 1 - c
37518 return true
37519 }
37520
37521
37522
37523 for {
37524 v_0 := v.Args[0]
37525 if v_0.Op != OpEq64 {
37526 break
37527 }
37528 y := v_0.Args[1]
37529 x := v_0.Args[0]
37530 v.reset(OpNeq64)
37531 v.AddArg(x)
37532 v.AddArg(y)
37533 return true
37534 }
37535
37536
37537
37538 for {
37539 v_0 := v.Args[0]
37540 if v_0.Op != OpEq32 {
37541 break
37542 }
37543 y := v_0.Args[1]
37544 x := v_0.Args[0]
37545 v.reset(OpNeq32)
37546 v.AddArg(x)
37547 v.AddArg(y)
37548 return true
37549 }
37550
37551
37552
37553 for {
37554 v_0 := v.Args[0]
37555 if v_0.Op != OpEq16 {
37556 break
37557 }
37558 y := v_0.Args[1]
37559 x := v_0.Args[0]
37560 v.reset(OpNeq16)
37561 v.AddArg(x)
37562 v.AddArg(y)
37563 return true
37564 }
37565
37566
37567
37568 for {
37569 v_0 := v.Args[0]
37570 if v_0.Op != OpEq8 {
37571 break
37572 }
37573 y := v_0.Args[1]
37574 x := v_0.Args[0]
37575 v.reset(OpNeq8)
37576 v.AddArg(x)
37577 v.AddArg(y)
37578 return true
37579 }
37580
37581
37582
37583 for {
37584 v_0 := v.Args[0]
37585 if v_0.Op != OpEqB {
37586 break
37587 }
37588 y := v_0.Args[1]
37589 x := v_0.Args[0]
37590 v.reset(OpNeqB)
37591 v.AddArg(x)
37592 v.AddArg(y)
37593 return true
37594 }
37595
37596
37597
37598 for {
37599 v_0 := v.Args[0]
37600 if v_0.Op != OpNeq64 {
37601 break
37602 }
37603 y := v_0.Args[1]
37604 x := v_0.Args[0]
37605 v.reset(OpEq64)
37606 v.AddArg(x)
37607 v.AddArg(y)
37608 return true
37609 }
37610
37611
37612
37613 for {
37614 v_0 := v.Args[0]
37615 if v_0.Op != OpNeq32 {
37616 break
37617 }
37618 y := v_0.Args[1]
37619 x := v_0.Args[0]
37620 v.reset(OpEq32)
37621 v.AddArg(x)
37622 v.AddArg(y)
37623 return true
37624 }
37625
37626
37627
37628 for {
37629 v_0 := v.Args[0]
37630 if v_0.Op != OpNeq16 {
37631 break
37632 }
37633 y := v_0.Args[1]
37634 x := v_0.Args[0]
37635 v.reset(OpEq16)
37636 v.AddArg(x)
37637 v.AddArg(y)
37638 return true
37639 }
37640
37641
37642
37643 for {
37644 v_0 := v.Args[0]
37645 if v_0.Op != OpNeq8 {
37646 break
37647 }
37648 y := v_0.Args[1]
37649 x := v_0.Args[0]
37650 v.reset(OpEq8)
37651 v.AddArg(x)
37652 v.AddArg(y)
37653 return true
37654 }
37655 return false
37656 }
37657 func rewriteValuegeneric_OpNot_10(v *Value) bool {
37658
37659
37660
37661 for {
37662 v_0 := v.Args[0]
37663 if v_0.Op != OpNeqB {
37664 break
37665 }
37666 y := v_0.Args[1]
37667 x := v_0.Args[0]
37668 v.reset(OpEqB)
37669 v.AddArg(x)
37670 v.AddArg(y)
37671 return true
37672 }
37673
37674
37675
37676 for {
37677 v_0 := v.Args[0]
37678 if v_0.Op != OpGreater64 {
37679 break
37680 }
37681 y := v_0.Args[1]
37682 x := v_0.Args[0]
37683 v.reset(OpLeq64)
37684 v.AddArg(x)
37685 v.AddArg(y)
37686 return true
37687 }
37688
37689
37690
37691 for {
37692 v_0 := v.Args[0]
37693 if v_0.Op != OpGreater32 {
37694 break
37695 }
37696 y := v_0.Args[1]
37697 x := v_0.Args[0]
37698 v.reset(OpLeq32)
37699 v.AddArg(x)
37700 v.AddArg(y)
37701 return true
37702 }
37703
37704
37705
37706 for {
37707 v_0 := v.Args[0]
37708 if v_0.Op != OpGreater16 {
37709 break
37710 }
37711 y := v_0.Args[1]
37712 x := v_0.Args[0]
37713 v.reset(OpLeq16)
37714 v.AddArg(x)
37715 v.AddArg(y)
37716 return true
37717 }
37718
37719
37720
37721 for {
37722 v_0 := v.Args[0]
37723 if v_0.Op != OpGreater8 {
37724 break
37725 }
37726 y := v_0.Args[1]
37727 x := v_0.Args[0]
37728 v.reset(OpLeq8)
37729 v.AddArg(x)
37730 v.AddArg(y)
37731 return true
37732 }
37733
37734
37735
37736 for {
37737 v_0 := v.Args[0]
37738 if v_0.Op != OpGreater64U {
37739 break
37740 }
37741 y := v_0.Args[1]
37742 x := v_0.Args[0]
37743 v.reset(OpLeq64U)
37744 v.AddArg(x)
37745 v.AddArg(y)
37746 return true
37747 }
37748
37749
37750
37751 for {
37752 v_0 := v.Args[0]
37753 if v_0.Op != OpGreater32U {
37754 break
37755 }
37756 y := v_0.Args[1]
37757 x := v_0.Args[0]
37758 v.reset(OpLeq32U)
37759 v.AddArg(x)
37760 v.AddArg(y)
37761 return true
37762 }
37763
37764
37765
37766 for {
37767 v_0 := v.Args[0]
37768 if v_0.Op != OpGreater16U {
37769 break
37770 }
37771 y := v_0.Args[1]
37772 x := v_0.Args[0]
37773 v.reset(OpLeq16U)
37774 v.AddArg(x)
37775 v.AddArg(y)
37776 return true
37777 }
37778
37779
37780
37781 for {
37782 v_0 := v.Args[0]
37783 if v_0.Op != OpGreater8U {
37784 break
37785 }
37786 y := v_0.Args[1]
37787 x := v_0.Args[0]
37788 v.reset(OpLeq8U)
37789 v.AddArg(x)
37790 v.AddArg(y)
37791 return true
37792 }
37793
37794
37795
37796 for {
37797 v_0 := v.Args[0]
37798 if v_0.Op != OpGeq64 {
37799 break
37800 }
37801 y := v_0.Args[1]
37802 x := v_0.Args[0]
37803 v.reset(OpLess64)
37804 v.AddArg(x)
37805 v.AddArg(y)
37806 return true
37807 }
37808 return false
37809 }
37810 func rewriteValuegeneric_OpNot_20(v *Value) bool {
37811
37812
37813
37814 for {
37815 v_0 := v.Args[0]
37816 if v_0.Op != OpGeq32 {
37817 break
37818 }
37819 y := v_0.Args[1]
37820 x := v_0.Args[0]
37821 v.reset(OpLess32)
37822 v.AddArg(x)
37823 v.AddArg(y)
37824 return true
37825 }
37826
37827
37828
37829 for {
37830 v_0 := v.Args[0]
37831 if v_0.Op != OpGeq16 {
37832 break
37833 }
37834 y := v_0.Args[1]
37835 x := v_0.Args[0]
37836 v.reset(OpLess16)
37837 v.AddArg(x)
37838 v.AddArg(y)
37839 return true
37840 }
37841
37842
37843
37844 for {
37845 v_0 := v.Args[0]
37846 if v_0.Op != OpGeq8 {
37847 break
37848 }
37849 y := v_0.Args[1]
37850 x := v_0.Args[0]
37851 v.reset(OpLess8)
37852 v.AddArg(x)
37853 v.AddArg(y)
37854 return true
37855 }
37856
37857
37858
37859 for {
37860 v_0 := v.Args[0]
37861 if v_0.Op != OpGeq64U {
37862 break
37863 }
37864 y := v_0.Args[1]
37865 x := v_0.Args[0]
37866 v.reset(OpLess64U)
37867 v.AddArg(x)
37868 v.AddArg(y)
37869 return true
37870 }
37871
37872
37873
37874 for {
37875 v_0 := v.Args[0]
37876 if v_0.Op != OpGeq32U {
37877 break
37878 }
37879 y := v_0.Args[1]
37880 x := v_0.Args[0]
37881 v.reset(OpLess32U)
37882 v.AddArg(x)
37883 v.AddArg(y)
37884 return true
37885 }
37886
37887
37888
37889 for {
37890 v_0 := v.Args[0]
37891 if v_0.Op != OpGeq16U {
37892 break
37893 }
37894 y := v_0.Args[1]
37895 x := v_0.Args[0]
37896 v.reset(OpLess16U)
37897 v.AddArg(x)
37898 v.AddArg(y)
37899 return true
37900 }
37901
37902
37903
37904 for {
37905 v_0 := v.Args[0]
37906 if v_0.Op != OpGeq8U {
37907 break
37908 }
37909 y := v_0.Args[1]
37910 x := v_0.Args[0]
37911 v.reset(OpLess8U)
37912 v.AddArg(x)
37913 v.AddArg(y)
37914 return true
37915 }
37916
37917
37918
37919 for {
37920 v_0 := v.Args[0]
37921 if v_0.Op != OpLess64 {
37922 break
37923 }
37924 y := v_0.Args[1]
37925 x := v_0.Args[0]
37926 v.reset(OpGeq64)
37927 v.AddArg(x)
37928 v.AddArg(y)
37929 return true
37930 }
37931
37932
37933
37934 for {
37935 v_0 := v.Args[0]
37936 if v_0.Op != OpLess32 {
37937 break
37938 }
37939 y := v_0.Args[1]
37940 x := v_0.Args[0]
37941 v.reset(OpGeq32)
37942 v.AddArg(x)
37943 v.AddArg(y)
37944 return true
37945 }
37946
37947
37948
37949 for {
37950 v_0 := v.Args[0]
37951 if v_0.Op != OpLess16 {
37952 break
37953 }
37954 y := v_0.Args[1]
37955 x := v_0.Args[0]
37956 v.reset(OpGeq16)
37957 v.AddArg(x)
37958 v.AddArg(y)
37959 return true
37960 }
37961 return false
37962 }
37963 func rewriteValuegeneric_OpNot_30(v *Value) bool {
37964
37965
37966
37967 for {
37968 v_0 := v.Args[0]
37969 if v_0.Op != OpLess8 {
37970 break
37971 }
37972 y := v_0.Args[1]
37973 x := v_0.Args[0]
37974 v.reset(OpGeq8)
37975 v.AddArg(x)
37976 v.AddArg(y)
37977 return true
37978 }
37979
37980
37981
37982 for {
37983 v_0 := v.Args[0]
37984 if v_0.Op != OpLess64U {
37985 break
37986 }
37987 y := v_0.Args[1]
37988 x := v_0.Args[0]
37989 v.reset(OpGeq64U)
37990 v.AddArg(x)
37991 v.AddArg(y)
37992 return true
37993 }
37994
37995
37996
37997 for {
37998 v_0 := v.Args[0]
37999 if v_0.Op != OpLess32U {
38000 break
38001 }
38002 y := v_0.Args[1]
38003 x := v_0.Args[0]
38004 v.reset(OpGeq32U)
38005 v.AddArg(x)
38006 v.AddArg(y)
38007 return true
38008 }
38009
38010
38011
38012 for {
38013 v_0 := v.Args[0]
38014 if v_0.Op != OpLess16U {
38015 break
38016 }
38017 y := v_0.Args[1]
38018 x := v_0.Args[0]
38019 v.reset(OpGeq16U)
38020 v.AddArg(x)
38021 v.AddArg(y)
38022 return true
38023 }
38024
38025
38026
38027 for {
38028 v_0 := v.Args[0]
38029 if v_0.Op != OpLess8U {
38030 break
38031 }
38032 y := v_0.Args[1]
38033 x := v_0.Args[0]
38034 v.reset(OpGeq8U)
38035 v.AddArg(x)
38036 v.AddArg(y)
38037 return true
38038 }
38039
38040
38041
38042 for {
38043 v_0 := v.Args[0]
38044 if v_0.Op != OpLeq64 {
38045 break
38046 }
38047 y := v_0.Args[1]
38048 x := v_0.Args[0]
38049 v.reset(OpGreater64)
38050 v.AddArg(x)
38051 v.AddArg(y)
38052 return true
38053 }
38054
38055
38056
38057 for {
38058 v_0 := v.Args[0]
38059 if v_0.Op != OpLeq32 {
38060 break
38061 }
38062 y := v_0.Args[1]
38063 x := v_0.Args[0]
38064 v.reset(OpGreater32)
38065 v.AddArg(x)
38066 v.AddArg(y)
38067 return true
38068 }
38069
38070
38071
38072 for {
38073 v_0 := v.Args[0]
38074 if v_0.Op != OpLeq16 {
38075 break
38076 }
38077 y := v_0.Args[1]
38078 x := v_0.Args[0]
38079 v.reset(OpGreater16)
38080 v.AddArg(x)
38081 v.AddArg(y)
38082 return true
38083 }
38084
38085
38086
38087 for {
38088 v_0 := v.Args[0]
38089 if v_0.Op != OpLeq8 {
38090 break
38091 }
38092 y := v_0.Args[1]
38093 x := v_0.Args[0]
38094 v.reset(OpGreater8)
38095 v.AddArg(x)
38096 v.AddArg(y)
38097 return true
38098 }
38099
38100
38101
38102 for {
38103 v_0 := v.Args[0]
38104 if v_0.Op != OpLeq64U {
38105 break
38106 }
38107 y := v_0.Args[1]
38108 x := v_0.Args[0]
38109 v.reset(OpGreater64U)
38110 v.AddArg(x)
38111 v.AddArg(y)
38112 return true
38113 }
38114 return false
38115 }
38116 func rewriteValuegeneric_OpNot_40(v *Value) bool {
38117
38118
38119
38120 for {
38121 v_0 := v.Args[0]
38122 if v_0.Op != OpLeq32U {
38123 break
38124 }
38125 y := v_0.Args[1]
38126 x := v_0.Args[0]
38127 v.reset(OpGreater32U)
38128 v.AddArg(x)
38129 v.AddArg(y)
38130 return true
38131 }
38132
38133
38134
38135 for {
38136 v_0 := v.Args[0]
38137 if v_0.Op != OpLeq16U {
38138 break
38139 }
38140 y := v_0.Args[1]
38141 x := v_0.Args[0]
38142 v.reset(OpGreater16U)
38143 v.AddArg(x)
38144 v.AddArg(y)
38145 return true
38146 }
38147
38148
38149
38150 for {
38151 v_0 := v.Args[0]
38152 if v_0.Op != OpLeq8U {
38153 break
38154 }
38155 y := v_0.Args[1]
38156 x := v_0.Args[0]
38157 v.reset(OpGreater8U)
38158 v.AddArg(x)
38159 v.AddArg(y)
38160 return true
38161 }
38162 return false
38163 }
38164 func rewriteValuegeneric_OpOffPtr_0(v *Value) bool {
38165
38166
38167
38168 for {
38169 a := v.AuxInt
38170 v_0 := v.Args[0]
38171 if v_0.Op != OpOffPtr {
38172 break
38173 }
38174 b := v_0.AuxInt
38175 p := v_0.Args[0]
38176 v.reset(OpOffPtr)
38177 v.AuxInt = a + b
38178 v.AddArg(p)
38179 return true
38180 }
38181
38182
38183
38184 for {
38185 if v.AuxInt != 0 {
38186 break
38187 }
38188 p := v.Args[0]
38189 if !(v.Type.Compare(p.Type) == types.CMPeq) {
38190 break
38191 }
38192 v.reset(OpCopy)
38193 v.Type = p.Type
38194 v.AddArg(p)
38195 return true
38196 }
38197 return false
38198 }
38199 func rewriteValuegeneric_OpOr16_0(v *Value) bool {
38200
38201
38202
38203 for {
38204 _ = v.Args[1]
38205 v_0 := v.Args[0]
38206 if v_0.Op != OpConst16 {
38207 break
38208 }
38209 c := v_0.AuxInt
38210 v_1 := v.Args[1]
38211 if v_1.Op != OpConst16 {
38212 break
38213 }
38214 d := v_1.AuxInt
38215 v.reset(OpConst16)
38216 v.AuxInt = int64(int16(c | d))
38217 return true
38218 }
38219
38220
38221
38222 for {
38223 _ = v.Args[1]
38224 v_0 := v.Args[0]
38225 if v_0.Op != OpConst16 {
38226 break
38227 }
38228 d := v_0.AuxInt
38229 v_1 := v.Args[1]
38230 if v_1.Op != OpConst16 {
38231 break
38232 }
38233 c := v_1.AuxInt
38234 v.reset(OpConst16)
38235 v.AuxInt = int64(int16(c | d))
38236 return true
38237 }
38238
38239
38240
38241 for {
38242 x := v.Args[1]
38243 if x != v.Args[0] {
38244 break
38245 }
38246 v.reset(OpCopy)
38247 v.Type = x.Type
38248 v.AddArg(x)
38249 return true
38250 }
38251
38252
38253
38254 for {
38255 x := v.Args[1]
38256 v_0 := v.Args[0]
38257 if v_0.Op != OpConst16 {
38258 break
38259 }
38260 if v_0.AuxInt != 0 {
38261 break
38262 }
38263 v.reset(OpCopy)
38264 v.Type = x.Type
38265 v.AddArg(x)
38266 return true
38267 }
38268
38269
38270
38271 for {
38272 _ = v.Args[1]
38273 x := v.Args[0]
38274 v_1 := v.Args[1]
38275 if v_1.Op != OpConst16 {
38276 break
38277 }
38278 if v_1.AuxInt != 0 {
38279 break
38280 }
38281 v.reset(OpCopy)
38282 v.Type = x.Type
38283 v.AddArg(x)
38284 return true
38285 }
38286
38287
38288
38289 for {
38290 _ = v.Args[1]
38291 v_0 := v.Args[0]
38292 if v_0.Op != OpConst16 {
38293 break
38294 }
38295 if v_0.AuxInt != -1 {
38296 break
38297 }
38298 v.reset(OpConst16)
38299 v.AuxInt = -1
38300 return true
38301 }
38302
38303
38304
38305 for {
38306 _ = v.Args[1]
38307 v_1 := v.Args[1]
38308 if v_1.Op != OpConst16 {
38309 break
38310 }
38311 if v_1.AuxInt != -1 {
38312 break
38313 }
38314 v.reset(OpConst16)
38315 v.AuxInt = -1
38316 return true
38317 }
38318
38319
38320
38321 for {
38322 _ = v.Args[1]
38323 x := v.Args[0]
38324 v_1 := v.Args[1]
38325 if v_1.Op != OpOr16 {
38326 break
38327 }
38328 y := v_1.Args[1]
38329 if x != v_1.Args[0] {
38330 break
38331 }
38332 v.reset(OpOr16)
38333 v.AddArg(x)
38334 v.AddArg(y)
38335 return true
38336 }
38337
38338
38339
38340 for {
38341 _ = v.Args[1]
38342 x := v.Args[0]
38343 v_1 := v.Args[1]
38344 if v_1.Op != OpOr16 {
38345 break
38346 }
38347 _ = v_1.Args[1]
38348 y := v_1.Args[0]
38349 if x != v_1.Args[1] {
38350 break
38351 }
38352 v.reset(OpOr16)
38353 v.AddArg(x)
38354 v.AddArg(y)
38355 return true
38356 }
38357
38358
38359
38360 for {
38361 x := v.Args[1]
38362 v_0 := v.Args[0]
38363 if v_0.Op != OpOr16 {
38364 break
38365 }
38366 y := v_0.Args[1]
38367 if x != v_0.Args[0] {
38368 break
38369 }
38370 v.reset(OpOr16)
38371 v.AddArg(x)
38372 v.AddArg(y)
38373 return true
38374 }
38375 return false
38376 }
38377 func rewriteValuegeneric_OpOr16_10(v *Value) bool {
38378 b := v.Block
38379
38380
38381
38382 for {
38383 x := v.Args[1]
38384 v_0 := v.Args[0]
38385 if v_0.Op != OpOr16 {
38386 break
38387 }
38388 _ = v_0.Args[1]
38389 y := v_0.Args[0]
38390 if x != v_0.Args[1] {
38391 break
38392 }
38393 v.reset(OpOr16)
38394 v.AddArg(x)
38395 v.AddArg(y)
38396 return true
38397 }
38398
38399
38400
38401 for {
38402 _ = v.Args[1]
38403 v_0 := v.Args[0]
38404 if v_0.Op != OpAnd16 {
38405 break
38406 }
38407 _ = v_0.Args[1]
38408 x := v_0.Args[0]
38409 v_0_1 := v_0.Args[1]
38410 if v_0_1.Op != OpConst16 {
38411 break
38412 }
38413 c2 := v_0_1.AuxInt
38414 v_1 := v.Args[1]
38415 if v_1.Op != OpConst16 {
38416 break
38417 }
38418 t := v_1.Type
38419 c1 := v_1.AuxInt
38420 if !(^(c1 | c2) == 0) {
38421 break
38422 }
38423 v.reset(OpOr16)
38424 v0 := b.NewValue0(v.Pos, OpConst16, t)
38425 v0.AuxInt = c1
38426 v.AddArg(v0)
38427 v.AddArg(x)
38428 return true
38429 }
38430
38431
38432
38433 for {
38434 _ = v.Args[1]
38435 v_0 := v.Args[0]
38436 if v_0.Op != OpAnd16 {
38437 break
38438 }
38439 x := v_0.Args[1]
38440 v_0_0 := v_0.Args[0]
38441 if v_0_0.Op != OpConst16 {
38442 break
38443 }
38444 c2 := v_0_0.AuxInt
38445 v_1 := v.Args[1]
38446 if v_1.Op != OpConst16 {
38447 break
38448 }
38449 t := v_1.Type
38450 c1 := v_1.AuxInt
38451 if !(^(c1 | c2) == 0) {
38452 break
38453 }
38454 v.reset(OpOr16)
38455 v0 := b.NewValue0(v.Pos, OpConst16, t)
38456 v0.AuxInt = c1
38457 v.AddArg(v0)
38458 v.AddArg(x)
38459 return true
38460 }
38461
38462
38463
38464 for {
38465 _ = v.Args[1]
38466 v_0 := v.Args[0]
38467 if v_0.Op != OpConst16 {
38468 break
38469 }
38470 t := v_0.Type
38471 c1 := v_0.AuxInt
38472 v_1 := v.Args[1]
38473 if v_1.Op != OpAnd16 {
38474 break
38475 }
38476 _ = v_1.Args[1]
38477 x := v_1.Args[0]
38478 v_1_1 := v_1.Args[1]
38479 if v_1_1.Op != OpConst16 {
38480 break
38481 }
38482 c2 := v_1_1.AuxInt
38483 if !(^(c1 | c2) == 0) {
38484 break
38485 }
38486 v.reset(OpOr16)
38487 v0 := b.NewValue0(v.Pos, OpConst16, t)
38488 v0.AuxInt = c1
38489 v.AddArg(v0)
38490 v.AddArg(x)
38491 return true
38492 }
38493
38494
38495
38496 for {
38497 _ = v.Args[1]
38498 v_0 := v.Args[0]
38499 if v_0.Op != OpConst16 {
38500 break
38501 }
38502 t := v_0.Type
38503 c1 := v_0.AuxInt
38504 v_1 := v.Args[1]
38505 if v_1.Op != OpAnd16 {
38506 break
38507 }
38508 x := v_1.Args[1]
38509 v_1_0 := v_1.Args[0]
38510 if v_1_0.Op != OpConst16 {
38511 break
38512 }
38513 c2 := v_1_0.AuxInt
38514 if !(^(c1 | c2) == 0) {
38515 break
38516 }
38517 v.reset(OpOr16)
38518 v0 := b.NewValue0(v.Pos, OpConst16, t)
38519 v0.AuxInt = c1
38520 v.AddArg(v0)
38521 v.AddArg(x)
38522 return true
38523 }
38524
38525
38526
38527 for {
38528 x := v.Args[1]
38529 v_0 := v.Args[0]
38530 if v_0.Op != OpOr16 {
38531 break
38532 }
38533 z := v_0.Args[1]
38534 i := v_0.Args[0]
38535 if i.Op != OpConst16 {
38536 break
38537 }
38538 t := i.Type
38539 if !(z.Op != OpConst16 && x.Op != OpConst16) {
38540 break
38541 }
38542 v.reset(OpOr16)
38543 v.AddArg(i)
38544 v0 := b.NewValue0(v.Pos, OpOr16, t)
38545 v0.AddArg(z)
38546 v0.AddArg(x)
38547 v.AddArg(v0)
38548 return true
38549 }
38550
38551
38552
38553 for {
38554 x := v.Args[1]
38555 v_0 := v.Args[0]
38556 if v_0.Op != OpOr16 {
38557 break
38558 }
38559 _ = v_0.Args[1]
38560 z := v_0.Args[0]
38561 i := v_0.Args[1]
38562 if i.Op != OpConst16 {
38563 break
38564 }
38565 t := i.Type
38566 if !(z.Op != OpConst16 && x.Op != OpConst16) {
38567 break
38568 }
38569 v.reset(OpOr16)
38570 v.AddArg(i)
38571 v0 := b.NewValue0(v.Pos, OpOr16, t)
38572 v0.AddArg(z)
38573 v0.AddArg(x)
38574 v.AddArg(v0)
38575 return true
38576 }
38577
38578
38579
38580 for {
38581 _ = v.Args[1]
38582 x := v.Args[0]
38583 v_1 := v.Args[1]
38584 if v_1.Op != OpOr16 {
38585 break
38586 }
38587 z := v_1.Args[1]
38588 i := v_1.Args[0]
38589 if i.Op != OpConst16 {
38590 break
38591 }
38592 t := i.Type
38593 if !(z.Op != OpConst16 && x.Op != OpConst16) {
38594 break
38595 }
38596 v.reset(OpOr16)
38597 v.AddArg(i)
38598 v0 := b.NewValue0(v.Pos, OpOr16, t)
38599 v0.AddArg(z)
38600 v0.AddArg(x)
38601 v.AddArg(v0)
38602 return true
38603 }
38604
38605
38606
38607 for {
38608 _ = v.Args[1]
38609 x := v.Args[0]
38610 v_1 := v.Args[1]
38611 if v_1.Op != OpOr16 {
38612 break
38613 }
38614 _ = v_1.Args[1]
38615 z := v_1.Args[0]
38616 i := v_1.Args[1]
38617 if i.Op != OpConst16 {
38618 break
38619 }
38620 t := i.Type
38621 if !(z.Op != OpConst16 && x.Op != OpConst16) {
38622 break
38623 }
38624 v.reset(OpOr16)
38625 v.AddArg(i)
38626 v0 := b.NewValue0(v.Pos, OpOr16, t)
38627 v0.AddArg(z)
38628 v0.AddArg(x)
38629 v.AddArg(v0)
38630 return true
38631 }
38632
38633
38634
38635 for {
38636 _ = v.Args[1]
38637 v_0 := v.Args[0]
38638 if v_0.Op != OpConst16 {
38639 break
38640 }
38641 t := v_0.Type
38642 c := v_0.AuxInt
38643 v_1 := v.Args[1]
38644 if v_1.Op != OpOr16 {
38645 break
38646 }
38647 x := v_1.Args[1]
38648 v_1_0 := v_1.Args[0]
38649 if v_1_0.Op != OpConst16 {
38650 break
38651 }
38652 if v_1_0.Type != t {
38653 break
38654 }
38655 d := v_1_0.AuxInt
38656 v.reset(OpOr16)
38657 v0 := b.NewValue0(v.Pos, OpConst16, t)
38658 v0.AuxInt = int64(int16(c | d))
38659 v.AddArg(v0)
38660 v.AddArg(x)
38661 return true
38662 }
38663 return false
38664 }
38665 func rewriteValuegeneric_OpOr16_20(v *Value) bool {
38666 b := v.Block
38667
38668
38669
38670 for {
38671 _ = v.Args[1]
38672 v_0 := v.Args[0]
38673 if v_0.Op != OpConst16 {
38674 break
38675 }
38676 t := v_0.Type
38677 c := v_0.AuxInt
38678 v_1 := v.Args[1]
38679 if v_1.Op != OpOr16 {
38680 break
38681 }
38682 _ = v_1.Args[1]
38683 x := v_1.Args[0]
38684 v_1_1 := v_1.Args[1]
38685 if v_1_1.Op != OpConst16 {
38686 break
38687 }
38688 if v_1_1.Type != t {
38689 break
38690 }
38691 d := v_1_1.AuxInt
38692 v.reset(OpOr16)
38693 v0 := b.NewValue0(v.Pos, OpConst16, t)
38694 v0.AuxInt = int64(int16(c | d))
38695 v.AddArg(v0)
38696 v.AddArg(x)
38697 return true
38698 }
38699
38700
38701
38702 for {
38703 _ = v.Args[1]
38704 v_0 := v.Args[0]
38705 if v_0.Op != OpOr16 {
38706 break
38707 }
38708 x := v_0.Args[1]
38709 v_0_0 := v_0.Args[0]
38710 if v_0_0.Op != OpConst16 {
38711 break
38712 }
38713 t := v_0_0.Type
38714 d := v_0_0.AuxInt
38715 v_1 := v.Args[1]
38716 if v_1.Op != OpConst16 {
38717 break
38718 }
38719 if v_1.Type != t {
38720 break
38721 }
38722 c := v_1.AuxInt
38723 v.reset(OpOr16)
38724 v0 := b.NewValue0(v.Pos, OpConst16, t)
38725 v0.AuxInt = int64(int16(c | d))
38726 v.AddArg(v0)
38727 v.AddArg(x)
38728 return true
38729 }
38730
38731
38732
38733 for {
38734 _ = v.Args[1]
38735 v_0 := v.Args[0]
38736 if v_0.Op != OpOr16 {
38737 break
38738 }
38739 _ = v_0.Args[1]
38740 x := v_0.Args[0]
38741 v_0_1 := v_0.Args[1]
38742 if v_0_1.Op != OpConst16 {
38743 break
38744 }
38745 t := v_0_1.Type
38746 d := v_0_1.AuxInt
38747 v_1 := v.Args[1]
38748 if v_1.Op != OpConst16 {
38749 break
38750 }
38751 if v_1.Type != t {
38752 break
38753 }
38754 c := v_1.AuxInt
38755 v.reset(OpOr16)
38756 v0 := b.NewValue0(v.Pos, OpConst16, t)
38757 v0.AuxInt = int64(int16(c | d))
38758 v.AddArg(v0)
38759 v.AddArg(x)
38760 return true
38761 }
38762 return false
38763 }
38764 func rewriteValuegeneric_OpOr32_0(v *Value) bool {
38765
38766
38767
38768 for {
38769 _ = v.Args[1]
38770 v_0 := v.Args[0]
38771 if v_0.Op != OpConst32 {
38772 break
38773 }
38774 c := v_0.AuxInt
38775 v_1 := v.Args[1]
38776 if v_1.Op != OpConst32 {
38777 break
38778 }
38779 d := v_1.AuxInt
38780 v.reset(OpConst32)
38781 v.AuxInt = int64(int32(c | d))
38782 return true
38783 }
38784
38785
38786
38787 for {
38788 _ = v.Args[1]
38789 v_0 := v.Args[0]
38790 if v_0.Op != OpConst32 {
38791 break
38792 }
38793 d := v_0.AuxInt
38794 v_1 := v.Args[1]
38795 if v_1.Op != OpConst32 {
38796 break
38797 }
38798 c := v_1.AuxInt
38799 v.reset(OpConst32)
38800 v.AuxInt = int64(int32(c | d))
38801 return true
38802 }
38803
38804
38805
38806 for {
38807 x := v.Args[1]
38808 if x != v.Args[0] {
38809 break
38810 }
38811 v.reset(OpCopy)
38812 v.Type = x.Type
38813 v.AddArg(x)
38814 return true
38815 }
38816
38817
38818
38819 for {
38820 x := v.Args[1]
38821 v_0 := v.Args[0]
38822 if v_0.Op != OpConst32 {
38823 break
38824 }
38825 if v_0.AuxInt != 0 {
38826 break
38827 }
38828 v.reset(OpCopy)
38829 v.Type = x.Type
38830 v.AddArg(x)
38831 return true
38832 }
38833
38834
38835
38836 for {
38837 _ = v.Args[1]
38838 x := v.Args[0]
38839 v_1 := v.Args[1]
38840 if v_1.Op != OpConst32 {
38841 break
38842 }
38843 if v_1.AuxInt != 0 {
38844 break
38845 }
38846 v.reset(OpCopy)
38847 v.Type = x.Type
38848 v.AddArg(x)
38849 return true
38850 }
38851
38852
38853
38854 for {
38855 _ = v.Args[1]
38856 v_0 := v.Args[0]
38857 if v_0.Op != OpConst32 {
38858 break
38859 }
38860 if v_0.AuxInt != -1 {
38861 break
38862 }
38863 v.reset(OpConst32)
38864 v.AuxInt = -1
38865 return true
38866 }
38867
38868
38869
38870 for {
38871 _ = v.Args[1]
38872 v_1 := v.Args[1]
38873 if v_1.Op != OpConst32 {
38874 break
38875 }
38876 if v_1.AuxInt != -1 {
38877 break
38878 }
38879 v.reset(OpConst32)
38880 v.AuxInt = -1
38881 return true
38882 }
38883
38884
38885
38886 for {
38887 _ = v.Args[1]
38888 x := v.Args[0]
38889 v_1 := v.Args[1]
38890 if v_1.Op != OpOr32 {
38891 break
38892 }
38893 y := v_1.Args[1]
38894 if x != v_1.Args[0] {
38895 break
38896 }
38897 v.reset(OpOr32)
38898 v.AddArg(x)
38899 v.AddArg(y)
38900 return true
38901 }
38902
38903
38904
38905 for {
38906 _ = v.Args[1]
38907 x := v.Args[0]
38908 v_1 := v.Args[1]
38909 if v_1.Op != OpOr32 {
38910 break
38911 }
38912 _ = v_1.Args[1]
38913 y := v_1.Args[0]
38914 if x != v_1.Args[1] {
38915 break
38916 }
38917 v.reset(OpOr32)
38918 v.AddArg(x)
38919 v.AddArg(y)
38920 return true
38921 }
38922
38923
38924
38925 for {
38926 x := v.Args[1]
38927 v_0 := v.Args[0]
38928 if v_0.Op != OpOr32 {
38929 break
38930 }
38931 y := v_0.Args[1]
38932 if x != v_0.Args[0] {
38933 break
38934 }
38935 v.reset(OpOr32)
38936 v.AddArg(x)
38937 v.AddArg(y)
38938 return true
38939 }
38940 return false
38941 }
38942 func rewriteValuegeneric_OpOr32_10(v *Value) bool {
38943 b := v.Block
38944
38945
38946
38947 for {
38948 x := v.Args[1]
38949 v_0 := v.Args[0]
38950 if v_0.Op != OpOr32 {
38951 break
38952 }
38953 _ = v_0.Args[1]
38954 y := v_0.Args[0]
38955 if x != v_0.Args[1] {
38956 break
38957 }
38958 v.reset(OpOr32)
38959 v.AddArg(x)
38960 v.AddArg(y)
38961 return true
38962 }
38963
38964
38965
38966 for {
38967 _ = v.Args[1]
38968 v_0 := v.Args[0]
38969 if v_0.Op != OpAnd32 {
38970 break
38971 }
38972 _ = v_0.Args[1]
38973 x := v_0.Args[0]
38974 v_0_1 := v_0.Args[1]
38975 if v_0_1.Op != OpConst32 {
38976 break
38977 }
38978 c2 := v_0_1.AuxInt
38979 v_1 := v.Args[1]
38980 if v_1.Op != OpConst32 {
38981 break
38982 }
38983 t := v_1.Type
38984 c1 := v_1.AuxInt
38985 if !(^(c1 | c2) == 0) {
38986 break
38987 }
38988 v.reset(OpOr32)
38989 v0 := b.NewValue0(v.Pos, OpConst32, t)
38990 v0.AuxInt = c1
38991 v.AddArg(v0)
38992 v.AddArg(x)
38993 return true
38994 }
38995
38996
38997
38998 for {
38999 _ = v.Args[1]
39000 v_0 := v.Args[0]
39001 if v_0.Op != OpAnd32 {
39002 break
39003 }
39004 x := v_0.Args[1]
39005 v_0_0 := v_0.Args[0]
39006 if v_0_0.Op != OpConst32 {
39007 break
39008 }
39009 c2 := v_0_0.AuxInt
39010 v_1 := v.Args[1]
39011 if v_1.Op != OpConst32 {
39012 break
39013 }
39014 t := v_1.Type
39015 c1 := v_1.AuxInt
39016 if !(^(c1 | c2) == 0) {
39017 break
39018 }
39019 v.reset(OpOr32)
39020 v0 := b.NewValue0(v.Pos, OpConst32, t)
39021 v0.AuxInt = c1
39022 v.AddArg(v0)
39023 v.AddArg(x)
39024 return true
39025 }
39026
39027
39028
39029 for {
39030 _ = v.Args[1]
39031 v_0 := v.Args[0]
39032 if v_0.Op != OpConst32 {
39033 break
39034 }
39035 t := v_0.Type
39036 c1 := v_0.AuxInt
39037 v_1 := v.Args[1]
39038 if v_1.Op != OpAnd32 {
39039 break
39040 }
39041 _ = v_1.Args[1]
39042 x := v_1.Args[0]
39043 v_1_1 := v_1.Args[1]
39044 if v_1_1.Op != OpConst32 {
39045 break
39046 }
39047 c2 := v_1_1.AuxInt
39048 if !(^(c1 | c2) == 0) {
39049 break
39050 }
39051 v.reset(OpOr32)
39052 v0 := b.NewValue0(v.Pos, OpConst32, t)
39053 v0.AuxInt = c1
39054 v.AddArg(v0)
39055 v.AddArg(x)
39056 return true
39057 }
39058
39059
39060
39061 for {
39062 _ = v.Args[1]
39063 v_0 := v.Args[0]
39064 if v_0.Op != OpConst32 {
39065 break
39066 }
39067 t := v_0.Type
39068 c1 := v_0.AuxInt
39069 v_1 := v.Args[1]
39070 if v_1.Op != OpAnd32 {
39071 break
39072 }
39073 x := v_1.Args[1]
39074 v_1_0 := v_1.Args[0]
39075 if v_1_0.Op != OpConst32 {
39076 break
39077 }
39078 c2 := v_1_0.AuxInt
39079 if !(^(c1 | c2) == 0) {
39080 break
39081 }
39082 v.reset(OpOr32)
39083 v0 := b.NewValue0(v.Pos, OpConst32, t)
39084 v0.AuxInt = c1
39085 v.AddArg(v0)
39086 v.AddArg(x)
39087 return true
39088 }
39089
39090
39091
39092 for {
39093 x := v.Args[1]
39094 v_0 := v.Args[0]
39095 if v_0.Op != OpOr32 {
39096 break
39097 }
39098 z := v_0.Args[1]
39099 i := v_0.Args[0]
39100 if i.Op != OpConst32 {
39101 break
39102 }
39103 t := i.Type
39104 if !(z.Op != OpConst32 && x.Op != OpConst32) {
39105 break
39106 }
39107 v.reset(OpOr32)
39108 v.AddArg(i)
39109 v0 := b.NewValue0(v.Pos, OpOr32, t)
39110 v0.AddArg(z)
39111 v0.AddArg(x)
39112 v.AddArg(v0)
39113 return true
39114 }
39115
39116
39117
39118 for {
39119 x := v.Args[1]
39120 v_0 := v.Args[0]
39121 if v_0.Op != OpOr32 {
39122 break
39123 }
39124 _ = v_0.Args[1]
39125 z := v_0.Args[0]
39126 i := v_0.Args[1]
39127 if i.Op != OpConst32 {
39128 break
39129 }
39130 t := i.Type
39131 if !(z.Op != OpConst32 && x.Op != OpConst32) {
39132 break
39133 }
39134 v.reset(OpOr32)
39135 v.AddArg(i)
39136 v0 := b.NewValue0(v.Pos, OpOr32, t)
39137 v0.AddArg(z)
39138 v0.AddArg(x)
39139 v.AddArg(v0)
39140 return true
39141 }
39142
39143
39144
39145 for {
39146 _ = v.Args[1]
39147 x := v.Args[0]
39148 v_1 := v.Args[1]
39149 if v_1.Op != OpOr32 {
39150 break
39151 }
39152 z := v_1.Args[1]
39153 i := v_1.Args[0]
39154 if i.Op != OpConst32 {
39155 break
39156 }
39157 t := i.Type
39158 if !(z.Op != OpConst32 && x.Op != OpConst32) {
39159 break
39160 }
39161 v.reset(OpOr32)
39162 v.AddArg(i)
39163 v0 := b.NewValue0(v.Pos, OpOr32, t)
39164 v0.AddArg(z)
39165 v0.AddArg(x)
39166 v.AddArg(v0)
39167 return true
39168 }
39169
39170
39171
39172 for {
39173 _ = v.Args[1]
39174 x := v.Args[0]
39175 v_1 := v.Args[1]
39176 if v_1.Op != OpOr32 {
39177 break
39178 }
39179 _ = v_1.Args[1]
39180 z := v_1.Args[0]
39181 i := v_1.Args[1]
39182 if i.Op != OpConst32 {
39183 break
39184 }
39185 t := i.Type
39186 if !(z.Op != OpConst32 && x.Op != OpConst32) {
39187 break
39188 }
39189 v.reset(OpOr32)
39190 v.AddArg(i)
39191 v0 := b.NewValue0(v.Pos, OpOr32, t)
39192 v0.AddArg(z)
39193 v0.AddArg(x)
39194 v.AddArg(v0)
39195 return true
39196 }
39197
39198
39199
39200 for {
39201 _ = v.Args[1]
39202 v_0 := v.Args[0]
39203 if v_0.Op != OpConst32 {
39204 break
39205 }
39206 t := v_0.Type
39207 c := v_0.AuxInt
39208 v_1 := v.Args[1]
39209 if v_1.Op != OpOr32 {
39210 break
39211 }
39212 x := v_1.Args[1]
39213 v_1_0 := v_1.Args[0]
39214 if v_1_0.Op != OpConst32 {
39215 break
39216 }
39217 if v_1_0.Type != t {
39218 break
39219 }
39220 d := v_1_0.AuxInt
39221 v.reset(OpOr32)
39222 v0 := b.NewValue0(v.Pos, OpConst32, t)
39223 v0.AuxInt = int64(int32(c | d))
39224 v.AddArg(v0)
39225 v.AddArg(x)
39226 return true
39227 }
39228 return false
39229 }
39230 func rewriteValuegeneric_OpOr32_20(v *Value) bool {
39231 b := v.Block
39232
39233
39234
39235 for {
39236 _ = v.Args[1]
39237 v_0 := v.Args[0]
39238 if v_0.Op != OpConst32 {
39239 break
39240 }
39241 t := v_0.Type
39242 c := v_0.AuxInt
39243 v_1 := v.Args[1]
39244 if v_1.Op != OpOr32 {
39245 break
39246 }
39247 _ = v_1.Args[1]
39248 x := v_1.Args[0]
39249 v_1_1 := v_1.Args[1]
39250 if v_1_1.Op != OpConst32 {
39251 break
39252 }
39253 if v_1_1.Type != t {
39254 break
39255 }
39256 d := v_1_1.AuxInt
39257 v.reset(OpOr32)
39258 v0 := b.NewValue0(v.Pos, OpConst32, t)
39259 v0.AuxInt = int64(int32(c | d))
39260 v.AddArg(v0)
39261 v.AddArg(x)
39262 return true
39263 }
39264
39265
39266
39267 for {
39268 _ = v.Args[1]
39269 v_0 := v.Args[0]
39270 if v_0.Op != OpOr32 {
39271 break
39272 }
39273 x := v_0.Args[1]
39274 v_0_0 := v_0.Args[0]
39275 if v_0_0.Op != OpConst32 {
39276 break
39277 }
39278 t := v_0_0.Type
39279 d := v_0_0.AuxInt
39280 v_1 := v.Args[1]
39281 if v_1.Op != OpConst32 {
39282 break
39283 }
39284 if v_1.Type != t {
39285 break
39286 }
39287 c := v_1.AuxInt
39288 v.reset(OpOr32)
39289 v0 := b.NewValue0(v.Pos, OpConst32, t)
39290 v0.AuxInt = int64(int32(c | d))
39291 v.AddArg(v0)
39292 v.AddArg(x)
39293 return true
39294 }
39295
39296
39297
39298 for {
39299 _ = v.Args[1]
39300 v_0 := v.Args[0]
39301 if v_0.Op != OpOr32 {
39302 break
39303 }
39304 _ = v_0.Args[1]
39305 x := v_0.Args[0]
39306 v_0_1 := v_0.Args[1]
39307 if v_0_1.Op != OpConst32 {
39308 break
39309 }
39310 t := v_0_1.Type
39311 d := v_0_1.AuxInt
39312 v_1 := v.Args[1]
39313 if v_1.Op != OpConst32 {
39314 break
39315 }
39316 if v_1.Type != t {
39317 break
39318 }
39319 c := v_1.AuxInt
39320 v.reset(OpOr32)
39321 v0 := b.NewValue0(v.Pos, OpConst32, t)
39322 v0.AuxInt = int64(int32(c | d))
39323 v.AddArg(v0)
39324 v.AddArg(x)
39325 return true
39326 }
39327 return false
39328 }
39329 func rewriteValuegeneric_OpOr64_0(v *Value) bool {
39330
39331
39332
39333 for {
39334 _ = v.Args[1]
39335 v_0 := v.Args[0]
39336 if v_0.Op != OpConst64 {
39337 break
39338 }
39339 c := v_0.AuxInt
39340 v_1 := v.Args[1]
39341 if v_1.Op != OpConst64 {
39342 break
39343 }
39344 d := v_1.AuxInt
39345 v.reset(OpConst64)
39346 v.AuxInt = c | d
39347 return true
39348 }
39349
39350
39351
39352 for {
39353 _ = v.Args[1]
39354 v_0 := v.Args[0]
39355 if v_0.Op != OpConst64 {
39356 break
39357 }
39358 d := v_0.AuxInt
39359 v_1 := v.Args[1]
39360 if v_1.Op != OpConst64 {
39361 break
39362 }
39363 c := v_1.AuxInt
39364 v.reset(OpConst64)
39365 v.AuxInt = c | d
39366 return true
39367 }
39368
39369
39370
39371 for {
39372 x := v.Args[1]
39373 if x != v.Args[0] {
39374 break
39375 }
39376 v.reset(OpCopy)
39377 v.Type = x.Type
39378 v.AddArg(x)
39379 return true
39380 }
39381
39382
39383
39384 for {
39385 x := v.Args[1]
39386 v_0 := v.Args[0]
39387 if v_0.Op != OpConst64 {
39388 break
39389 }
39390 if v_0.AuxInt != 0 {
39391 break
39392 }
39393 v.reset(OpCopy)
39394 v.Type = x.Type
39395 v.AddArg(x)
39396 return true
39397 }
39398
39399
39400
39401 for {
39402 _ = v.Args[1]
39403 x := v.Args[0]
39404 v_1 := v.Args[1]
39405 if v_1.Op != OpConst64 {
39406 break
39407 }
39408 if v_1.AuxInt != 0 {
39409 break
39410 }
39411 v.reset(OpCopy)
39412 v.Type = x.Type
39413 v.AddArg(x)
39414 return true
39415 }
39416
39417
39418
39419 for {
39420 _ = v.Args[1]
39421 v_0 := v.Args[0]
39422 if v_0.Op != OpConst64 {
39423 break
39424 }
39425 if v_0.AuxInt != -1 {
39426 break
39427 }
39428 v.reset(OpConst64)
39429 v.AuxInt = -1
39430 return true
39431 }
39432
39433
39434
39435 for {
39436 _ = v.Args[1]
39437 v_1 := v.Args[1]
39438 if v_1.Op != OpConst64 {
39439 break
39440 }
39441 if v_1.AuxInt != -1 {
39442 break
39443 }
39444 v.reset(OpConst64)
39445 v.AuxInt = -1
39446 return true
39447 }
39448
39449
39450
39451 for {
39452 _ = v.Args[1]
39453 x := v.Args[0]
39454 v_1 := v.Args[1]
39455 if v_1.Op != OpOr64 {
39456 break
39457 }
39458 y := v_1.Args[1]
39459 if x != v_1.Args[0] {
39460 break
39461 }
39462 v.reset(OpOr64)
39463 v.AddArg(x)
39464 v.AddArg(y)
39465 return true
39466 }
39467
39468
39469
39470 for {
39471 _ = v.Args[1]
39472 x := v.Args[0]
39473 v_1 := v.Args[1]
39474 if v_1.Op != OpOr64 {
39475 break
39476 }
39477 _ = v_1.Args[1]
39478 y := v_1.Args[0]
39479 if x != v_1.Args[1] {
39480 break
39481 }
39482 v.reset(OpOr64)
39483 v.AddArg(x)
39484 v.AddArg(y)
39485 return true
39486 }
39487
39488
39489
39490 for {
39491 x := v.Args[1]
39492 v_0 := v.Args[0]
39493 if v_0.Op != OpOr64 {
39494 break
39495 }
39496 y := v_0.Args[1]
39497 if x != v_0.Args[0] {
39498 break
39499 }
39500 v.reset(OpOr64)
39501 v.AddArg(x)
39502 v.AddArg(y)
39503 return true
39504 }
39505 return false
39506 }
39507 func rewriteValuegeneric_OpOr64_10(v *Value) bool {
39508 b := v.Block
39509
39510
39511
39512 for {
39513 x := v.Args[1]
39514 v_0 := v.Args[0]
39515 if v_0.Op != OpOr64 {
39516 break
39517 }
39518 _ = v_0.Args[1]
39519 y := v_0.Args[0]
39520 if x != v_0.Args[1] {
39521 break
39522 }
39523 v.reset(OpOr64)
39524 v.AddArg(x)
39525 v.AddArg(y)
39526 return true
39527 }
39528
39529
39530
39531 for {
39532 _ = v.Args[1]
39533 v_0 := v.Args[0]
39534 if v_0.Op != OpAnd64 {
39535 break
39536 }
39537 _ = v_0.Args[1]
39538 x := v_0.Args[0]
39539 v_0_1 := v_0.Args[1]
39540 if v_0_1.Op != OpConst64 {
39541 break
39542 }
39543 c2 := v_0_1.AuxInt
39544 v_1 := v.Args[1]
39545 if v_1.Op != OpConst64 {
39546 break
39547 }
39548 t := v_1.Type
39549 c1 := v_1.AuxInt
39550 if !(^(c1 | c2) == 0) {
39551 break
39552 }
39553 v.reset(OpOr64)
39554 v0 := b.NewValue0(v.Pos, OpConst64, t)
39555 v0.AuxInt = c1
39556 v.AddArg(v0)
39557 v.AddArg(x)
39558 return true
39559 }
39560
39561
39562
39563 for {
39564 _ = v.Args[1]
39565 v_0 := v.Args[0]
39566 if v_0.Op != OpAnd64 {
39567 break
39568 }
39569 x := v_0.Args[1]
39570 v_0_0 := v_0.Args[0]
39571 if v_0_0.Op != OpConst64 {
39572 break
39573 }
39574 c2 := v_0_0.AuxInt
39575 v_1 := v.Args[1]
39576 if v_1.Op != OpConst64 {
39577 break
39578 }
39579 t := v_1.Type
39580 c1 := v_1.AuxInt
39581 if !(^(c1 | c2) == 0) {
39582 break
39583 }
39584 v.reset(OpOr64)
39585 v0 := b.NewValue0(v.Pos, OpConst64, t)
39586 v0.AuxInt = c1
39587 v.AddArg(v0)
39588 v.AddArg(x)
39589 return true
39590 }
39591
39592
39593
39594 for {
39595 _ = v.Args[1]
39596 v_0 := v.Args[0]
39597 if v_0.Op != OpConst64 {
39598 break
39599 }
39600 t := v_0.Type
39601 c1 := v_0.AuxInt
39602 v_1 := v.Args[1]
39603 if v_1.Op != OpAnd64 {
39604 break
39605 }
39606 _ = v_1.Args[1]
39607 x := v_1.Args[0]
39608 v_1_1 := v_1.Args[1]
39609 if v_1_1.Op != OpConst64 {
39610 break
39611 }
39612 c2 := v_1_1.AuxInt
39613 if !(^(c1 | c2) == 0) {
39614 break
39615 }
39616 v.reset(OpOr64)
39617 v0 := b.NewValue0(v.Pos, OpConst64, t)
39618 v0.AuxInt = c1
39619 v.AddArg(v0)
39620 v.AddArg(x)
39621 return true
39622 }
39623
39624
39625
39626 for {
39627 _ = v.Args[1]
39628 v_0 := v.Args[0]
39629 if v_0.Op != OpConst64 {
39630 break
39631 }
39632 t := v_0.Type
39633 c1 := v_0.AuxInt
39634 v_1 := v.Args[1]
39635 if v_1.Op != OpAnd64 {
39636 break
39637 }
39638 x := v_1.Args[1]
39639 v_1_0 := v_1.Args[0]
39640 if v_1_0.Op != OpConst64 {
39641 break
39642 }
39643 c2 := v_1_0.AuxInt
39644 if !(^(c1 | c2) == 0) {
39645 break
39646 }
39647 v.reset(OpOr64)
39648 v0 := b.NewValue0(v.Pos, OpConst64, t)
39649 v0.AuxInt = c1
39650 v.AddArg(v0)
39651 v.AddArg(x)
39652 return true
39653 }
39654
39655
39656
39657 for {
39658 x := v.Args[1]
39659 v_0 := v.Args[0]
39660 if v_0.Op != OpOr64 {
39661 break
39662 }
39663 z := v_0.Args[1]
39664 i := v_0.Args[0]
39665 if i.Op != OpConst64 {
39666 break
39667 }
39668 t := i.Type
39669 if !(z.Op != OpConst64 && x.Op != OpConst64) {
39670 break
39671 }
39672 v.reset(OpOr64)
39673 v.AddArg(i)
39674 v0 := b.NewValue0(v.Pos, OpOr64, t)
39675 v0.AddArg(z)
39676 v0.AddArg(x)
39677 v.AddArg(v0)
39678 return true
39679 }
39680
39681
39682
39683 for {
39684 x := v.Args[1]
39685 v_0 := v.Args[0]
39686 if v_0.Op != OpOr64 {
39687 break
39688 }
39689 _ = v_0.Args[1]
39690 z := v_0.Args[0]
39691 i := v_0.Args[1]
39692 if i.Op != OpConst64 {
39693 break
39694 }
39695 t := i.Type
39696 if !(z.Op != OpConst64 && x.Op != OpConst64) {
39697 break
39698 }
39699 v.reset(OpOr64)
39700 v.AddArg(i)
39701 v0 := b.NewValue0(v.Pos, OpOr64, t)
39702 v0.AddArg(z)
39703 v0.AddArg(x)
39704 v.AddArg(v0)
39705 return true
39706 }
39707
39708
39709
39710 for {
39711 _ = v.Args[1]
39712 x := v.Args[0]
39713 v_1 := v.Args[1]
39714 if v_1.Op != OpOr64 {
39715 break
39716 }
39717 z := v_1.Args[1]
39718 i := v_1.Args[0]
39719 if i.Op != OpConst64 {
39720 break
39721 }
39722 t := i.Type
39723 if !(z.Op != OpConst64 && x.Op != OpConst64) {
39724 break
39725 }
39726 v.reset(OpOr64)
39727 v.AddArg(i)
39728 v0 := b.NewValue0(v.Pos, OpOr64, t)
39729 v0.AddArg(z)
39730 v0.AddArg(x)
39731 v.AddArg(v0)
39732 return true
39733 }
39734
39735
39736
39737 for {
39738 _ = v.Args[1]
39739 x := v.Args[0]
39740 v_1 := v.Args[1]
39741 if v_1.Op != OpOr64 {
39742 break
39743 }
39744 _ = v_1.Args[1]
39745 z := v_1.Args[0]
39746 i := v_1.Args[1]
39747 if i.Op != OpConst64 {
39748 break
39749 }
39750 t := i.Type
39751 if !(z.Op != OpConst64 && x.Op != OpConst64) {
39752 break
39753 }
39754 v.reset(OpOr64)
39755 v.AddArg(i)
39756 v0 := b.NewValue0(v.Pos, OpOr64, t)
39757 v0.AddArg(z)
39758 v0.AddArg(x)
39759 v.AddArg(v0)
39760 return true
39761 }
39762
39763
39764
39765 for {
39766 _ = v.Args[1]
39767 v_0 := v.Args[0]
39768 if v_0.Op != OpConst64 {
39769 break
39770 }
39771 t := v_0.Type
39772 c := v_0.AuxInt
39773 v_1 := v.Args[1]
39774 if v_1.Op != OpOr64 {
39775 break
39776 }
39777 x := v_1.Args[1]
39778 v_1_0 := v_1.Args[0]
39779 if v_1_0.Op != OpConst64 {
39780 break
39781 }
39782 if v_1_0.Type != t {
39783 break
39784 }
39785 d := v_1_0.AuxInt
39786 v.reset(OpOr64)
39787 v0 := b.NewValue0(v.Pos, OpConst64, t)
39788 v0.AuxInt = c | d
39789 v.AddArg(v0)
39790 v.AddArg(x)
39791 return true
39792 }
39793 return false
39794 }
39795 func rewriteValuegeneric_OpOr64_20(v *Value) bool {
39796 b := v.Block
39797
39798
39799
39800 for {
39801 _ = v.Args[1]
39802 v_0 := v.Args[0]
39803 if v_0.Op != OpConst64 {
39804 break
39805 }
39806 t := v_0.Type
39807 c := v_0.AuxInt
39808 v_1 := v.Args[1]
39809 if v_1.Op != OpOr64 {
39810 break
39811 }
39812 _ = v_1.Args[1]
39813 x := v_1.Args[0]
39814 v_1_1 := v_1.Args[1]
39815 if v_1_1.Op != OpConst64 {
39816 break
39817 }
39818 if v_1_1.Type != t {
39819 break
39820 }
39821 d := v_1_1.AuxInt
39822 v.reset(OpOr64)
39823 v0 := b.NewValue0(v.Pos, OpConst64, t)
39824 v0.AuxInt = c | d
39825 v.AddArg(v0)
39826 v.AddArg(x)
39827 return true
39828 }
39829
39830
39831
39832 for {
39833 _ = v.Args[1]
39834 v_0 := v.Args[0]
39835 if v_0.Op != OpOr64 {
39836 break
39837 }
39838 x := v_0.Args[1]
39839 v_0_0 := v_0.Args[0]
39840 if v_0_0.Op != OpConst64 {
39841 break
39842 }
39843 t := v_0_0.Type
39844 d := v_0_0.AuxInt
39845 v_1 := v.Args[1]
39846 if v_1.Op != OpConst64 {
39847 break
39848 }
39849 if v_1.Type != t {
39850 break
39851 }
39852 c := v_1.AuxInt
39853 v.reset(OpOr64)
39854 v0 := b.NewValue0(v.Pos, OpConst64, t)
39855 v0.AuxInt = c | d
39856 v.AddArg(v0)
39857 v.AddArg(x)
39858 return true
39859 }
39860
39861
39862
39863 for {
39864 _ = v.Args[1]
39865 v_0 := v.Args[0]
39866 if v_0.Op != OpOr64 {
39867 break
39868 }
39869 _ = v_0.Args[1]
39870 x := v_0.Args[0]
39871 v_0_1 := v_0.Args[1]
39872 if v_0_1.Op != OpConst64 {
39873 break
39874 }
39875 t := v_0_1.Type
39876 d := v_0_1.AuxInt
39877 v_1 := v.Args[1]
39878 if v_1.Op != OpConst64 {
39879 break
39880 }
39881 if v_1.Type != t {
39882 break
39883 }
39884 c := v_1.AuxInt
39885 v.reset(OpOr64)
39886 v0 := b.NewValue0(v.Pos, OpConst64, t)
39887 v0.AuxInt = c | d
39888 v.AddArg(v0)
39889 v.AddArg(x)
39890 return true
39891 }
39892 return false
39893 }
39894 func rewriteValuegeneric_OpOr8_0(v *Value) bool {
39895
39896
39897
39898 for {
39899 _ = v.Args[1]
39900 v_0 := v.Args[0]
39901 if v_0.Op != OpConst8 {
39902 break
39903 }
39904 c := v_0.AuxInt
39905 v_1 := v.Args[1]
39906 if v_1.Op != OpConst8 {
39907 break
39908 }
39909 d := v_1.AuxInt
39910 v.reset(OpConst8)
39911 v.AuxInt = int64(int8(c | d))
39912 return true
39913 }
39914
39915
39916
39917 for {
39918 _ = v.Args[1]
39919 v_0 := v.Args[0]
39920 if v_0.Op != OpConst8 {
39921 break
39922 }
39923 d := v_0.AuxInt
39924 v_1 := v.Args[1]
39925 if v_1.Op != OpConst8 {
39926 break
39927 }
39928 c := v_1.AuxInt
39929 v.reset(OpConst8)
39930 v.AuxInt = int64(int8(c | d))
39931 return true
39932 }
39933
39934
39935
39936 for {
39937 x := v.Args[1]
39938 if x != v.Args[0] {
39939 break
39940 }
39941 v.reset(OpCopy)
39942 v.Type = x.Type
39943 v.AddArg(x)
39944 return true
39945 }
39946
39947
39948
39949 for {
39950 x := v.Args[1]
39951 v_0 := v.Args[0]
39952 if v_0.Op != OpConst8 {
39953 break
39954 }
39955 if v_0.AuxInt != 0 {
39956 break
39957 }
39958 v.reset(OpCopy)
39959 v.Type = x.Type
39960 v.AddArg(x)
39961 return true
39962 }
39963
39964
39965
39966 for {
39967 _ = v.Args[1]
39968 x := v.Args[0]
39969 v_1 := v.Args[1]
39970 if v_1.Op != OpConst8 {
39971 break
39972 }
39973 if v_1.AuxInt != 0 {
39974 break
39975 }
39976 v.reset(OpCopy)
39977 v.Type = x.Type
39978 v.AddArg(x)
39979 return true
39980 }
39981
39982
39983
39984 for {
39985 _ = v.Args[1]
39986 v_0 := v.Args[0]
39987 if v_0.Op != OpConst8 {
39988 break
39989 }
39990 if v_0.AuxInt != -1 {
39991 break
39992 }
39993 v.reset(OpConst8)
39994 v.AuxInt = -1
39995 return true
39996 }
39997
39998
39999
40000 for {
40001 _ = v.Args[1]
40002 v_1 := v.Args[1]
40003 if v_1.Op != OpConst8 {
40004 break
40005 }
40006 if v_1.AuxInt != -1 {
40007 break
40008 }
40009 v.reset(OpConst8)
40010 v.AuxInt = -1
40011 return true
40012 }
40013
40014
40015
40016 for {
40017 _ = v.Args[1]
40018 x := v.Args[0]
40019 v_1 := v.Args[1]
40020 if v_1.Op != OpOr8 {
40021 break
40022 }
40023 y := v_1.Args[1]
40024 if x != v_1.Args[0] {
40025 break
40026 }
40027 v.reset(OpOr8)
40028 v.AddArg(x)
40029 v.AddArg(y)
40030 return true
40031 }
40032
40033
40034
40035 for {
40036 _ = v.Args[1]
40037 x := v.Args[0]
40038 v_1 := v.Args[1]
40039 if v_1.Op != OpOr8 {
40040 break
40041 }
40042 _ = v_1.Args[1]
40043 y := v_1.Args[0]
40044 if x != v_1.Args[1] {
40045 break
40046 }
40047 v.reset(OpOr8)
40048 v.AddArg(x)
40049 v.AddArg(y)
40050 return true
40051 }
40052
40053
40054
40055 for {
40056 x := v.Args[1]
40057 v_0 := v.Args[0]
40058 if v_0.Op != OpOr8 {
40059 break
40060 }
40061 y := v_0.Args[1]
40062 if x != v_0.Args[0] {
40063 break
40064 }
40065 v.reset(OpOr8)
40066 v.AddArg(x)
40067 v.AddArg(y)
40068 return true
40069 }
40070 return false
40071 }
40072 func rewriteValuegeneric_OpOr8_10(v *Value) bool {
40073 b := v.Block
40074
40075
40076
40077 for {
40078 x := v.Args[1]
40079 v_0 := v.Args[0]
40080 if v_0.Op != OpOr8 {
40081 break
40082 }
40083 _ = v_0.Args[1]
40084 y := v_0.Args[0]
40085 if x != v_0.Args[1] {
40086 break
40087 }
40088 v.reset(OpOr8)
40089 v.AddArg(x)
40090 v.AddArg(y)
40091 return true
40092 }
40093
40094
40095
40096 for {
40097 _ = v.Args[1]
40098 v_0 := v.Args[0]
40099 if v_0.Op != OpAnd8 {
40100 break
40101 }
40102 _ = v_0.Args[1]
40103 x := v_0.Args[0]
40104 v_0_1 := v_0.Args[1]
40105 if v_0_1.Op != OpConst8 {
40106 break
40107 }
40108 c2 := v_0_1.AuxInt
40109 v_1 := v.Args[1]
40110 if v_1.Op != OpConst8 {
40111 break
40112 }
40113 t := v_1.Type
40114 c1 := v_1.AuxInt
40115 if !(^(c1 | c2) == 0) {
40116 break
40117 }
40118 v.reset(OpOr8)
40119 v0 := b.NewValue0(v.Pos, OpConst8, t)
40120 v0.AuxInt = c1
40121 v.AddArg(v0)
40122 v.AddArg(x)
40123 return true
40124 }
40125
40126
40127
40128 for {
40129 _ = v.Args[1]
40130 v_0 := v.Args[0]
40131 if v_0.Op != OpAnd8 {
40132 break
40133 }
40134 x := v_0.Args[1]
40135 v_0_0 := v_0.Args[0]
40136 if v_0_0.Op != OpConst8 {
40137 break
40138 }
40139 c2 := v_0_0.AuxInt
40140 v_1 := v.Args[1]
40141 if v_1.Op != OpConst8 {
40142 break
40143 }
40144 t := v_1.Type
40145 c1 := v_1.AuxInt
40146 if !(^(c1 | c2) == 0) {
40147 break
40148 }
40149 v.reset(OpOr8)
40150 v0 := b.NewValue0(v.Pos, OpConst8, t)
40151 v0.AuxInt = c1
40152 v.AddArg(v0)
40153 v.AddArg(x)
40154 return true
40155 }
40156
40157
40158
40159 for {
40160 _ = v.Args[1]
40161 v_0 := v.Args[0]
40162 if v_0.Op != OpConst8 {
40163 break
40164 }
40165 t := v_0.Type
40166 c1 := v_0.AuxInt
40167 v_1 := v.Args[1]
40168 if v_1.Op != OpAnd8 {
40169 break
40170 }
40171 _ = v_1.Args[1]
40172 x := v_1.Args[0]
40173 v_1_1 := v_1.Args[1]
40174 if v_1_1.Op != OpConst8 {
40175 break
40176 }
40177 c2 := v_1_1.AuxInt
40178 if !(^(c1 | c2) == 0) {
40179 break
40180 }
40181 v.reset(OpOr8)
40182 v0 := b.NewValue0(v.Pos, OpConst8, t)
40183 v0.AuxInt = c1
40184 v.AddArg(v0)
40185 v.AddArg(x)
40186 return true
40187 }
40188
40189
40190
40191 for {
40192 _ = v.Args[1]
40193 v_0 := v.Args[0]
40194 if v_0.Op != OpConst8 {
40195 break
40196 }
40197 t := v_0.Type
40198 c1 := v_0.AuxInt
40199 v_1 := v.Args[1]
40200 if v_1.Op != OpAnd8 {
40201 break
40202 }
40203 x := v_1.Args[1]
40204 v_1_0 := v_1.Args[0]
40205 if v_1_0.Op != OpConst8 {
40206 break
40207 }
40208 c2 := v_1_0.AuxInt
40209 if !(^(c1 | c2) == 0) {
40210 break
40211 }
40212 v.reset(OpOr8)
40213 v0 := b.NewValue0(v.Pos, OpConst8, t)
40214 v0.AuxInt = c1
40215 v.AddArg(v0)
40216 v.AddArg(x)
40217 return true
40218 }
40219
40220
40221
40222 for {
40223 x := v.Args[1]
40224 v_0 := v.Args[0]
40225 if v_0.Op != OpOr8 {
40226 break
40227 }
40228 z := v_0.Args[1]
40229 i := v_0.Args[0]
40230 if i.Op != OpConst8 {
40231 break
40232 }
40233 t := i.Type
40234 if !(z.Op != OpConst8 && x.Op != OpConst8) {
40235 break
40236 }
40237 v.reset(OpOr8)
40238 v.AddArg(i)
40239 v0 := b.NewValue0(v.Pos, OpOr8, t)
40240 v0.AddArg(z)
40241 v0.AddArg(x)
40242 v.AddArg(v0)
40243 return true
40244 }
40245
40246
40247
40248 for {
40249 x := v.Args[1]
40250 v_0 := v.Args[0]
40251 if v_0.Op != OpOr8 {
40252 break
40253 }
40254 _ = v_0.Args[1]
40255 z := v_0.Args[0]
40256 i := v_0.Args[1]
40257 if i.Op != OpConst8 {
40258 break
40259 }
40260 t := i.Type
40261 if !(z.Op != OpConst8 && x.Op != OpConst8) {
40262 break
40263 }
40264 v.reset(OpOr8)
40265 v.AddArg(i)
40266 v0 := b.NewValue0(v.Pos, OpOr8, t)
40267 v0.AddArg(z)
40268 v0.AddArg(x)
40269 v.AddArg(v0)
40270 return true
40271 }
40272
40273
40274
40275 for {
40276 _ = v.Args[1]
40277 x := v.Args[0]
40278 v_1 := v.Args[1]
40279 if v_1.Op != OpOr8 {
40280 break
40281 }
40282 z := v_1.Args[1]
40283 i := v_1.Args[0]
40284 if i.Op != OpConst8 {
40285 break
40286 }
40287 t := i.Type
40288 if !(z.Op != OpConst8 && x.Op != OpConst8) {
40289 break
40290 }
40291 v.reset(OpOr8)
40292 v.AddArg(i)
40293 v0 := b.NewValue0(v.Pos, OpOr8, t)
40294 v0.AddArg(z)
40295 v0.AddArg(x)
40296 v.AddArg(v0)
40297 return true
40298 }
40299
40300
40301
40302 for {
40303 _ = v.Args[1]
40304 x := v.Args[0]
40305 v_1 := v.Args[1]
40306 if v_1.Op != OpOr8 {
40307 break
40308 }
40309 _ = v_1.Args[1]
40310 z := v_1.Args[0]
40311 i := v_1.Args[1]
40312 if i.Op != OpConst8 {
40313 break
40314 }
40315 t := i.Type
40316 if !(z.Op != OpConst8 && x.Op != OpConst8) {
40317 break
40318 }
40319 v.reset(OpOr8)
40320 v.AddArg(i)
40321 v0 := b.NewValue0(v.Pos, OpOr8, t)
40322 v0.AddArg(z)
40323 v0.AddArg(x)
40324 v.AddArg(v0)
40325 return true
40326 }
40327
40328
40329
40330 for {
40331 _ = v.Args[1]
40332 v_0 := v.Args[0]
40333 if v_0.Op != OpConst8 {
40334 break
40335 }
40336 t := v_0.Type
40337 c := v_0.AuxInt
40338 v_1 := v.Args[1]
40339 if v_1.Op != OpOr8 {
40340 break
40341 }
40342 x := v_1.Args[1]
40343 v_1_0 := v_1.Args[0]
40344 if v_1_0.Op != OpConst8 {
40345 break
40346 }
40347 if v_1_0.Type != t {
40348 break
40349 }
40350 d := v_1_0.AuxInt
40351 v.reset(OpOr8)
40352 v0 := b.NewValue0(v.Pos, OpConst8, t)
40353 v0.AuxInt = int64(int8(c | d))
40354 v.AddArg(v0)
40355 v.AddArg(x)
40356 return true
40357 }
40358 return false
40359 }
40360 func rewriteValuegeneric_OpOr8_20(v *Value) bool {
40361 b := v.Block
40362
40363
40364
40365 for {
40366 _ = v.Args[1]
40367 v_0 := v.Args[0]
40368 if v_0.Op != OpConst8 {
40369 break
40370 }
40371 t := v_0.Type
40372 c := v_0.AuxInt
40373 v_1 := v.Args[1]
40374 if v_1.Op != OpOr8 {
40375 break
40376 }
40377 _ = v_1.Args[1]
40378 x := v_1.Args[0]
40379 v_1_1 := v_1.Args[1]
40380 if v_1_1.Op != OpConst8 {
40381 break
40382 }
40383 if v_1_1.Type != t {
40384 break
40385 }
40386 d := v_1_1.AuxInt
40387 v.reset(OpOr8)
40388 v0 := b.NewValue0(v.Pos, OpConst8, t)
40389 v0.AuxInt = int64(int8(c | d))
40390 v.AddArg(v0)
40391 v.AddArg(x)
40392 return true
40393 }
40394
40395
40396
40397 for {
40398 _ = v.Args[1]
40399 v_0 := v.Args[0]
40400 if v_0.Op != OpOr8 {
40401 break
40402 }
40403 x := v_0.Args[1]
40404 v_0_0 := v_0.Args[0]
40405 if v_0_0.Op != OpConst8 {
40406 break
40407 }
40408 t := v_0_0.Type
40409 d := v_0_0.AuxInt
40410 v_1 := v.Args[1]
40411 if v_1.Op != OpConst8 {
40412 break
40413 }
40414 if v_1.Type != t {
40415 break
40416 }
40417 c := v_1.AuxInt
40418 v.reset(OpOr8)
40419 v0 := b.NewValue0(v.Pos, OpConst8, t)
40420 v0.AuxInt = int64(int8(c | d))
40421 v.AddArg(v0)
40422 v.AddArg(x)
40423 return true
40424 }
40425
40426
40427
40428 for {
40429 _ = v.Args[1]
40430 v_0 := v.Args[0]
40431 if v_0.Op != OpOr8 {
40432 break
40433 }
40434 _ = v_0.Args[1]
40435 x := v_0.Args[0]
40436 v_0_1 := v_0.Args[1]
40437 if v_0_1.Op != OpConst8 {
40438 break
40439 }
40440 t := v_0_1.Type
40441 d := v_0_1.AuxInt
40442 v_1 := v.Args[1]
40443 if v_1.Op != OpConst8 {
40444 break
40445 }
40446 if v_1.Type != t {
40447 break
40448 }
40449 c := v_1.AuxInt
40450 v.reset(OpOr8)
40451 v0 := b.NewValue0(v.Pos, OpConst8, t)
40452 v0.AuxInt = int64(int8(c | d))
40453 v.AddArg(v0)
40454 v.AddArg(x)
40455 return true
40456 }
40457 return false
40458 }
40459 func rewriteValuegeneric_OpPhi_0(v *Value) bool {
40460
40461
40462
40463 for {
40464 _ = v.Args[1]
40465 v_0 := v.Args[0]
40466 if v_0.Op != OpConst8 {
40467 break
40468 }
40469 c := v_0.AuxInt
40470 v_1 := v.Args[1]
40471 if v_1.Op != OpConst8 {
40472 break
40473 }
40474 if v_1.AuxInt != c {
40475 break
40476 }
40477 if len(v.Args) != 2 {
40478 break
40479 }
40480 v.reset(OpConst8)
40481 v.AuxInt = c
40482 return true
40483 }
40484
40485
40486
40487 for {
40488 _ = v.Args[1]
40489 v_0 := v.Args[0]
40490 if v_0.Op != OpConst16 {
40491 break
40492 }
40493 c := v_0.AuxInt
40494 v_1 := v.Args[1]
40495 if v_1.Op != OpConst16 {
40496 break
40497 }
40498 if v_1.AuxInt != c {
40499 break
40500 }
40501 if len(v.Args) != 2 {
40502 break
40503 }
40504 v.reset(OpConst16)
40505 v.AuxInt = c
40506 return true
40507 }
40508
40509
40510
40511 for {
40512 _ = v.Args[1]
40513 v_0 := v.Args[0]
40514 if v_0.Op != OpConst32 {
40515 break
40516 }
40517 c := v_0.AuxInt
40518 v_1 := v.Args[1]
40519 if v_1.Op != OpConst32 {
40520 break
40521 }
40522 if v_1.AuxInt != c {
40523 break
40524 }
40525 if len(v.Args) != 2 {
40526 break
40527 }
40528 v.reset(OpConst32)
40529 v.AuxInt = c
40530 return true
40531 }
40532
40533
40534
40535 for {
40536 _ = v.Args[1]
40537 v_0 := v.Args[0]
40538 if v_0.Op != OpConst64 {
40539 break
40540 }
40541 c := v_0.AuxInt
40542 v_1 := v.Args[1]
40543 if v_1.Op != OpConst64 {
40544 break
40545 }
40546 if v_1.AuxInt != c {
40547 break
40548 }
40549 if len(v.Args) != 2 {
40550 break
40551 }
40552 v.reset(OpConst64)
40553 v.AuxInt = c
40554 return true
40555 }
40556 return false
40557 }
40558 func rewriteValuegeneric_OpPtrIndex_0(v *Value) bool {
40559 b := v.Block
40560 config := b.Func.Config
40561 typ := &b.Func.Config.Types
40562
40563
40564
40565 for {
40566 t := v.Type
40567 idx := v.Args[1]
40568 ptr := v.Args[0]
40569 if !(config.PtrSize == 4) {
40570 break
40571 }
40572 v.reset(OpAddPtr)
40573 v.AddArg(ptr)
40574 v0 := b.NewValue0(v.Pos, OpMul32, typ.Int)
40575 v0.AddArg(idx)
40576 v1 := b.NewValue0(v.Pos, OpConst32, typ.Int)
40577 v1.AuxInt = t.Elem().Size()
40578 v0.AddArg(v1)
40579 v.AddArg(v0)
40580 return true
40581 }
40582
40583
40584
40585 for {
40586 t := v.Type
40587 idx := v.Args[1]
40588 ptr := v.Args[0]
40589 if !(config.PtrSize == 8) {
40590 break
40591 }
40592 v.reset(OpAddPtr)
40593 v.AddArg(ptr)
40594 v0 := b.NewValue0(v.Pos, OpMul64, typ.Int)
40595 v0.AddArg(idx)
40596 v1 := b.NewValue0(v.Pos, OpConst64, typ.Int)
40597 v1.AuxInt = t.Elem().Size()
40598 v0.AddArg(v1)
40599 v.AddArg(v0)
40600 return true
40601 }
40602 return false
40603 }
40604 func rewriteValuegeneric_OpRotateLeft16_0(v *Value) bool {
40605
40606
40607
40608 for {
40609 _ = v.Args[1]
40610 x := v.Args[0]
40611 v_1 := v.Args[1]
40612 if v_1.Op != OpConst16 {
40613 break
40614 }
40615 c := v_1.AuxInt
40616 if !(c%16 == 0) {
40617 break
40618 }
40619 v.reset(OpCopy)
40620 v.Type = x.Type
40621 v.AddArg(x)
40622 return true
40623 }
40624 return false
40625 }
40626 func rewriteValuegeneric_OpRotateLeft32_0(v *Value) bool {
40627
40628
40629
40630 for {
40631 _ = v.Args[1]
40632 x := v.Args[0]
40633 v_1 := v.Args[1]
40634 if v_1.Op != OpConst32 {
40635 break
40636 }
40637 c := v_1.AuxInt
40638 if !(c%32 == 0) {
40639 break
40640 }
40641 v.reset(OpCopy)
40642 v.Type = x.Type
40643 v.AddArg(x)
40644 return true
40645 }
40646 return false
40647 }
40648 func rewriteValuegeneric_OpRotateLeft64_0(v *Value) bool {
40649
40650
40651
40652 for {
40653 _ = v.Args[1]
40654 x := v.Args[0]
40655 v_1 := v.Args[1]
40656 if v_1.Op != OpConst64 {
40657 break
40658 }
40659 c := v_1.AuxInt
40660 if !(c%64 == 0) {
40661 break
40662 }
40663 v.reset(OpCopy)
40664 v.Type = x.Type
40665 v.AddArg(x)
40666 return true
40667 }
40668 return false
40669 }
40670 func rewriteValuegeneric_OpRotateLeft8_0(v *Value) bool {
40671
40672
40673
40674 for {
40675 _ = v.Args[1]
40676 x := v.Args[0]
40677 v_1 := v.Args[1]
40678 if v_1.Op != OpConst8 {
40679 break
40680 }
40681 c := v_1.AuxInt
40682 if !(c%8 == 0) {
40683 break
40684 }
40685 v.reset(OpCopy)
40686 v.Type = x.Type
40687 v.AddArg(x)
40688 return true
40689 }
40690 return false
40691 }
40692 func rewriteValuegeneric_OpRound32F_0(v *Value) bool {
40693
40694
40695
40696 for {
40697 x := v.Args[0]
40698 if x.Op != OpConst32F {
40699 break
40700 }
40701 v.reset(OpCopy)
40702 v.Type = x.Type
40703 v.AddArg(x)
40704 return true
40705 }
40706 return false
40707 }
40708 func rewriteValuegeneric_OpRound64F_0(v *Value) bool {
40709
40710
40711
40712 for {
40713 x := v.Args[0]
40714 if x.Op != OpConst64F {
40715 break
40716 }
40717 v.reset(OpCopy)
40718 v.Type = x.Type
40719 v.AddArg(x)
40720 return true
40721 }
40722 return false
40723 }
40724 func rewriteValuegeneric_OpRsh16Ux16_0(v *Value) bool {
40725 b := v.Block
40726
40727
40728
40729 for {
40730 t := v.Type
40731 _ = v.Args[1]
40732 x := v.Args[0]
40733 v_1 := v.Args[1]
40734 if v_1.Op != OpConst16 {
40735 break
40736 }
40737 c := v_1.AuxInt
40738 v.reset(OpRsh16Ux64)
40739 v.AddArg(x)
40740 v0 := b.NewValue0(v.Pos, OpConst64, t)
40741 v0.AuxInt = int64(uint16(c))
40742 v.AddArg(v0)
40743 return true
40744 }
40745
40746
40747
40748 for {
40749 _ = v.Args[1]
40750 v_0 := v.Args[0]
40751 if v_0.Op != OpConst16 {
40752 break
40753 }
40754 if v_0.AuxInt != 0 {
40755 break
40756 }
40757 v.reset(OpConst16)
40758 v.AuxInt = 0
40759 return true
40760 }
40761 return false
40762 }
40763 func rewriteValuegeneric_OpRsh16Ux32_0(v *Value) bool {
40764 b := v.Block
40765
40766
40767
40768 for {
40769 t := v.Type
40770 _ = v.Args[1]
40771 x := v.Args[0]
40772 v_1 := v.Args[1]
40773 if v_1.Op != OpConst32 {
40774 break
40775 }
40776 c := v_1.AuxInt
40777 v.reset(OpRsh16Ux64)
40778 v.AddArg(x)
40779 v0 := b.NewValue0(v.Pos, OpConst64, t)
40780 v0.AuxInt = int64(uint32(c))
40781 v.AddArg(v0)
40782 return true
40783 }
40784
40785
40786
40787 for {
40788 _ = v.Args[1]
40789 v_0 := v.Args[0]
40790 if v_0.Op != OpConst16 {
40791 break
40792 }
40793 if v_0.AuxInt != 0 {
40794 break
40795 }
40796 v.reset(OpConst16)
40797 v.AuxInt = 0
40798 return true
40799 }
40800 return false
40801 }
40802 func rewriteValuegeneric_OpRsh16Ux64_0(v *Value) bool {
40803 b := v.Block
40804 typ := &b.Func.Config.Types
40805
40806
40807
40808 for {
40809 _ = v.Args[1]
40810 v_0 := v.Args[0]
40811 if v_0.Op != OpConst16 {
40812 break
40813 }
40814 c := v_0.AuxInt
40815 v_1 := v.Args[1]
40816 if v_1.Op != OpConst64 {
40817 break
40818 }
40819 d := v_1.AuxInt
40820 v.reset(OpConst16)
40821 v.AuxInt = int64(int16(uint16(c) >> uint64(d)))
40822 return true
40823 }
40824
40825
40826
40827 for {
40828 _ = v.Args[1]
40829 x := v.Args[0]
40830 v_1 := v.Args[1]
40831 if v_1.Op != OpConst64 {
40832 break
40833 }
40834 if v_1.AuxInt != 0 {
40835 break
40836 }
40837 v.reset(OpCopy)
40838 v.Type = x.Type
40839 v.AddArg(x)
40840 return true
40841 }
40842
40843
40844
40845 for {
40846 _ = v.Args[1]
40847 v_0 := v.Args[0]
40848 if v_0.Op != OpConst16 {
40849 break
40850 }
40851 if v_0.AuxInt != 0 {
40852 break
40853 }
40854 v.reset(OpConst16)
40855 v.AuxInt = 0
40856 return true
40857 }
40858
40859
40860
40861 for {
40862 _ = v.Args[1]
40863 v_1 := v.Args[1]
40864 if v_1.Op != OpConst64 {
40865 break
40866 }
40867 c := v_1.AuxInt
40868 if !(uint64(c) >= 16) {
40869 break
40870 }
40871 v.reset(OpConst16)
40872 v.AuxInt = 0
40873 return true
40874 }
40875
40876
40877
40878 for {
40879 t := v.Type
40880 _ = v.Args[1]
40881 v_0 := v.Args[0]
40882 if v_0.Op != OpRsh16Ux64 {
40883 break
40884 }
40885 _ = v_0.Args[1]
40886 x := v_0.Args[0]
40887 v_0_1 := v_0.Args[1]
40888 if v_0_1.Op != OpConst64 {
40889 break
40890 }
40891 c := v_0_1.AuxInt
40892 v_1 := v.Args[1]
40893 if v_1.Op != OpConst64 {
40894 break
40895 }
40896 d := v_1.AuxInt
40897 if !(!uaddOvf(c, d)) {
40898 break
40899 }
40900 v.reset(OpRsh16Ux64)
40901 v.AddArg(x)
40902 v0 := b.NewValue0(v.Pos, OpConst64, t)
40903 v0.AuxInt = c + d
40904 v.AddArg(v0)
40905 return true
40906 }
40907
40908
40909
40910 for {
40911 _ = v.Args[1]
40912 v_0 := v.Args[0]
40913 if v_0.Op != OpRsh16x64 {
40914 break
40915 }
40916 _ = v_0.Args[1]
40917 x := v_0.Args[0]
40918 v_1 := v.Args[1]
40919 if v_1.Op != OpConst64 {
40920 break
40921 }
40922 t := v_1.Type
40923 if v_1.AuxInt != 15 {
40924 break
40925 }
40926 v.reset(OpRsh16Ux64)
40927 v.AddArg(x)
40928 v0 := b.NewValue0(v.Pos, OpConst64, t)
40929 v0.AuxInt = 15
40930 v.AddArg(v0)
40931 return true
40932 }
40933
40934
40935
40936 for {
40937 _ = v.Args[1]
40938 v_0 := v.Args[0]
40939 if v_0.Op != OpLsh16x64 {
40940 break
40941 }
40942 _ = v_0.Args[1]
40943 v_0_0 := v_0.Args[0]
40944 if v_0_0.Op != OpRsh16Ux64 {
40945 break
40946 }
40947 _ = v_0_0.Args[1]
40948 x := v_0_0.Args[0]
40949 v_0_0_1 := v_0_0.Args[1]
40950 if v_0_0_1.Op != OpConst64 {
40951 break
40952 }
40953 c1 := v_0_0_1.AuxInt
40954 v_0_1 := v_0.Args[1]
40955 if v_0_1.Op != OpConst64 {
40956 break
40957 }
40958 c2 := v_0_1.AuxInt
40959 v_1 := v.Args[1]
40960 if v_1.Op != OpConst64 {
40961 break
40962 }
40963 c3 := v_1.AuxInt
40964 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
40965 break
40966 }
40967 v.reset(OpRsh16Ux64)
40968 v.AddArg(x)
40969 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
40970 v0.AuxInt = c1 - c2 + c3
40971 v.AddArg(v0)
40972 return true
40973 }
40974
40975
40976
40977 for {
40978 _ = v.Args[1]
40979 v_0 := v.Args[0]
40980 if v_0.Op != OpLsh16x64 {
40981 break
40982 }
40983 _ = v_0.Args[1]
40984 x := v_0.Args[0]
40985 v_0_1 := v_0.Args[1]
40986 if v_0_1.Op != OpConst64 {
40987 break
40988 }
40989 if v_0_1.AuxInt != 8 {
40990 break
40991 }
40992 v_1 := v.Args[1]
40993 if v_1.Op != OpConst64 {
40994 break
40995 }
40996 if v_1.AuxInt != 8 {
40997 break
40998 }
40999 v.reset(OpZeroExt8to16)
41000 v0 := b.NewValue0(v.Pos, OpTrunc16to8, typ.UInt8)
41001 v0.AddArg(x)
41002 v.AddArg(v0)
41003 return true
41004 }
41005 return false
41006 }
41007 func rewriteValuegeneric_OpRsh16Ux8_0(v *Value) bool {
41008 b := v.Block
41009
41010
41011
41012 for {
41013 t := v.Type
41014 _ = v.Args[1]
41015 x := v.Args[0]
41016 v_1 := v.Args[1]
41017 if v_1.Op != OpConst8 {
41018 break
41019 }
41020 c := v_1.AuxInt
41021 v.reset(OpRsh16Ux64)
41022 v.AddArg(x)
41023 v0 := b.NewValue0(v.Pos, OpConst64, t)
41024 v0.AuxInt = int64(uint8(c))
41025 v.AddArg(v0)
41026 return true
41027 }
41028
41029
41030
41031 for {
41032 _ = v.Args[1]
41033 v_0 := v.Args[0]
41034 if v_0.Op != OpConst16 {
41035 break
41036 }
41037 if v_0.AuxInt != 0 {
41038 break
41039 }
41040 v.reset(OpConst16)
41041 v.AuxInt = 0
41042 return true
41043 }
41044 return false
41045 }
41046 func rewriteValuegeneric_OpRsh16x16_0(v *Value) bool {
41047 b := v.Block
41048
41049
41050
41051 for {
41052 t := v.Type
41053 _ = v.Args[1]
41054 x := v.Args[0]
41055 v_1 := v.Args[1]
41056 if v_1.Op != OpConst16 {
41057 break
41058 }
41059 c := v_1.AuxInt
41060 v.reset(OpRsh16x64)
41061 v.AddArg(x)
41062 v0 := b.NewValue0(v.Pos, OpConst64, t)
41063 v0.AuxInt = int64(uint16(c))
41064 v.AddArg(v0)
41065 return true
41066 }
41067
41068
41069
41070 for {
41071 _ = v.Args[1]
41072 v_0 := v.Args[0]
41073 if v_0.Op != OpConst16 {
41074 break
41075 }
41076 if v_0.AuxInt != 0 {
41077 break
41078 }
41079 v.reset(OpConst16)
41080 v.AuxInt = 0
41081 return true
41082 }
41083 return false
41084 }
41085 func rewriteValuegeneric_OpRsh16x32_0(v *Value) bool {
41086 b := v.Block
41087
41088
41089
41090 for {
41091 t := v.Type
41092 _ = v.Args[1]
41093 x := v.Args[0]
41094 v_1 := v.Args[1]
41095 if v_1.Op != OpConst32 {
41096 break
41097 }
41098 c := v_1.AuxInt
41099 v.reset(OpRsh16x64)
41100 v.AddArg(x)
41101 v0 := b.NewValue0(v.Pos, OpConst64, t)
41102 v0.AuxInt = int64(uint32(c))
41103 v.AddArg(v0)
41104 return true
41105 }
41106
41107
41108
41109 for {
41110 _ = v.Args[1]
41111 v_0 := v.Args[0]
41112 if v_0.Op != OpConst16 {
41113 break
41114 }
41115 if v_0.AuxInt != 0 {
41116 break
41117 }
41118 v.reset(OpConst16)
41119 v.AuxInt = 0
41120 return true
41121 }
41122 return false
41123 }
41124 func rewriteValuegeneric_OpRsh16x64_0(v *Value) bool {
41125 b := v.Block
41126 typ := &b.Func.Config.Types
41127
41128
41129
41130 for {
41131 _ = v.Args[1]
41132 v_0 := v.Args[0]
41133 if v_0.Op != OpConst16 {
41134 break
41135 }
41136 c := v_0.AuxInt
41137 v_1 := v.Args[1]
41138 if v_1.Op != OpConst64 {
41139 break
41140 }
41141 d := v_1.AuxInt
41142 v.reset(OpConst16)
41143 v.AuxInt = int64(int16(c) >> uint64(d))
41144 return true
41145 }
41146
41147
41148
41149 for {
41150 _ = v.Args[1]
41151 x := v.Args[0]
41152 v_1 := v.Args[1]
41153 if v_1.Op != OpConst64 {
41154 break
41155 }
41156 if v_1.AuxInt != 0 {
41157 break
41158 }
41159 v.reset(OpCopy)
41160 v.Type = x.Type
41161 v.AddArg(x)
41162 return true
41163 }
41164
41165
41166
41167 for {
41168 _ = v.Args[1]
41169 v_0 := v.Args[0]
41170 if v_0.Op != OpConst16 {
41171 break
41172 }
41173 if v_0.AuxInt != 0 {
41174 break
41175 }
41176 v.reset(OpConst16)
41177 v.AuxInt = 0
41178 return true
41179 }
41180
41181
41182
41183 for {
41184 t := v.Type
41185 _ = v.Args[1]
41186 v_0 := v.Args[0]
41187 if v_0.Op != OpRsh16x64 {
41188 break
41189 }
41190 _ = v_0.Args[1]
41191 x := v_0.Args[0]
41192 v_0_1 := v_0.Args[1]
41193 if v_0_1.Op != OpConst64 {
41194 break
41195 }
41196 c := v_0_1.AuxInt
41197 v_1 := v.Args[1]
41198 if v_1.Op != OpConst64 {
41199 break
41200 }
41201 d := v_1.AuxInt
41202 if !(!uaddOvf(c, d)) {
41203 break
41204 }
41205 v.reset(OpRsh16x64)
41206 v.AddArg(x)
41207 v0 := b.NewValue0(v.Pos, OpConst64, t)
41208 v0.AuxInt = c + d
41209 v.AddArg(v0)
41210 return true
41211 }
41212
41213
41214
41215 for {
41216 _ = v.Args[1]
41217 v_0 := v.Args[0]
41218 if v_0.Op != OpLsh16x64 {
41219 break
41220 }
41221 _ = v_0.Args[1]
41222 x := v_0.Args[0]
41223 v_0_1 := v_0.Args[1]
41224 if v_0_1.Op != OpConst64 {
41225 break
41226 }
41227 if v_0_1.AuxInt != 8 {
41228 break
41229 }
41230 v_1 := v.Args[1]
41231 if v_1.Op != OpConst64 {
41232 break
41233 }
41234 if v_1.AuxInt != 8 {
41235 break
41236 }
41237 v.reset(OpSignExt8to16)
41238 v0 := b.NewValue0(v.Pos, OpTrunc16to8, typ.Int8)
41239 v0.AddArg(x)
41240 v.AddArg(v0)
41241 return true
41242 }
41243 return false
41244 }
41245 func rewriteValuegeneric_OpRsh16x8_0(v *Value) bool {
41246 b := v.Block
41247
41248
41249
41250 for {
41251 t := v.Type
41252 _ = v.Args[1]
41253 x := v.Args[0]
41254 v_1 := v.Args[1]
41255 if v_1.Op != OpConst8 {
41256 break
41257 }
41258 c := v_1.AuxInt
41259 v.reset(OpRsh16x64)
41260 v.AddArg(x)
41261 v0 := b.NewValue0(v.Pos, OpConst64, t)
41262 v0.AuxInt = int64(uint8(c))
41263 v.AddArg(v0)
41264 return true
41265 }
41266
41267
41268
41269 for {
41270 _ = v.Args[1]
41271 v_0 := v.Args[0]
41272 if v_0.Op != OpConst16 {
41273 break
41274 }
41275 if v_0.AuxInt != 0 {
41276 break
41277 }
41278 v.reset(OpConst16)
41279 v.AuxInt = 0
41280 return true
41281 }
41282 return false
41283 }
41284 func rewriteValuegeneric_OpRsh32Ux16_0(v *Value) bool {
41285 b := v.Block
41286
41287
41288
41289 for {
41290 t := v.Type
41291 _ = v.Args[1]
41292 x := v.Args[0]
41293 v_1 := v.Args[1]
41294 if v_1.Op != OpConst16 {
41295 break
41296 }
41297 c := v_1.AuxInt
41298 v.reset(OpRsh32Ux64)
41299 v.AddArg(x)
41300 v0 := b.NewValue0(v.Pos, OpConst64, t)
41301 v0.AuxInt = int64(uint16(c))
41302 v.AddArg(v0)
41303 return true
41304 }
41305
41306
41307
41308 for {
41309 _ = v.Args[1]
41310 v_0 := v.Args[0]
41311 if v_0.Op != OpConst32 {
41312 break
41313 }
41314 if v_0.AuxInt != 0 {
41315 break
41316 }
41317 v.reset(OpConst32)
41318 v.AuxInt = 0
41319 return true
41320 }
41321 return false
41322 }
41323 func rewriteValuegeneric_OpRsh32Ux32_0(v *Value) bool {
41324 b := v.Block
41325
41326
41327
41328 for {
41329 t := v.Type
41330 _ = v.Args[1]
41331 x := v.Args[0]
41332 v_1 := v.Args[1]
41333 if v_1.Op != OpConst32 {
41334 break
41335 }
41336 c := v_1.AuxInt
41337 v.reset(OpRsh32Ux64)
41338 v.AddArg(x)
41339 v0 := b.NewValue0(v.Pos, OpConst64, t)
41340 v0.AuxInt = int64(uint32(c))
41341 v.AddArg(v0)
41342 return true
41343 }
41344
41345
41346
41347 for {
41348 _ = v.Args[1]
41349 v_0 := v.Args[0]
41350 if v_0.Op != OpConst32 {
41351 break
41352 }
41353 if v_0.AuxInt != 0 {
41354 break
41355 }
41356 v.reset(OpConst32)
41357 v.AuxInt = 0
41358 return true
41359 }
41360 return false
41361 }
41362 func rewriteValuegeneric_OpRsh32Ux64_0(v *Value) bool {
41363 b := v.Block
41364 typ := &b.Func.Config.Types
41365
41366
41367
41368 for {
41369 _ = v.Args[1]
41370 v_0 := v.Args[0]
41371 if v_0.Op != OpConst32 {
41372 break
41373 }
41374 c := v_0.AuxInt
41375 v_1 := v.Args[1]
41376 if v_1.Op != OpConst64 {
41377 break
41378 }
41379 d := v_1.AuxInt
41380 v.reset(OpConst32)
41381 v.AuxInt = int64(int32(uint32(c) >> uint64(d)))
41382 return true
41383 }
41384
41385
41386
41387 for {
41388 _ = v.Args[1]
41389 x := v.Args[0]
41390 v_1 := v.Args[1]
41391 if v_1.Op != OpConst64 {
41392 break
41393 }
41394 if v_1.AuxInt != 0 {
41395 break
41396 }
41397 v.reset(OpCopy)
41398 v.Type = x.Type
41399 v.AddArg(x)
41400 return true
41401 }
41402
41403
41404
41405 for {
41406 _ = v.Args[1]
41407 v_0 := v.Args[0]
41408 if v_0.Op != OpConst32 {
41409 break
41410 }
41411 if v_0.AuxInt != 0 {
41412 break
41413 }
41414 v.reset(OpConst32)
41415 v.AuxInt = 0
41416 return true
41417 }
41418
41419
41420
41421 for {
41422 _ = v.Args[1]
41423 v_1 := v.Args[1]
41424 if v_1.Op != OpConst64 {
41425 break
41426 }
41427 c := v_1.AuxInt
41428 if !(uint64(c) >= 32) {
41429 break
41430 }
41431 v.reset(OpConst32)
41432 v.AuxInt = 0
41433 return true
41434 }
41435
41436
41437
41438 for {
41439 t := v.Type
41440 _ = v.Args[1]
41441 v_0 := v.Args[0]
41442 if v_0.Op != OpRsh32Ux64 {
41443 break
41444 }
41445 _ = v_0.Args[1]
41446 x := v_0.Args[0]
41447 v_0_1 := v_0.Args[1]
41448 if v_0_1.Op != OpConst64 {
41449 break
41450 }
41451 c := v_0_1.AuxInt
41452 v_1 := v.Args[1]
41453 if v_1.Op != OpConst64 {
41454 break
41455 }
41456 d := v_1.AuxInt
41457 if !(!uaddOvf(c, d)) {
41458 break
41459 }
41460 v.reset(OpRsh32Ux64)
41461 v.AddArg(x)
41462 v0 := b.NewValue0(v.Pos, OpConst64, t)
41463 v0.AuxInt = c + d
41464 v.AddArg(v0)
41465 return true
41466 }
41467
41468
41469
41470 for {
41471 _ = v.Args[1]
41472 v_0 := v.Args[0]
41473 if v_0.Op != OpRsh32x64 {
41474 break
41475 }
41476 _ = v_0.Args[1]
41477 x := v_0.Args[0]
41478 v_1 := v.Args[1]
41479 if v_1.Op != OpConst64 {
41480 break
41481 }
41482 t := v_1.Type
41483 if v_1.AuxInt != 31 {
41484 break
41485 }
41486 v.reset(OpRsh32Ux64)
41487 v.AddArg(x)
41488 v0 := b.NewValue0(v.Pos, OpConst64, t)
41489 v0.AuxInt = 31
41490 v.AddArg(v0)
41491 return true
41492 }
41493
41494
41495
41496 for {
41497 _ = v.Args[1]
41498 v_0 := v.Args[0]
41499 if v_0.Op != OpLsh32x64 {
41500 break
41501 }
41502 _ = v_0.Args[1]
41503 v_0_0 := v_0.Args[0]
41504 if v_0_0.Op != OpRsh32Ux64 {
41505 break
41506 }
41507 _ = v_0_0.Args[1]
41508 x := v_0_0.Args[0]
41509 v_0_0_1 := v_0_0.Args[1]
41510 if v_0_0_1.Op != OpConst64 {
41511 break
41512 }
41513 c1 := v_0_0_1.AuxInt
41514 v_0_1 := v_0.Args[1]
41515 if v_0_1.Op != OpConst64 {
41516 break
41517 }
41518 c2 := v_0_1.AuxInt
41519 v_1 := v.Args[1]
41520 if v_1.Op != OpConst64 {
41521 break
41522 }
41523 c3 := v_1.AuxInt
41524 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
41525 break
41526 }
41527 v.reset(OpRsh32Ux64)
41528 v.AddArg(x)
41529 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
41530 v0.AuxInt = c1 - c2 + c3
41531 v.AddArg(v0)
41532 return true
41533 }
41534
41535
41536
41537 for {
41538 _ = v.Args[1]
41539 v_0 := v.Args[0]
41540 if v_0.Op != OpLsh32x64 {
41541 break
41542 }
41543 _ = v_0.Args[1]
41544 x := v_0.Args[0]
41545 v_0_1 := v_0.Args[1]
41546 if v_0_1.Op != OpConst64 {
41547 break
41548 }
41549 if v_0_1.AuxInt != 24 {
41550 break
41551 }
41552 v_1 := v.Args[1]
41553 if v_1.Op != OpConst64 {
41554 break
41555 }
41556 if v_1.AuxInt != 24 {
41557 break
41558 }
41559 v.reset(OpZeroExt8to32)
41560 v0 := b.NewValue0(v.Pos, OpTrunc32to8, typ.UInt8)
41561 v0.AddArg(x)
41562 v.AddArg(v0)
41563 return true
41564 }
41565
41566
41567
41568 for {
41569 _ = v.Args[1]
41570 v_0 := v.Args[0]
41571 if v_0.Op != OpLsh32x64 {
41572 break
41573 }
41574 _ = v_0.Args[1]
41575 x := v_0.Args[0]
41576 v_0_1 := v_0.Args[1]
41577 if v_0_1.Op != OpConst64 {
41578 break
41579 }
41580 if v_0_1.AuxInt != 16 {
41581 break
41582 }
41583 v_1 := v.Args[1]
41584 if v_1.Op != OpConst64 {
41585 break
41586 }
41587 if v_1.AuxInt != 16 {
41588 break
41589 }
41590 v.reset(OpZeroExt16to32)
41591 v0 := b.NewValue0(v.Pos, OpTrunc32to16, typ.UInt16)
41592 v0.AddArg(x)
41593 v.AddArg(v0)
41594 return true
41595 }
41596 return false
41597 }
41598 func rewriteValuegeneric_OpRsh32Ux8_0(v *Value) bool {
41599 b := v.Block
41600
41601
41602
41603 for {
41604 t := v.Type
41605 _ = v.Args[1]
41606 x := v.Args[0]
41607 v_1 := v.Args[1]
41608 if v_1.Op != OpConst8 {
41609 break
41610 }
41611 c := v_1.AuxInt
41612 v.reset(OpRsh32Ux64)
41613 v.AddArg(x)
41614 v0 := b.NewValue0(v.Pos, OpConst64, t)
41615 v0.AuxInt = int64(uint8(c))
41616 v.AddArg(v0)
41617 return true
41618 }
41619
41620
41621
41622 for {
41623 _ = v.Args[1]
41624 v_0 := v.Args[0]
41625 if v_0.Op != OpConst32 {
41626 break
41627 }
41628 if v_0.AuxInt != 0 {
41629 break
41630 }
41631 v.reset(OpConst32)
41632 v.AuxInt = 0
41633 return true
41634 }
41635 return false
41636 }
41637 func rewriteValuegeneric_OpRsh32x16_0(v *Value) bool {
41638 b := v.Block
41639
41640
41641
41642 for {
41643 t := v.Type
41644 _ = v.Args[1]
41645 x := v.Args[0]
41646 v_1 := v.Args[1]
41647 if v_1.Op != OpConst16 {
41648 break
41649 }
41650 c := v_1.AuxInt
41651 v.reset(OpRsh32x64)
41652 v.AddArg(x)
41653 v0 := b.NewValue0(v.Pos, OpConst64, t)
41654 v0.AuxInt = int64(uint16(c))
41655 v.AddArg(v0)
41656 return true
41657 }
41658
41659
41660
41661 for {
41662 _ = v.Args[1]
41663 v_0 := v.Args[0]
41664 if v_0.Op != OpConst32 {
41665 break
41666 }
41667 if v_0.AuxInt != 0 {
41668 break
41669 }
41670 v.reset(OpConst32)
41671 v.AuxInt = 0
41672 return true
41673 }
41674 return false
41675 }
41676 func rewriteValuegeneric_OpRsh32x32_0(v *Value) bool {
41677 b := v.Block
41678
41679
41680
41681 for {
41682 t := v.Type
41683 _ = v.Args[1]
41684 x := v.Args[0]
41685 v_1 := v.Args[1]
41686 if v_1.Op != OpConst32 {
41687 break
41688 }
41689 c := v_1.AuxInt
41690 v.reset(OpRsh32x64)
41691 v.AddArg(x)
41692 v0 := b.NewValue0(v.Pos, OpConst64, t)
41693 v0.AuxInt = int64(uint32(c))
41694 v.AddArg(v0)
41695 return true
41696 }
41697
41698
41699
41700 for {
41701 _ = v.Args[1]
41702 v_0 := v.Args[0]
41703 if v_0.Op != OpConst32 {
41704 break
41705 }
41706 if v_0.AuxInt != 0 {
41707 break
41708 }
41709 v.reset(OpConst32)
41710 v.AuxInt = 0
41711 return true
41712 }
41713 return false
41714 }
41715 func rewriteValuegeneric_OpRsh32x64_0(v *Value) bool {
41716 b := v.Block
41717 typ := &b.Func.Config.Types
41718
41719
41720
41721 for {
41722 _ = v.Args[1]
41723 v_0 := v.Args[0]
41724 if v_0.Op != OpConst32 {
41725 break
41726 }
41727 c := v_0.AuxInt
41728 v_1 := v.Args[1]
41729 if v_1.Op != OpConst64 {
41730 break
41731 }
41732 d := v_1.AuxInt
41733 v.reset(OpConst32)
41734 v.AuxInt = int64(int32(c) >> uint64(d))
41735 return true
41736 }
41737
41738
41739
41740 for {
41741 _ = v.Args[1]
41742 x := v.Args[0]
41743 v_1 := v.Args[1]
41744 if v_1.Op != OpConst64 {
41745 break
41746 }
41747 if v_1.AuxInt != 0 {
41748 break
41749 }
41750 v.reset(OpCopy)
41751 v.Type = x.Type
41752 v.AddArg(x)
41753 return true
41754 }
41755
41756
41757
41758 for {
41759 _ = v.Args[1]
41760 v_0 := v.Args[0]
41761 if v_0.Op != OpConst32 {
41762 break
41763 }
41764 if v_0.AuxInt != 0 {
41765 break
41766 }
41767 v.reset(OpConst32)
41768 v.AuxInt = 0
41769 return true
41770 }
41771
41772
41773
41774 for {
41775 t := v.Type
41776 _ = v.Args[1]
41777 v_0 := v.Args[0]
41778 if v_0.Op != OpRsh32x64 {
41779 break
41780 }
41781 _ = v_0.Args[1]
41782 x := v_0.Args[0]
41783 v_0_1 := v_0.Args[1]
41784 if v_0_1.Op != OpConst64 {
41785 break
41786 }
41787 c := v_0_1.AuxInt
41788 v_1 := v.Args[1]
41789 if v_1.Op != OpConst64 {
41790 break
41791 }
41792 d := v_1.AuxInt
41793 if !(!uaddOvf(c, d)) {
41794 break
41795 }
41796 v.reset(OpRsh32x64)
41797 v.AddArg(x)
41798 v0 := b.NewValue0(v.Pos, OpConst64, t)
41799 v0.AuxInt = c + d
41800 v.AddArg(v0)
41801 return true
41802 }
41803
41804
41805
41806 for {
41807 _ = v.Args[1]
41808 v_0 := v.Args[0]
41809 if v_0.Op != OpLsh32x64 {
41810 break
41811 }
41812 _ = v_0.Args[1]
41813 x := v_0.Args[0]
41814 v_0_1 := v_0.Args[1]
41815 if v_0_1.Op != OpConst64 {
41816 break
41817 }
41818 if v_0_1.AuxInt != 24 {
41819 break
41820 }
41821 v_1 := v.Args[1]
41822 if v_1.Op != OpConst64 {
41823 break
41824 }
41825 if v_1.AuxInt != 24 {
41826 break
41827 }
41828 v.reset(OpSignExt8to32)
41829 v0 := b.NewValue0(v.Pos, OpTrunc32to8, typ.Int8)
41830 v0.AddArg(x)
41831 v.AddArg(v0)
41832 return true
41833 }
41834
41835
41836
41837 for {
41838 _ = v.Args[1]
41839 v_0 := v.Args[0]
41840 if v_0.Op != OpLsh32x64 {
41841 break
41842 }
41843 _ = v_0.Args[1]
41844 x := v_0.Args[0]
41845 v_0_1 := v_0.Args[1]
41846 if v_0_1.Op != OpConst64 {
41847 break
41848 }
41849 if v_0_1.AuxInt != 16 {
41850 break
41851 }
41852 v_1 := v.Args[1]
41853 if v_1.Op != OpConst64 {
41854 break
41855 }
41856 if v_1.AuxInt != 16 {
41857 break
41858 }
41859 v.reset(OpSignExt16to32)
41860 v0 := b.NewValue0(v.Pos, OpTrunc32to16, typ.Int16)
41861 v0.AddArg(x)
41862 v.AddArg(v0)
41863 return true
41864 }
41865 return false
41866 }
41867 func rewriteValuegeneric_OpRsh32x8_0(v *Value) bool {
41868 b := v.Block
41869
41870
41871
41872 for {
41873 t := v.Type
41874 _ = v.Args[1]
41875 x := v.Args[0]
41876 v_1 := v.Args[1]
41877 if v_1.Op != OpConst8 {
41878 break
41879 }
41880 c := v_1.AuxInt
41881 v.reset(OpRsh32x64)
41882 v.AddArg(x)
41883 v0 := b.NewValue0(v.Pos, OpConst64, t)
41884 v0.AuxInt = int64(uint8(c))
41885 v.AddArg(v0)
41886 return true
41887 }
41888
41889
41890
41891 for {
41892 _ = v.Args[1]
41893 v_0 := v.Args[0]
41894 if v_0.Op != OpConst32 {
41895 break
41896 }
41897 if v_0.AuxInt != 0 {
41898 break
41899 }
41900 v.reset(OpConst32)
41901 v.AuxInt = 0
41902 return true
41903 }
41904 return false
41905 }
41906 func rewriteValuegeneric_OpRsh64Ux16_0(v *Value) bool {
41907 b := v.Block
41908
41909
41910
41911 for {
41912 t := v.Type
41913 _ = v.Args[1]
41914 x := v.Args[0]
41915 v_1 := v.Args[1]
41916 if v_1.Op != OpConst16 {
41917 break
41918 }
41919 c := v_1.AuxInt
41920 v.reset(OpRsh64Ux64)
41921 v.AddArg(x)
41922 v0 := b.NewValue0(v.Pos, OpConst64, t)
41923 v0.AuxInt = int64(uint16(c))
41924 v.AddArg(v0)
41925 return true
41926 }
41927
41928
41929
41930 for {
41931 _ = v.Args[1]
41932 v_0 := v.Args[0]
41933 if v_0.Op != OpConst64 {
41934 break
41935 }
41936 if v_0.AuxInt != 0 {
41937 break
41938 }
41939 v.reset(OpConst64)
41940 v.AuxInt = 0
41941 return true
41942 }
41943 return false
41944 }
41945 func rewriteValuegeneric_OpRsh64Ux32_0(v *Value) bool {
41946 b := v.Block
41947
41948
41949
41950 for {
41951 t := v.Type
41952 _ = v.Args[1]
41953 x := v.Args[0]
41954 v_1 := v.Args[1]
41955 if v_1.Op != OpConst32 {
41956 break
41957 }
41958 c := v_1.AuxInt
41959 v.reset(OpRsh64Ux64)
41960 v.AddArg(x)
41961 v0 := b.NewValue0(v.Pos, OpConst64, t)
41962 v0.AuxInt = int64(uint32(c))
41963 v.AddArg(v0)
41964 return true
41965 }
41966
41967
41968
41969 for {
41970 _ = v.Args[1]
41971 v_0 := v.Args[0]
41972 if v_0.Op != OpConst64 {
41973 break
41974 }
41975 if v_0.AuxInt != 0 {
41976 break
41977 }
41978 v.reset(OpConst64)
41979 v.AuxInt = 0
41980 return true
41981 }
41982 return false
41983 }
41984 func rewriteValuegeneric_OpRsh64Ux64_0(v *Value) bool {
41985 b := v.Block
41986 typ := &b.Func.Config.Types
41987
41988
41989
41990 for {
41991 _ = v.Args[1]
41992 v_0 := v.Args[0]
41993 if v_0.Op != OpConst64 {
41994 break
41995 }
41996 c := v_0.AuxInt
41997 v_1 := v.Args[1]
41998 if v_1.Op != OpConst64 {
41999 break
42000 }
42001 d := v_1.AuxInt
42002 v.reset(OpConst64)
42003 v.AuxInt = int64(uint64(c) >> uint64(d))
42004 return true
42005 }
42006
42007
42008
42009 for {
42010 _ = v.Args[1]
42011 x := v.Args[0]
42012 v_1 := v.Args[1]
42013 if v_1.Op != OpConst64 {
42014 break
42015 }
42016 if v_1.AuxInt != 0 {
42017 break
42018 }
42019 v.reset(OpCopy)
42020 v.Type = x.Type
42021 v.AddArg(x)
42022 return true
42023 }
42024
42025
42026
42027 for {
42028 _ = v.Args[1]
42029 v_0 := v.Args[0]
42030 if v_0.Op != OpConst64 {
42031 break
42032 }
42033 if v_0.AuxInt != 0 {
42034 break
42035 }
42036 v.reset(OpConst64)
42037 v.AuxInt = 0
42038 return true
42039 }
42040
42041
42042
42043 for {
42044 _ = v.Args[1]
42045 v_1 := v.Args[1]
42046 if v_1.Op != OpConst64 {
42047 break
42048 }
42049 c := v_1.AuxInt
42050 if !(uint64(c) >= 64) {
42051 break
42052 }
42053 v.reset(OpConst64)
42054 v.AuxInt = 0
42055 return true
42056 }
42057
42058
42059
42060 for {
42061 t := v.Type
42062 _ = v.Args[1]
42063 v_0 := v.Args[0]
42064 if v_0.Op != OpRsh64Ux64 {
42065 break
42066 }
42067 _ = v_0.Args[1]
42068 x := v_0.Args[0]
42069 v_0_1 := v_0.Args[1]
42070 if v_0_1.Op != OpConst64 {
42071 break
42072 }
42073 c := v_0_1.AuxInt
42074 v_1 := v.Args[1]
42075 if v_1.Op != OpConst64 {
42076 break
42077 }
42078 d := v_1.AuxInt
42079 if !(!uaddOvf(c, d)) {
42080 break
42081 }
42082 v.reset(OpRsh64Ux64)
42083 v.AddArg(x)
42084 v0 := b.NewValue0(v.Pos, OpConst64, t)
42085 v0.AuxInt = c + d
42086 v.AddArg(v0)
42087 return true
42088 }
42089
42090
42091
42092 for {
42093 _ = v.Args[1]
42094 v_0 := v.Args[0]
42095 if v_0.Op != OpRsh64x64 {
42096 break
42097 }
42098 _ = v_0.Args[1]
42099 x := v_0.Args[0]
42100 v_1 := v.Args[1]
42101 if v_1.Op != OpConst64 {
42102 break
42103 }
42104 t := v_1.Type
42105 if v_1.AuxInt != 63 {
42106 break
42107 }
42108 v.reset(OpRsh64Ux64)
42109 v.AddArg(x)
42110 v0 := b.NewValue0(v.Pos, OpConst64, t)
42111 v0.AuxInt = 63
42112 v.AddArg(v0)
42113 return true
42114 }
42115
42116
42117
42118 for {
42119 _ = v.Args[1]
42120 v_0 := v.Args[0]
42121 if v_0.Op != OpLsh64x64 {
42122 break
42123 }
42124 _ = v_0.Args[1]
42125 v_0_0 := v_0.Args[0]
42126 if v_0_0.Op != OpRsh64Ux64 {
42127 break
42128 }
42129 _ = v_0_0.Args[1]
42130 x := v_0_0.Args[0]
42131 v_0_0_1 := v_0_0.Args[1]
42132 if v_0_0_1.Op != OpConst64 {
42133 break
42134 }
42135 c1 := v_0_0_1.AuxInt
42136 v_0_1 := v_0.Args[1]
42137 if v_0_1.Op != OpConst64 {
42138 break
42139 }
42140 c2 := v_0_1.AuxInt
42141 v_1 := v.Args[1]
42142 if v_1.Op != OpConst64 {
42143 break
42144 }
42145 c3 := v_1.AuxInt
42146 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
42147 break
42148 }
42149 v.reset(OpRsh64Ux64)
42150 v.AddArg(x)
42151 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
42152 v0.AuxInt = c1 - c2 + c3
42153 v.AddArg(v0)
42154 return true
42155 }
42156
42157
42158
42159 for {
42160 _ = v.Args[1]
42161 v_0 := v.Args[0]
42162 if v_0.Op != OpLsh64x64 {
42163 break
42164 }
42165 _ = v_0.Args[1]
42166 x := v_0.Args[0]
42167 v_0_1 := v_0.Args[1]
42168 if v_0_1.Op != OpConst64 {
42169 break
42170 }
42171 if v_0_1.AuxInt != 56 {
42172 break
42173 }
42174 v_1 := v.Args[1]
42175 if v_1.Op != OpConst64 {
42176 break
42177 }
42178 if v_1.AuxInt != 56 {
42179 break
42180 }
42181 v.reset(OpZeroExt8to64)
42182 v0 := b.NewValue0(v.Pos, OpTrunc64to8, typ.UInt8)
42183 v0.AddArg(x)
42184 v.AddArg(v0)
42185 return true
42186 }
42187
42188
42189
42190 for {
42191 _ = v.Args[1]
42192 v_0 := v.Args[0]
42193 if v_0.Op != OpLsh64x64 {
42194 break
42195 }
42196 _ = v_0.Args[1]
42197 x := v_0.Args[0]
42198 v_0_1 := v_0.Args[1]
42199 if v_0_1.Op != OpConst64 {
42200 break
42201 }
42202 if v_0_1.AuxInt != 48 {
42203 break
42204 }
42205 v_1 := v.Args[1]
42206 if v_1.Op != OpConst64 {
42207 break
42208 }
42209 if v_1.AuxInt != 48 {
42210 break
42211 }
42212 v.reset(OpZeroExt16to64)
42213 v0 := b.NewValue0(v.Pos, OpTrunc64to16, typ.UInt16)
42214 v0.AddArg(x)
42215 v.AddArg(v0)
42216 return true
42217 }
42218
42219
42220
42221 for {
42222 _ = v.Args[1]
42223 v_0 := v.Args[0]
42224 if v_0.Op != OpLsh64x64 {
42225 break
42226 }
42227 _ = v_0.Args[1]
42228 x := v_0.Args[0]
42229 v_0_1 := v_0.Args[1]
42230 if v_0_1.Op != OpConst64 {
42231 break
42232 }
42233 if v_0_1.AuxInt != 32 {
42234 break
42235 }
42236 v_1 := v.Args[1]
42237 if v_1.Op != OpConst64 {
42238 break
42239 }
42240 if v_1.AuxInt != 32 {
42241 break
42242 }
42243 v.reset(OpZeroExt32to64)
42244 v0 := b.NewValue0(v.Pos, OpTrunc64to32, typ.UInt32)
42245 v0.AddArg(x)
42246 v.AddArg(v0)
42247 return true
42248 }
42249 return false
42250 }
42251 func rewriteValuegeneric_OpRsh64Ux8_0(v *Value) bool {
42252 b := v.Block
42253
42254
42255
42256 for {
42257 t := v.Type
42258 _ = v.Args[1]
42259 x := v.Args[0]
42260 v_1 := v.Args[1]
42261 if v_1.Op != OpConst8 {
42262 break
42263 }
42264 c := v_1.AuxInt
42265 v.reset(OpRsh64Ux64)
42266 v.AddArg(x)
42267 v0 := b.NewValue0(v.Pos, OpConst64, t)
42268 v0.AuxInt = int64(uint8(c))
42269 v.AddArg(v0)
42270 return true
42271 }
42272
42273
42274
42275 for {
42276 _ = v.Args[1]
42277 v_0 := v.Args[0]
42278 if v_0.Op != OpConst64 {
42279 break
42280 }
42281 if v_0.AuxInt != 0 {
42282 break
42283 }
42284 v.reset(OpConst64)
42285 v.AuxInt = 0
42286 return true
42287 }
42288 return false
42289 }
42290 func rewriteValuegeneric_OpRsh64x16_0(v *Value) bool {
42291 b := v.Block
42292
42293
42294
42295 for {
42296 t := v.Type
42297 _ = v.Args[1]
42298 x := v.Args[0]
42299 v_1 := v.Args[1]
42300 if v_1.Op != OpConst16 {
42301 break
42302 }
42303 c := v_1.AuxInt
42304 v.reset(OpRsh64x64)
42305 v.AddArg(x)
42306 v0 := b.NewValue0(v.Pos, OpConst64, t)
42307 v0.AuxInt = int64(uint16(c))
42308 v.AddArg(v0)
42309 return true
42310 }
42311
42312
42313
42314 for {
42315 _ = v.Args[1]
42316 v_0 := v.Args[0]
42317 if v_0.Op != OpConst64 {
42318 break
42319 }
42320 if v_0.AuxInt != 0 {
42321 break
42322 }
42323 v.reset(OpConst64)
42324 v.AuxInt = 0
42325 return true
42326 }
42327 return false
42328 }
42329 func rewriteValuegeneric_OpRsh64x32_0(v *Value) bool {
42330 b := v.Block
42331
42332
42333
42334 for {
42335 t := v.Type
42336 _ = v.Args[1]
42337 x := v.Args[0]
42338 v_1 := v.Args[1]
42339 if v_1.Op != OpConst32 {
42340 break
42341 }
42342 c := v_1.AuxInt
42343 v.reset(OpRsh64x64)
42344 v.AddArg(x)
42345 v0 := b.NewValue0(v.Pos, OpConst64, t)
42346 v0.AuxInt = int64(uint32(c))
42347 v.AddArg(v0)
42348 return true
42349 }
42350
42351
42352
42353 for {
42354 _ = v.Args[1]
42355 v_0 := v.Args[0]
42356 if v_0.Op != OpConst64 {
42357 break
42358 }
42359 if v_0.AuxInt != 0 {
42360 break
42361 }
42362 v.reset(OpConst64)
42363 v.AuxInt = 0
42364 return true
42365 }
42366 return false
42367 }
42368 func rewriteValuegeneric_OpRsh64x64_0(v *Value) bool {
42369 b := v.Block
42370 typ := &b.Func.Config.Types
42371
42372
42373
42374 for {
42375 _ = v.Args[1]
42376 v_0 := v.Args[0]
42377 if v_0.Op != OpConst64 {
42378 break
42379 }
42380 c := v_0.AuxInt
42381 v_1 := v.Args[1]
42382 if v_1.Op != OpConst64 {
42383 break
42384 }
42385 d := v_1.AuxInt
42386 v.reset(OpConst64)
42387 v.AuxInt = c >> uint64(d)
42388 return true
42389 }
42390
42391
42392
42393 for {
42394 _ = v.Args[1]
42395 x := v.Args[0]
42396 v_1 := v.Args[1]
42397 if v_1.Op != OpConst64 {
42398 break
42399 }
42400 if v_1.AuxInt != 0 {
42401 break
42402 }
42403 v.reset(OpCopy)
42404 v.Type = x.Type
42405 v.AddArg(x)
42406 return true
42407 }
42408
42409
42410
42411 for {
42412 _ = v.Args[1]
42413 v_0 := v.Args[0]
42414 if v_0.Op != OpConst64 {
42415 break
42416 }
42417 if v_0.AuxInt != 0 {
42418 break
42419 }
42420 v.reset(OpConst64)
42421 v.AuxInt = 0
42422 return true
42423 }
42424
42425
42426
42427 for {
42428 t := v.Type
42429 _ = v.Args[1]
42430 v_0 := v.Args[0]
42431 if v_0.Op != OpRsh64x64 {
42432 break
42433 }
42434 _ = v_0.Args[1]
42435 x := v_0.Args[0]
42436 v_0_1 := v_0.Args[1]
42437 if v_0_1.Op != OpConst64 {
42438 break
42439 }
42440 c := v_0_1.AuxInt
42441 v_1 := v.Args[1]
42442 if v_1.Op != OpConst64 {
42443 break
42444 }
42445 d := v_1.AuxInt
42446 if !(!uaddOvf(c, d)) {
42447 break
42448 }
42449 v.reset(OpRsh64x64)
42450 v.AddArg(x)
42451 v0 := b.NewValue0(v.Pos, OpConst64, t)
42452 v0.AuxInt = c + d
42453 v.AddArg(v0)
42454 return true
42455 }
42456
42457
42458
42459 for {
42460 _ = v.Args[1]
42461 v_0 := v.Args[0]
42462 if v_0.Op != OpLsh64x64 {
42463 break
42464 }
42465 _ = v_0.Args[1]
42466 x := v_0.Args[0]
42467 v_0_1 := v_0.Args[1]
42468 if v_0_1.Op != OpConst64 {
42469 break
42470 }
42471 if v_0_1.AuxInt != 56 {
42472 break
42473 }
42474 v_1 := v.Args[1]
42475 if v_1.Op != OpConst64 {
42476 break
42477 }
42478 if v_1.AuxInt != 56 {
42479 break
42480 }
42481 v.reset(OpSignExt8to64)
42482 v0 := b.NewValue0(v.Pos, OpTrunc64to8, typ.Int8)
42483 v0.AddArg(x)
42484 v.AddArg(v0)
42485 return true
42486 }
42487
42488
42489
42490 for {
42491 _ = v.Args[1]
42492 v_0 := v.Args[0]
42493 if v_0.Op != OpLsh64x64 {
42494 break
42495 }
42496 _ = v_0.Args[1]
42497 x := v_0.Args[0]
42498 v_0_1 := v_0.Args[1]
42499 if v_0_1.Op != OpConst64 {
42500 break
42501 }
42502 if v_0_1.AuxInt != 48 {
42503 break
42504 }
42505 v_1 := v.Args[1]
42506 if v_1.Op != OpConst64 {
42507 break
42508 }
42509 if v_1.AuxInt != 48 {
42510 break
42511 }
42512 v.reset(OpSignExt16to64)
42513 v0 := b.NewValue0(v.Pos, OpTrunc64to16, typ.Int16)
42514 v0.AddArg(x)
42515 v.AddArg(v0)
42516 return true
42517 }
42518
42519
42520
42521 for {
42522 _ = v.Args[1]
42523 v_0 := v.Args[0]
42524 if v_0.Op != OpLsh64x64 {
42525 break
42526 }
42527 _ = v_0.Args[1]
42528 x := v_0.Args[0]
42529 v_0_1 := v_0.Args[1]
42530 if v_0_1.Op != OpConst64 {
42531 break
42532 }
42533 if v_0_1.AuxInt != 32 {
42534 break
42535 }
42536 v_1 := v.Args[1]
42537 if v_1.Op != OpConst64 {
42538 break
42539 }
42540 if v_1.AuxInt != 32 {
42541 break
42542 }
42543 v.reset(OpSignExt32to64)
42544 v0 := b.NewValue0(v.Pos, OpTrunc64to32, typ.Int32)
42545 v0.AddArg(x)
42546 v.AddArg(v0)
42547 return true
42548 }
42549 return false
42550 }
42551 func rewriteValuegeneric_OpRsh64x8_0(v *Value) bool {
42552 b := v.Block
42553
42554
42555
42556 for {
42557 t := v.Type
42558 _ = v.Args[1]
42559 x := v.Args[0]
42560 v_1 := v.Args[1]
42561 if v_1.Op != OpConst8 {
42562 break
42563 }
42564 c := v_1.AuxInt
42565 v.reset(OpRsh64x64)
42566 v.AddArg(x)
42567 v0 := b.NewValue0(v.Pos, OpConst64, t)
42568 v0.AuxInt = int64(uint8(c))
42569 v.AddArg(v0)
42570 return true
42571 }
42572
42573
42574
42575 for {
42576 _ = v.Args[1]
42577 v_0 := v.Args[0]
42578 if v_0.Op != OpConst64 {
42579 break
42580 }
42581 if v_0.AuxInt != 0 {
42582 break
42583 }
42584 v.reset(OpConst64)
42585 v.AuxInt = 0
42586 return true
42587 }
42588 return false
42589 }
42590 func rewriteValuegeneric_OpRsh8Ux16_0(v *Value) bool {
42591 b := v.Block
42592
42593
42594
42595 for {
42596 t := v.Type
42597 _ = v.Args[1]
42598 x := v.Args[0]
42599 v_1 := v.Args[1]
42600 if v_1.Op != OpConst16 {
42601 break
42602 }
42603 c := v_1.AuxInt
42604 v.reset(OpRsh8Ux64)
42605 v.AddArg(x)
42606 v0 := b.NewValue0(v.Pos, OpConst64, t)
42607 v0.AuxInt = int64(uint16(c))
42608 v.AddArg(v0)
42609 return true
42610 }
42611
42612
42613
42614 for {
42615 _ = v.Args[1]
42616 v_0 := v.Args[0]
42617 if v_0.Op != OpConst8 {
42618 break
42619 }
42620 if v_0.AuxInt != 0 {
42621 break
42622 }
42623 v.reset(OpConst8)
42624 v.AuxInt = 0
42625 return true
42626 }
42627 return false
42628 }
42629 func rewriteValuegeneric_OpRsh8Ux32_0(v *Value) bool {
42630 b := v.Block
42631
42632
42633
42634 for {
42635 t := v.Type
42636 _ = v.Args[1]
42637 x := v.Args[0]
42638 v_1 := v.Args[1]
42639 if v_1.Op != OpConst32 {
42640 break
42641 }
42642 c := v_1.AuxInt
42643 v.reset(OpRsh8Ux64)
42644 v.AddArg(x)
42645 v0 := b.NewValue0(v.Pos, OpConst64, t)
42646 v0.AuxInt = int64(uint32(c))
42647 v.AddArg(v0)
42648 return true
42649 }
42650
42651
42652
42653 for {
42654 _ = v.Args[1]
42655 v_0 := v.Args[0]
42656 if v_0.Op != OpConst8 {
42657 break
42658 }
42659 if v_0.AuxInt != 0 {
42660 break
42661 }
42662 v.reset(OpConst8)
42663 v.AuxInt = 0
42664 return true
42665 }
42666 return false
42667 }
42668 func rewriteValuegeneric_OpRsh8Ux64_0(v *Value) bool {
42669 b := v.Block
42670 typ := &b.Func.Config.Types
42671
42672
42673
42674 for {
42675 _ = v.Args[1]
42676 v_0 := v.Args[0]
42677 if v_0.Op != OpConst8 {
42678 break
42679 }
42680 c := v_0.AuxInt
42681 v_1 := v.Args[1]
42682 if v_1.Op != OpConst64 {
42683 break
42684 }
42685 d := v_1.AuxInt
42686 v.reset(OpConst8)
42687 v.AuxInt = int64(int8(uint8(c) >> uint64(d)))
42688 return true
42689 }
42690
42691
42692
42693 for {
42694 _ = v.Args[1]
42695 x := v.Args[0]
42696 v_1 := v.Args[1]
42697 if v_1.Op != OpConst64 {
42698 break
42699 }
42700 if v_1.AuxInt != 0 {
42701 break
42702 }
42703 v.reset(OpCopy)
42704 v.Type = x.Type
42705 v.AddArg(x)
42706 return true
42707 }
42708
42709
42710
42711 for {
42712 _ = v.Args[1]
42713 v_0 := v.Args[0]
42714 if v_0.Op != OpConst8 {
42715 break
42716 }
42717 if v_0.AuxInt != 0 {
42718 break
42719 }
42720 v.reset(OpConst8)
42721 v.AuxInt = 0
42722 return true
42723 }
42724
42725
42726
42727 for {
42728 _ = v.Args[1]
42729 v_1 := v.Args[1]
42730 if v_1.Op != OpConst64 {
42731 break
42732 }
42733 c := v_1.AuxInt
42734 if !(uint64(c) >= 8) {
42735 break
42736 }
42737 v.reset(OpConst8)
42738 v.AuxInt = 0
42739 return true
42740 }
42741
42742
42743
42744 for {
42745 t := v.Type
42746 _ = v.Args[1]
42747 v_0 := v.Args[0]
42748 if v_0.Op != OpRsh8Ux64 {
42749 break
42750 }
42751 _ = v_0.Args[1]
42752 x := v_0.Args[0]
42753 v_0_1 := v_0.Args[1]
42754 if v_0_1.Op != OpConst64 {
42755 break
42756 }
42757 c := v_0_1.AuxInt
42758 v_1 := v.Args[1]
42759 if v_1.Op != OpConst64 {
42760 break
42761 }
42762 d := v_1.AuxInt
42763 if !(!uaddOvf(c, d)) {
42764 break
42765 }
42766 v.reset(OpRsh8Ux64)
42767 v.AddArg(x)
42768 v0 := b.NewValue0(v.Pos, OpConst64, t)
42769 v0.AuxInt = c + d
42770 v.AddArg(v0)
42771 return true
42772 }
42773
42774
42775
42776 for {
42777 _ = v.Args[1]
42778 v_0 := v.Args[0]
42779 if v_0.Op != OpRsh8x64 {
42780 break
42781 }
42782 _ = v_0.Args[1]
42783 x := v_0.Args[0]
42784 v_1 := v.Args[1]
42785 if v_1.Op != OpConst64 {
42786 break
42787 }
42788 t := v_1.Type
42789 if v_1.AuxInt != 7 {
42790 break
42791 }
42792 v.reset(OpRsh8Ux64)
42793 v.AddArg(x)
42794 v0 := b.NewValue0(v.Pos, OpConst64, t)
42795 v0.AuxInt = 7
42796 v.AddArg(v0)
42797 return true
42798 }
42799
42800
42801
42802 for {
42803 _ = v.Args[1]
42804 v_0 := v.Args[0]
42805 if v_0.Op != OpLsh8x64 {
42806 break
42807 }
42808 _ = v_0.Args[1]
42809 v_0_0 := v_0.Args[0]
42810 if v_0_0.Op != OpRsh8Ux64 {
42811 break
42812 }
42813 _ = v_0_0.Args[1]
42814 x := v_0_0.Args[0]
42815 v_0_0_1 := v_0_0.Args[1]
42816 if v_0_0_1.Op != OpConst64 {
42817 break
42818 }
42819 c1 := v_0_0_1.AuxInt
42820 v_0_1 := v_0.Args[1]
42821 if v_0_1.Op != OpConst64 {
42822 break
42823 }
42824 c2 := v_0_1.AuxInt
42825 v_1 := v.Args[1]
42826 if v_1.Op != OpConst64 {
42827 break
42828 }
42829 c3 := v_1.AuxInt
42830 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
42831 break
42832 }
42833 v.reset(OpRsh8Ux64)
42834 v.AddArg(x)
42835 v0 := b.NewValue0(v.Pos, OpConst64, typ.UInt64)
42836 v0.AuxInt = c1 - c2 + c3
42837 v.AddArg(v0)
42838 return true
42839 }
42840 return false
42841 }
42842 func rewriteValuegeneric_OpRsh8Ux8_0(v *Value) bool {
42843 b := v.Block
42844
42845
42846
42847 for {
42848 t := v.Type
42849 _ = v.Args[1]
42850 x := v.Args[0]
42851 v_1 := v.Args[1]
42852 if v_1.Op != OpConst8 {
42853 break
42854 }
42855 c := v_1.AuxInt
42856 v.reset(OpRsh8Ux64)
42857 v.AddArg(x)
42858 v0 := b.NewValue0(v.Pos, OpConst64, t)
42859 v0.AuxInt = int64(uint8(c))
42860 v.AddArg(v0)
42861 return true
42862 }
42863
42864
42865
42866 for {
42867 _ = v.Args[1]
42868 v_0 := v.Args[0]
42869 if v_0.Op != OpConst8 {
42870 break
42871 }
42872 if v_0.AuxInt != 0 {
42873 break
42874 }
42875 v.reset(OpConst8)
42876 v.AuxInt = 0
42877 return true
42878 }
42879 return false
42880 }
42881 func rewriteValuegeneric_OpRsh8x16_0(v *Value) bool {
42882 b := v.Block
42883
42884
42885
42886 for {
42887 t := v.Type
42888 _ = v.Args[1]
42889 x := v.Args[0]
42890 v_1 := v.Args[1]
42891 if v_1.Op != OpConst16 {
42892 break
42893 }
42894 c := v_1.AuxInt
42895 v.reset(OpRsh8x64)
42896 v.AddArg(x)
42897 v0 := b.NewValue0(v.Pos, OpConst64, t)
42898 v0.AuxInt = int64(uint16(c))
42899 v.AddArg(v0)
42900 return true
42901 }
42902
42903
42904
42905 for {
42906 _ = v.Args[1]
42907 v_0 := v.Args[0]
42908 if v_0.Op != OpConst8 {
42909 break
42910 }
42911 if v_0.AuxInt != 0 {
42912 break
42913 }
42914 v.reset(OpConst8)
42915 v.AuxInt = 0
42916 return true
42917 }
42918 return false
42919 }
42920 func rewriteValuegeneric_OpRsh8x32_0(v *Value) bool {
42921 b := v.Block
42922
42923
42924
42925 for {
42926 t := v.Type
42927 _ = v.Args[1]
42928 x := v.Args[0]
42929 v_1 := v.Args[1]
42930 if v_1.Op != OpConst32 {
42931 break
42932 }
42933 c := v_1.AuxInt
42934 v.reset(OpRsh8x64)
42935 v.AddArg(x)
42936 v0 := b.NewValue0(v.Pos, OpConst64, t)
42937 v0.AuxInt = int64(uint32(c))
42938 v.AddArg(v0)
42939 return true
42940 }
42941
42942
42943
42944 for {
42945 _ = v.Args[1]
42946 v_0 := v.Args[0]
42947 if v_0.Op != OpConst8 {
42948 break
42949 }
42950 if v_0.AuxInt != 0 {
42951 break
42952 }
42953 v.reset(OpConst8)
42954 v.AuxInt = 0
42955 return true
42956 }
42957 return false
42958 }
42959 func rewriteValuegeneric_OpRsh8x64_0(v *Value) bool {
42960 b := v.Block
42961
42962
42963
42964 for {
42965 _ = v.Args[1]
42966 v_0 := v.Args[0]
42967 if v_0.Op != OpConst8 {
42968 break
42969 }
42970 c := v_0.AuxInt
42971 v_1 := v.Args[1]
42972 if v_1.Op != OpConst64 {
42973 break
42974 }
42975 d := v_1.AuxInt
42976 v.reset(OpConst8)
42977 v.AuxInt = int64(int8(c) >> uint64(d))
42978 return true
42979 }
42980
42981
42982
42983 for {
42984 _ = v.Args[1]
42985 x := v.Args[0]
42986 v_1 := v.Args[1]
42987 if v_1.Op != OpConst64 {
42988 break
42989 }
42990 if v_1.AuxInt != 0 {
42991 break
42992 }
42993 v.reset(OpCopy)
42994 v.Type = x.Type
42995 v.AddArg(x)
42996 return true
42997 }
42998
42999
43000
43001 for {
43002 _ = v.Args[1]
43003 v_0 := v.Args[0]
43004 if v_0.Op != OpConst8 {
43005 break
43006 }
43007 if v_0.AuxInt != 0 {
43008 break
43009 }
43010 v.reset(OpConst8)
43011 v.AuxInt = 0
43012 return true
43013 }
43014
43015
43016
43017 for {
43018 t := v.Type
43019 _ = v.Args[1]
43020 v_0 := v.Args[0]
43021 if v_0.Op != OpRsh8x64 {
43022 break
43023 }
43024 _ = v_0.Args[1]
43025 x := v_0.Args[0]
43026 v_0_1 := v_0.Args[1]
43027 if v_0_1.Op != OpConst64 {
43028 break
43029 }
43030 c := v_0_1.AuxInt
43031 v_1 := v.Args[1]
43032 if v_1.Op != OpConst64 {
43033 break
43034 }
43035 d := v_1.AuxInt
43036 if !(!uaddOvf(c, d)) {
43037 break
43038 }
43039 v.reset(OpRsh8x64)
43040 v.AddArg(x)
43041 v0 := b.NewValue0(v.Pos, OpConst64, t)
43042 v0.AuxInt = c + d
43043 v.AddArg(v0)
43044 return true
43045 }
43046 return false
43047 }
43048 func rewriteValuegeneric_OpRsh8x8_0(v *Value) bool {
43049 b := v.Block
43050
43051
43052
43053 for {
43054 t := v.Type
43055 _ = v.Args[1]
43056 x := v.Args[0]
43057 v_1 := v.Args[1]
43058 if v_1.Op != OpConst8 {
43059 break
43060 }
43061 c := v_1.AuxInt
43062 v.reset(OpRsh8x64)
43063 v.AddArg(x)
43064 v0 := b.NewValue0(v.Pos, OpConst64, t)
43065 v0.AuxInt = int64(uint8(c))
43066 v.AddArg(v0)
43067 return true
43068 }
43069
43070
43071
43072 for {
43073 _ = v.Args[1]
43074 v_0 := v.Args[0]
43075 if v_0.Op != OpConst8 {
43076 break
43077 }
43078 if v_0.AuxInt != 0 {
43079 break
43080 }
43081 v.reset(OpConst8)
43082 v.AuxInt = 0
43083 return true
43084 }
43085 return false
43086 }
43087 func rewriteValuegeneric_OpSelect0_0(v *Value) bool {
43088
43089
43090
43091 for {
43092 v_0 := v.Args[0]
43093 if v_0.Op != OpDiv128u {
43094 break
43095 }
43096 y := v_0.Args[2]
43097 v_0_0 := v_0.Args[0]
43098 if v_0_0.Op != OpConst64 {
43099 break
43100 }
43101 if v_0_0.AuxInt != 0 {
43102 break
43103 }
43104 lo := v_0.Args[1]
43105 v.reset(OpDiv64u)
43106 v.AddArg(lo)
43107 v.AddArg(y)
43108 return true
43109 }
43110 return false
43111 }
43112 func rewriteValuegeneric_OpSelect1_0(v *Value) bool {
43113
43114
43115
43116 for {
43117 v_0 := v.Args[0]
43118 if v_0.Op != OpDiv128u {
43119 break
43120 }
43121 y := v_0.Args[2]
43122 v_0_0 := v_0.Args[0]
43123 if v_0_0.Op != OpConst64 {
43124 break
43125 }
43126 if v_0_0.AuxInt != 0 {
43127 break
43128 }
43129 lo := v_0.Args[1]
43130 v.reset(OpMod64u)
43131 v.AddArg(lo)
43132 v.AddArg(y)
43133 return true
43134 }
43135 return false
43136 }
43137 func rewriteValuegeneric_OpSignExt16to32_0(v *Value) bool {
43138
43139
43140
43141 for {
43142 v_0 := v.Args[0]
43143 if v_0.Op != OpConst16 {
43144 break
43145 }
43146 c := v_0.AuxInt
43147 v.reset(OpConst32)
43148 v.AuxInt = int64(int16(c))
43149 return true
43150 }
43151
43152
43153
43154 for {
43155 v_0 := v.Args[0]
43156 if v_0.Op != OpTrunc32to16 {
43157 break
43158 }
43159 x := v_0.Args[0]
43160 if x.Op != OpRsh32x64 {
43161 break
43162 }
43163 _ = x.Args[1]
43164 x_1 := x.Args[1]
43165 if x_1.Op != OpConst64 {
43166 break
43167 }
43168 s := x_1.AuxInt
43169 if !(s >= 16) {
43170 break
43171 }
43172 v.reset(OpCopy)
43173 v.Type = x.Type
43174 v.AddArg(x)
43175 return true
43176 }
43177 return false
43178 }
43179 func rewriteValuegeneric_OpSignExt16to64_0(v *Value) bool {
43180
43181
43182
43183 for {
43184 v_0 := v.Args[0]
43185 if v_0.Op != OpConst16 {
43186 break
43187 }
43188 c := v_0.AuxInt
43189 v.reset(OpConst64)
43190 v.AuxInt = int64(int16(c))
43191 return true
43192 }
43193
43194
43195
43196 for {
43197 v_0 := v.Args[0]
43198 if v_0.Op != OpTrunc64to16 {
43199 break
43200 }
43201 x := v_0.Args[0]
43202 if x.Op != OpRsh64x64 {
43203 break
43204 }
43205 _ = x.Args[1]
43206 x_1 := x.Args[1]
43207 if x_1.Op != OpConst64 {
43208 break
43209 }
43210 s := x_1.AuxInt
43211 if !(s >= 48) {
43212 break
43213 }
43214 v.reset(OpCopy)
43215 v.Type = x.Type
43216 v.AddArg(x)
43217 return true
43218 }
43219 return false
43220 }
43221 func rewriteValuegeneric_OpSignExt32to64_0(v *Value) bool {
43222
43223
43224
43225 for {
43226 v_0 := v.Args[0]
43227 if v_0.Op != OpConst32 {
43228 break
43229 }
43230 c := v_0.AuxInt
43231 v.reset(OpConst64)
43232 v.AuxInt = int64(int32(c))
43233 return true
43234 }
43235
43236
43237
43238 for {
43239 v_0 := v.Args[0]
43240 if v_0.Op != OpTrunc64to32 {
43241 break
43242 }
43243 x := v_0.Args[0]
43244 if x.Op != OpRsh64x64 {
43245 break
43246 }
43247 _ = x.Args[1]
43248 x_1 := x.Args[1]
43249 if x_1.Op != OpConst64 {
43250 break
43251 }
43252 s := x_1.AuxInt
43253 if !(s >= 32) {
43254 break
43255 }
43256 v.reset(OpCopy)
43257 v.Type = x.Type
43258 v.AddArg(x)
43259 return true
43260 }
43261 return false
43262 }
43263 func rewriteValuegeneric_OpSignExt8to16_0(v *Value) bool {
43264
43265
43266
43267 for {
43268 v_0 := v.Args[0]
43269 if v_0.Op != OpConst8 {
43270 break
43271 }
43272 c := v_0.AuxInt
43273 v.reset(OpConst16)
43274 v.AuxInt = int64(int8(c))
43275 return true
43276 }
43277
43278
43279
43280 for {
43281 v_0 := v.Args[0]
43282 if v_0.Op != OpTrunc16to8 {
43283 break
43284 }
43285 x := v_0.Args[0]
43286 if x.Op != OpRsh16x64 {
43287 break
43288 }
43289 _ = x.Args[1]
43290 x_1 := x.Args[1]
43291 if x_1.Op != OpConst64 {
43292 break
43293 }
43294 s := x_1.AuxInt
43295 if !(s >= 8) {
43296 break
43297 }
43298 v.reset(OpCopy)
43299 v.Type = x.Type
43300 v.AddArg(x)
43301 return true
43302 }
43303 return false
43304 }
43305 func rewriteValuegeneric_OpSignExt8to32_0(v *Value) bool {
43306
43307
43308
43309 for {
43310 v_0 := v.Args[0]
43311 if v_0.Op != OpConst8 {
43312 break
43313 }
43314 c := v_0.AuxInt
43315 v.reset(OpConst32)
43316 v.AuxInt = int64(int8(c))
43317 return true
43318 }
43319
43320
43321
43322 for {
43323 v_0 := v.Args[0]
43324 if v_0.Op != OpTrunc32to8 {
43325 break
43326 }
43327 x := v_0.Args[0]
43328 if x.Op != OpRsh32x64 {
43329 break
43330 }
43331 _ = x.Args[1]
43332 x_1 := x.Args[1]
43333 if x_1.Op != OpConst64 {
43334 break
43335 }
43336 s := x_1.AuxInt
43337 if !(s >= 24) {
43338 break
43339 }
43340 v.reset(OpCopy)
43341 v.Type = x.Type
43342 v.AddArg(x)
43343 return true
43344 }
43345 return false
43346 }
43347 func rewriteValuegeneric_OpSignExt8to64_0(v *Value) bool {
43348
43349
43350
43351 for {
43352 v_0 := v.Args[0]
43353 if v_0.Op != OpConst8 {
43354 break
43355 }
43356 c := v_0.AuxInt
43357 v.reset(OpConst64)
43358 v.AuxInt = int64(int8(c))
43359 return true
43360 }
43361
43362
43363
43364 for {
43365 v_0 := v.Args[0]
43366 if v_0.Op != OpTrunc64to8 {
43367 break
43368 }
43369 x := v_0.Args[0]
43370 if x.Op != OpRsh64x64 {
43371 break
43372 }
43373 _ = x.Args[1]
43374 x_1 := x.Args[1]
43375 if x_1.Op != OpConst64 {
43376 break
43377 }
43378 s := x_1.AuxInt
43379 if !(s >= 56) {
43380 break
43381 }
43382 v.reset(OpCopy)
43383 v.Type = x.Type
43384 v.AddArg(x)
43385 return true
43386 }
43387 return false
43388 }
43389 func rewriteValuegeneric_OpSliceCap_0(v *Value) bool {
43390
43391
43392
43393 for {
43394 v_0 := v.Args[0]
43395 if v_0.Op != OpSliceMake {
43396 break
43397 }
43398 _ = v_0.Args[2]
43399 v_0_2 := v_0.Args[2]
43400 if v_0_2.Op != OpConst64 {
43401 break
43402 }
43403 t := v_0_2.Type
43404 c := v_0_2.AuxInt
43405 v.reset(OpConst64)
43406 v.Type = t
43407 v.AuxInt = c
43408 return true
43409 }
43410
43411
43412
43413 for {
43414 v_0 := v.Args[0]
43415 if v_0.Op != OpSliceMake {
43416 break
43417 }
43418 _ = v_0.Args[2]
43419 v_0_2 := v_0.Args[2]
43420 if v_0_2.Op != OpConst32 {
43421 break
43422 }
43423 t := v_0_2.Type
43424 c := v_0_2.AuxInt
43425 v.reset(OpConst32)
43426 v.Type = t
43427 v.AuxInt = c
43428 return true
43429 }
43430
43431
43432
43433 for {
43434 v_0 := v.Args[0]
43435 if v_0.Op != OpSliceMake {
43436 break
43437 }
43438 _ = v_0.Args[2]
43439 v_0_2 := v_0.Args[2]
43440 if v_0_2.Op != OpSliceCap {
43441 break
43442 }
43443 x := v_0_2.Args[0]
43444 v.reset(OpSliceCap)
43445 v.AddArg(x)
43446 return true
43447 }
43448
43449
43450
43451 for {
43452 v_0 := v.Args[0]
43453 if v_0.Op != OpSliceMake {
43454 break
43455 }
43456 _ = v_0.Args[2]
43457 v_0_2 := v_0.Args[2]
43458 if v_0_2.Op != OpSliceLen {
43459 break
43460 }
43461 x := v_0_2.Args[0]
43462 v.reset(OpSliceLen)
43463 v.AddArg(x)
43464 return true
43465 }
43466 return false
43467 }
43468 func rewriteValuegeneric_OpSliceLen_0(v *Value) bool {
43469
43470
43471
43472 for {
43473 v_0 := v.Args[0]
43474 if v_0.Op != OpSliceMake {
43475 break
43476 }
43477 _ = v_0.Args[2]
43478 v_0_1 := v_0.Args[1]
43479 if v_0_1.Op != OpConst64 {
43480 break
43481 }
43482 t := v_0_1.Type
43483 c := v_0_1.AuxInt
43484 v.reset(OpConst64)
43485 v.Type = t
43486 v.AuxInt = c
43487 return true
43488 }
43489
43490
43491
43492 for {
43493 v_0 := v.Args[0]
43494 if v_0.Op != OpSliceMake {
43495 break
43496 }
43497 _ = v_0.Args[2]
43498 v_0_1 := v_0.Args[1]
43499 if v_0_1.Op != OpConst32 {
43500 break
43501 }
43502 t := v_0_1.Type
43503 c := v_0_1.AuxInt
43504 v.reset(OpConst32)
43505 v.Type = t
43506 v.AuxInt = c
43507 return true
43508 }
43509
43510
43511
43512 for {
43513 v_0 := v.Args[0]
43514 if v_0.Op != OpSliceMake {
43515 break
43516 }
43517 _ = v_0.Args[2]
43518 v_0_1 := v_0.Args[1]
43519 if v_0_1.Op != OpSliceLen {
43520 break
43521 }
43522 x := v_0_1.Args[0]
43523 v.reset(OpSliceLen)
43524 v.AddArg(x)
43525 return true
43526 }
43527 return false
43528 }
43529 func rewriteValuegeneric_OpSlicePtr_0(v *Value) bool {
43530
43531
43532
43533 for {
43534 v_0 := v.Args[0]
43535 if v_0.Op != OpSliceMake {
43536 break
43537 }
43538 _ = v_0.Args[2]
43539 v_0_0 := v_0.Args[0]
43540 if v_0_0.Op != OpSlicePtr {
43541 break
43542 }
43543 x := v_0_0.Args[0]
43544 v.reset(OpSlicePtr)
43545 v.AddArg(x)
43546 return true
43547 }
43548 return false
43549 }
43550 func rewriteValuegeneric_OpSlicemask_0(v *Value) bool {
43551
43552
43553
43554 for {
43555 v_0 := v.Args[0]
43556 if v_0.Op != OpConst32 {
43557 break
43558 }
43559 x := v_0.AuxInt
43560 if !(x > 0) {
43561 break
43562 }
43563 v.reset(OpConst32)
43564 v.AuxInt = -1
43565 return true
43566 }
43567
43568
43569
43570 for {
43571 v_0 := v.Args[0]
43572 if v_0.Op != OpConst32 {
43573 break
43574 }
43575 if v_0.AuxInt != 0 {
43576 break
43577 }
43578 v.reset(OpConst32)
43579 v.AuxInt = 0
43580 return true
43581 }
43582
43583
43584
43585 for {
43586 v_0 := v.Args[0]
43587 if v_0.Op != OpConst64 {
43588 break
43589 }
43590 x := v_0.AuxInt
43591 if !(x > 0) {
43592 break
43593 }
43594 v.reset(OpConst64)
43595 v.AuxInt = -1
43596 return true
43597 }
43598
43599
43600
43601 for {
43602 v_0 := v.Args[0]
43603 if v_0.Op != OpConst64 {
43604 break
43605 }
43606 if v_0.AuxInt != 0 {
43607 break
43608 }
43609 v.reset(OpConst64)
43610 v.AuxInt = 0
43611 return true
43612 }
43613 return false
43614 }
43615 func rewriteValuegeneric_OpSqrt_0(v *Value) bool {
43616
43617
43618
43619 for {
43620 v_0 := v.Args[0]
43621 if v_0.Op != OpConst64F {
43622 break
43623 }
43624 c := v_0.AuxInt
43625 v.reset(OpConst64F)
43626 v.AuxInt = auxFrom64F(math.Sqrt(auxTo64F(c)))
43627 return true
43628 }
43629 return false
43630 }
43631 func rewriteValuegeneric_OpStaticCall_0(v *Value) bool {
43632 b := v.Block
43633 config := b.Func.Config
43634
43635
43636
43637 for {
43638 sym := v.Aux
43639 s1 := v.Args[0]
43640 if s1.Op != OpStore {
43641 break
43642 }
43643 _ = s1.Args[2]
43644 s1_1 := s1.Args[1]
43645 if s1_1.Op != OpConst64 {
43646 break
43647 }
43648 sz := s1_1.AuxInt
43649 s2 := s1.Args[2]
43650 if s2.Op != OpStore {
43651 break
43652 }
43653 _ = s2.Args[2]
43654 src := s2.Args[1]
43655 s3 := s2.Args[2]
43656 if s3.Op != OpStore {
43657 break
43658 }
43659 t := s3.Aux
43660 mem := s3.Args[2]
43661 dst := s3.Args[1]
43662 if !(isSameSym(sym, "runtime.memmove") && t.(*types.Type).IsPtr() && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1) && clobber(s2) && clobber(s3)) {
43663 break
43664 }
43665 v.reset(OpMove)
43666 v.AuxInt = sz
43667 v.Aux = t.(*types.Type).Elem()
43668 v.AddArg(dst)
43669 v.AddArg(src)
43670 v.AddArg(mem)
43671 return true
43672 }
43673
43674
43675
43676 for {
43677 sym := v.Aux
43678 s1 := v.Args[0]
43679 if s1.Op != OpStore {
43680 break
43681 }
43682 _ = s1.Args[2]
43683 s1_1 := s1.Args[1]
43684 if s1_1.Op != OpConst32 {
43685 break
43686 }
43687 sz := s1_1.AuxInt
43688 s2 := s1.Args[2]
43689 if s2.Op != OpStore {
43690 break
43691 }
43692 _ = s2.Args[2]
43693 src := s2.Args[1]
43694 s3 := s2.Args[2]
43695 if s3.Op != OpStore {
43696 break
43697 }
43698 t := s3.Aux
43699 mem := s3.Args[2]
43700 dst := s3.Args[1]
43701 if !(isSameSym(sym, "runtime.memmove") && t.(*types.Type).IsPtr() && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1) && clobber(s2) && clobber(s3)) {
43702 break
43703 }
43704 v.reset(OpMove)
43705 v.AuxInt = sz
43706 v.Aux = t.(*types.Type).Elem()
43707 v.AddArg(dst)
43708 v.AddArg(src)
43709 v.AddArg(mem)
43710 return true
43711 }
43712
43713
43714
43715 for {
43716 sym := v.Aux
43717 x := v.Args[0]
43718 if !(needRaceCleanup(sym, v)) {
43719 break
43720 }
43721 v.reset(OpCopy)
43722 v.Type = x.Type
43723 v.AddArg(x)
43724 return true
43725 }
43726 return false
43727 }
43728 func rewriteValuegeneric_OpStore_0(v *Value) bool {
43729 b := v.Block
43730
43731
43732
43733 for {
43734 t1 := v.Aux
43735 mem := v.Args[2]
43736 p1 := v.Args[0]
43737 v_1 := v.Args[1]
43738 if v_1.Op != OpLoad {
43739 break
43740 }
43741 t2 := v_1.Type
43742 _ = v_1.Args[1]
43743 p2 := v_1.Args[0]
43744 if mem != v_1.Args[1] {
43745 break
43746 }
43747 if !(isSamePtr(p1, p2) && t2.Size() == sizeof(t1)) {
43748 break
43749 }
43750 v.reset(OpCopy)
43751 v.Type = mem.Type
43752 v.AddArg(mem)
43753 return true
43754 }
43755
43756
43757
43758 for {
43759 t1 := v.Aux
43760 _ = v.Args[2]
43761 p1 := v.Args[0]
43762 v_1 := v.Args[1]
43763 if v_1.Op != OpLoad {
43764 break
43765 }
43766 t2 := v_1.Type
43767 oldmem := v_1.Args[1]
43768 p2 := v_1.Args[0]
43769 mem := v.Args[2]
43770 if mem.Op != OpStore {
43771 break
43772 }
43773 t3 := mem.Aux
43774 _ = mem.Args[2]
43775 p3 := mem.Args[0]
43776 if oldmem != mem.Args[2] {
43777 break
43778 }
43779 if !(isSamePtr(p1, p2) && t2.Size() == sizeof(t1) && disjoint(p1, sizeof(t1), p3, sizeof(t3))) {
43780 break
43781 }
43782 v.reset(OpCopy)
43783 v.Type = mem.Type
43784 v.AddArg(mem)
43785 return true
43786 }
43787
43788
43789
43790 for {
43791 t1 := v.Aux
43792 _ = v.Args[2]
43793 p1 := v.Args[0]
43794 v_1 := v.Args[1]
43795 if v_1.Op != OpLoad {
43796 break
43797 }
43798 t2 := v_1.Type
43799 oldmem := v_1.Args[1]
43800 p2 := v_1.Args[0]
43801 mem := v.Args[2]
43802 if mem.Op != OpStore {
43803 break
43804 }
43805 t3 := mem.Aux
43806 _ = mem.Args[2]
43807 p3 := mem.Args[0]
43808 mem_2 := mem.Args[2]
43809 if mem_2.Op != OpStore {
43810 break
43811 }
43812 t4 := mem_2.Aux
43813 _ = mem_2.Args[2]
43814 p4 := mem_2.Args[0]
43815 if oldmem != mem_2.Args[2] {
43816 break
43817 }
43818 if !(isSamePtr(p1, p2) && t2.Size() == sizeof(t1) && disjoint(p1, sizeof(t1), p3, sizeof(t3)) && disjoint(p1, sizeof(t1), p4, sizeof(t4))) {
43819 break
43820 }
43821 v.reset(OpCopy)
43822 v.Type = mem.Type
43823 v.AddArg(mem)
43824 return true
43825 }
43826
43827
43828
43829 for {
43830 t1 := v.Aux
43831 _ = v.Args[2]
43832 p1 := v.Args[0]
43833 v_1 := v.Args[1]
43834 if v_1.Op != OpLoad {
43835 break
43836 }
43837 t2 := v_1.Type
43838 oldmem := v_1.Args[1]
43839 p2 := v_1.Args[0]
43840 mem := v.Args[2]
43841 if mem.Op != OpStore {
43842 break
43843 }
43844 t3 := mem.Aux
43845 _ = mem.Args[2]
43846 p3 := mem.Args[0]
43847 mem_2 := mem.Args[2]
43848 if mem_2.Op != OpStore {
43849 break
43850 }
43851 t4 := mem_2.Aux
43852 _ = mem_2.Args[2]
43853 p4 := mem_2.Args[0]
43854 mem_2_2 := mem_2.Args[2]
43855 if mem_2_2.Op != OpStore {
43856 break
43857 }
43858 t5 := mem_2_2.Aux
43859 _ = mem_2_2.Args[2]
43860 p5 := mem_2_2.Args[0]
43861 if oldmem != mem_2_2.Args[2] {
43862 break
43863 }
43864 if !(isSamePtr(p1, p2) && t2.Size() == sizeof(t1) && disjoint(p1, sizeof(t1), p3, sizeof(t3)) && disjoint(p1, sizeof(t1), p4, sizeof(t4)) && disjoint(p1, sizeof(t1), p5, sizeof(t5))) {
43865 break
43866 }
43867 v.reset(OpCopy)
43868 v.Type = mem.Type
43869 v.AddArg(mem)
43870 return true
43871 }
43872
43873
43874
43875 for {
43876 t := v.Aux
43877 _ = v.Args[2]
43878 v_0 := v.Args[0]
43879 if v_0.Op != OpOffPtr {
43880 break
43881 }
43882 o := v_0.AuxInt
43883 p1 := v_0.Args[0]
43884 x := v.Args[1]
43885 mem := v.Args[2]
43886 if mem.Op != OpZero {
43887 break
43888 }
43889 n := mem.AuxInt
43890 _ = mem.Args[1]
43891 p2 := mem.Args[0]
43892 if !(isConstZero(x) && o >= 0 && sizeof(t)+o <= n && isSamePtr(p1, p2)) {
43893 break
43894 }
43895 v.reset(OpCopy)
43896 v.Type = mem.Type
43897 v.AddArg(mem)
43898 return true
43899 }
43900
43901
43902
43903 for {
43904 t1 := v.Aux
43905 _ = v.Args[2]
43906 op := v.Args[0]
43907 if op.Op != OpOffPtr {
43908 break
43909 }
43910 o1 := op.AuxInt
43911 p1 := op.Args[0]
43912 x := v.Args[1]
43913 mem := v.Args[2]
43914 if mem.Op != OpStore {
43915 break
43916 }
43917 t2 := mem.Aux
43918 _ = mem.Args[2]
43919 p2 := mem.Args[0]
43920 mem_2 := mem.Args[2]
43921 if mem_2.Op != OpZero {
43922 break
43923 }
43924 n := mem_2.AuxInt
43925 _ = mem_2.Args[1]
43926 p3 := mem_2.Args[0]
43927 if !(isConstZero(x) && o1 >= 0 && sizeof(t1)+o1 <= n && isSamePtr(p1, p3) && disjoint(op, sizeof(t1), p2, sizeof(t2))) {
43928 break
43929 }
43930 v.reset(OpCopy)
43931 v.Type = mem.Type
43932 v.AddArg(mem)
43933 return true
43934 }
43935
43936
43937
43938 for {
43939 t1 := v.Aux
43940 _ = v.Args[2]
43941 op := v.Args[0]
43942 if op.Op != OpOffPtr {
43943 break
43944 }
43945 o1 := op.AuxInt
43946 p1 := op.Args[0]
43947 x := v.Args[1]
43948 mem := v.Args[2]
43949 if mem.Op != OpStore {
43950 break
43951 }
43952 t2 := mem.Aux
43953 _ = mem.Args[2]
43954 p2 := mem.Args[0]
43955 mem_2 := mem.Args[2]
43956 if mem_2.Op != OpStore {
43957 break
43958 }
43959 t3 := mem_2.Aux
43960 _ = mem_2.Args[2]
43961 p3 := mem_2.Args[0]
43962 mem_2_2 := mem_2.Args[2]
43963 if mem_2_2.Op != OpZero {
43964 break
43965 }
43966 n := mem_2_2.AuxInt
43967 _ = mem_2_2.Args[1]
43968 p4 := mem_2_2.Args[0]
43969 if !(isConstZero(x) && o1 >= 0 && sizeof(t1)+o1 <= n && isSamePtr(p1, p4) && disjoint(op, sizeof(t1), p2, sizeof(t2)) && disjoint(op, sizeof(t1), p3, sizeof(t3))) {
43970 break
43971 }
43972 v.reset(OpCopy)
43973 v.Type = mem.Type
43974 v.AddArg(mem)
43975 return true
43976 }
43977
43978
43979
43980 for {
43981 t1 := v.Aux
43982 _ = v.Args[2]
43983 op := v.Args[0]
43984 if op.Op != OpOffPtr {
43985 break
43986 }
43987 o1 := op.AuxInt
43988 p1 := op.Args[0]
43989 x := v.Args[1]
43990 mem := v.Args[2]
43991 if mem.Op != OpStore {
43992 break
43993 }
43994 t2 := mem.Aux
43995 _ = mem.Args[2]
43996 p2 := mem.Args[0]
43997 mem_2 := mem.Args[2]
43998 if mem_2.Op != OpStore {
43999 break
44000 }
44001 t3 := mem_2.Aux
44002 _ = mem_2.Args[2]
44003 p3 := mem_2.Args[0]
44004 mem_2_2 := mem_2.Args[2]
44005 if mem_2_2.Op != OpStore {
44006 break
44007 }
44008 t4 := mem_2_2.Aux
44009 _ = mem_2_2.Args[2]
44010 p4 := mem_2_2.Args[0]
44011 mem_2_2_2 := mem_2_2.Args[2]
44012 if mem_2_2_2.Op != OpZero {
44013 break
44014 }
44015 n := mem_2_2_2.AuxInt
44016 _ = mem_2_2_2.Args[1]
44017 p5 := mem_2_2_2.Args[0]
44018 if !(isConstZero(x) && o1 >= 0 && sizeof(t1)+o1 <= n && isSamePtr(p1, p5) && disjoint(op, sizeof(t1), p2, sizeof(t2)) && disjoint(op, sizeof(t1), p3, sizeof(t3)) && disjoint(op, sizeof(t1), p4, sizeof(t4))) {
44019 break
44020 }
44021 v.reset(OpCopy)
44022 v.Type = mem.Type
44023 v.AddArg(mem)
44024 return true
44025 }
44026
44027
44028
44029 for {
44030 mem := v.Args[2]
44031 v_1 := v.Args[1]
44032 if v_1.Op != OpStructMake0 {
44033 break
44034 }
44035 v.reset(OpCopy)
44036 v.Type = mem.Type
44037 v.AddArg(mem)
44038 return true
44039 }
44040
44041
44042
44043 for {
44044 mem := v.Args[2]
44045 dst := v.Args[0]
44046 v_1 := v.Args[1]
44047 if v_1.Op != OpStructMake1 {
44048 break
44049 }
44050 t := v_1.Type
44051 f0 := v_1.Args[0]
44052 v.reset(OpStore)
44053 v.Aux = t.FieldType(0)
44054 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
44055 v0.AuxInt = 0
44056 v0.AddArg(dst)
44057 v.AddArg(v0)
44058 v.AddArg(f0)
44059 v.AddArg(mem)
44060 return true
44061 }
44062 return false
44063 }
44064 func rewriteValuegeneric_OpStore_10(v *Value) bool {
44065 b := v.Block
44066 config := b.Func.Config
44067 fe := b.Func.fe
44068
44069
44070
44071 for {
44072 mem := v.Args[2]
44073 dst := v.Args[0]
44074 v_1 := v.Args[1]
44075 if v_1.Op != OpStructMake2 {
44076 break
44077 }
44078 t := v_1.Type
44079 f1 := v_1.Args[1]
44080 f0 := v_1.Args[0]
44081 v.reset(OpStore)
44082 v.Aux = t.FieldType(1)
44083 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
44084 v0.AuxInt = t.FieldOff(1)
44085 v0.AddArg(dst)
44086 v.AddArg(v0)
44087 v.AddArg(f1)
44088 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44089 v1.Aux = t.FieldType(0)
44090 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
44091 v2.AuxInt = 0
44092 v2.AddArg(dst)
44093 v1.AddArg(v2)
44094 v1.AddArg(f0)
44095 v1.AddArg(mem)
44096 v.AddArg(v1)
44097 return true
44098 }
44099
44100
44101
44102 for {
44103 mem := v.Args[2]
44104 dst := v.Args[0]
44105 v_1 := v.Args[1]
44106 if v_1.Op != OpStructMake3 {
44107 break
44108 }
44109 t := v_1.Type
44110 f2 := v_1.Args[2]
44111 f0 := v_1.Args[0]
44112 f1 := v_1.Args[1]
44113 v.reset(OpStore)
44114 v.Aux = t.FieldType(2)
44115 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
44116 v0.AuxInt = t.FieldOff(2)
44117 v0.AddArg(dst)
44118 v.AddArg(v0)
44119 v.AddArg(f2)
44120 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44121 v1.Aux = t.FieldType(1)
44122 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
44123 v2.AuxInt = t.FieldOff(1)
44124 v2.AddArg(dst)
44125 v1.AddArg(v2)
44126 v1.AddArg(f1)
44127 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44128 v3.Aux = t.FieldType(0)
44129 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
44130 v4.AuxInt = 0
44131 v4.AddArg(dst)
44132 v3.AddArg(v4)
44133 v3.AddArg(f0)
44134 v3.AddArg(mem)
44135 v1.AddArg(v3)
44136 v.AddArg(v1)
44137 return true
44138 }
44139
44140
44141
44142 for {
44143 mem := v.Args[2]
44144 dst := v.Args[0]
44145 v_1 := v.Args[1]
44146 if v_1.Op != OpStructMake4 {
44147 break
44148 }
44149 t := v_1.Type
44150 f3 := v_1.Args[3]
44151 f0 := v_1.Args[0]
44152 f1 := v_1.Args[1]
44153 f2 := v_1.Args[2]
44154 v.reset(OpStore)
44155 v.Aux = t.FieldType(3)
44156 v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(3).PtrTo())
44157 v0.AuxInt = t.FieldOff(3)
44158 v0.AddArg(dst)
44159 v.AddArg(v0)
44160 v.AddArg(f3)
44161 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44162 v1.Aux = t.FieldType(2)
44163 v2 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo())
44164 v2.AuxInt = t.FieldOff(2)
44165 v2.AddArg(dst)
44166 v1.AddArg(v2)
44167 v1.AddArg(f2)
44168 v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44169 v3.Aux = t.FieldType(1)
44170 v4 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo())
44171 v4.AuxInt = t.FieldOff(1)
44172 v4.AddArg(dst)
44173 v3.AddArg(v4)
44174 v3.AddArg(f1)
44175 v5 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44176 v5.Aux = t.FieldType(0)
44177 v6 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo())
44178 v6.AuxInt = 0
44179 v6.AddArg(dst)
44180 v5.AddArg(v6)
44181 v5.AddArg(f0)
44182 v5.AddArg(mem)
44183 v3.AddArg(v5)
44184 v1.AddArg(v3)
44185 v.AddArg(v1)
44186 return true
44187 }
44188
44189
44190
44191 for {
44192 t := v.Aux
44193 mem := v.Args[2]
44194 dst := v.Args[0]
44195 v_1 := v.Args[1]
44196 if v_1.Op != OpLoad {
44197 break
44198 }
44199 _ = v_1.Args[1]
44200 src := v_1.Args[0]
44201 if mem != v_1.Args[1] {
44202 break
44203 }
44204 if !(!fe.CanSSA(t.(*types.Type))) {
44205 break
44206 }
44207 v.reset(OpMove)
44208 v.AuxInt = sizeof(t)
44209 v.Aux = t
44210 v.AddArg(dst)
44211 v.AddArg(src)
44212 v.AddArg(mem)
44213 return true
44214 }
44215
44216
44217
44218 for {
44219 t := v.Aux
44220 _ = v.Args[2]
44221 dst := v.Args[0]
44222 v_1 := v.Args[1]
44223 if v_1.Op != OpLoad {
44224 break
44225 }
44226 mem := v_1.Args[1]
44227 src := v_1.Args[0]
44228 v_2 := v.Args[2]
44229 if v_2.Op != OpVarDef {
44230 break
44231 }
44232 x := v_2.Aux
44233 if mem != v_2.Args[0] {
44234 break
44235 }
44236 if !(!fe.CanSSA(t.(*types.Type))) {
44237 break
44238 }
44239 v.reset(OpMove)
44240 v.AuxInt = sizeof(t)
44241 v.Aux = t
44242 v.AddArg(dst)
44243 v.AddArg(src)
44244 v0 := b.NewValue0(v.Pos, OpVarDef, types.TypeMem)
44245 v0.Aux = x
44246 v0.AddArg(mem)
44247 v.AddArg(v0)
44248 return true
44249 }
44250
44251
44252
44253 for {
44254 mem := v.Args[2]
44255 v_1 := v.Args[1]
44256 if v_1.Op != OpArrayMake0 {
44257 break
44258 }
44259 v.reset(OpCopy)
44260 v.Type = mem.Type
44261 v.AddArg(mem)
44262 return true
44263 }
44264
44265
44266
44267 for {
44268 mem := v.Args[2]
44269 dst := v.Args[0]
44270 v_1 := v.Args[1]
44271 if v_1.Op != OpArrayMake1 {
44272 break
44273 }
44274 e := v_1.Args[0]
44275 v.reset(OpStore)
44276 v.Aux = e.Type
44277 v.AddArg(dst)
44278 v.AddArg(e)
44279 v.AddArg(mem)
44280 return true
44281 }
44282
44283
44284
44285 for {
44286 mem := v.Args[2]
44287 v_0 := v.Args[0]
44288 if v_0.Op != OpLoad {
44289 break
44290 }
44291 _ = v_0.Args[1]
44292 v_0_0 := v_0.Args[0]
44293 if v_0_0.Op != OpOffPtr {
44294 break
44295 }
44296 c := v_0_0.AuxInt
44297 v_0_0_0 := v_0_0.Args[0]
44298 if v_0_0_0.Op != OpSP {
44299 break
44300 }
44301 if mem != v_0.Args[1] {
44302 break
44303 }
44304 x := v.Args[1]
44305 if !(isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) {
44306 break
44307 }
44308 v.reset(OpCopy)
44309 v.Type = mem.Type
44310 v.AddArg(mem)
44311 return true
44312 }
44313
44314
44315
44316 for {
44317 mem := v.Args[2]
44318 v_0 := v.Args[0]
44319 if v_0.Op != OpOffPtr {
44320 break
44321 }
44322 v_0_0 := v_0.Args[0]
44323 if v_0_0.Op != OpLoad {
44324 break
44325 }
44326 _ = v_0_0.Args[1]
44327 v_0_0_0 := v_0_0.Args[0]
44328 if v_0_0_0.Op != OpOffPtr {
44329 break
44330 }
44331 c := v_0_0_0.AuxInt
44332 v_0_0_0_0 := v_0_0_0.Args[0]
44333 if v_0_0_0_0.Op != OpSP {
44334 break
44335 }
44336 if mem != v_0_0.Args[1] {
44337 break
44338 }
44339 x := v.Args[1]
44340 if !(isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) {
44341 break
44342 }
44343 v.reset(OpCopy)
44344 v.Type = mem.Type
44345 v.AddArg(mem)
44346 return true
44347 }
44348
44349
44350
44351 for {
44352 t1 := v.Aux
44353 _ = v.Args[2]
44354 op1 := v.Args[0]
44355 if op1.Op != OpOffPtr {
44356 break
44357 }
44358 o1 := op1.AuxInt
44359 p1 := op1.Args[0]
44360 d1 := v.Args[1]
44361 m2 := v.Args[2]
44362 if m2.Op != OpStore {
44363 break
44364 }
44365 t2 := m2.Aux
44366 _ = m2.Args[2]
44367 op2 := m2.Args[0]
44368 if op2.Op != OpOffPtr {
44369 break
44370 }
44371 if op2.AuxInt != 0 {
44372 break
44373 }
44374 p2 := op2.Args[0]
44375 d2 := m2.Args[1]
44376 m3 := m2.Args[2]
44377 if m3.Op != OpMove {
44378 break
44379 }
44380 n := m3.AuxInt
44381 mem := m3.Args[2]
44382 p3 := m3.Args[0]
44383 if !(m2.Uses == 1 && m3.Uses == 1 && o1 == sizeof(t2) && n == sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && clobber(m2) && clobber(m3)) {
44384 break
44385 }
44386 v.reset(OpStore)
44387 v.Aux = t1
44388 v.AddArg(op1)
44389 v.AddArg(d1)
44390 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44391 v0.Aux = t2
44392 v0.AddArg(op2)
44393 v0.AddArg(d2)
44394 v0.AddArg(mem)
44395 v.AddArg(v0)
44396 return true
44397 }
44398 return false
44399 }
44400 func rewriteValuegeneric_OpStore_20(v *Value) bool {
44401 b := v.Block
44402
44403
44404
44405 for {
44406 t1 := v.Aux
44407 _ = v.Args[2]
44408 op1 := v.Args[0]
44409 if op1.Op != OpOffPtr {
44410 break
44411 }
44412 o1 := op1.AuxInt
44413 p1 := op1.Args[0]
44414 d1 := v.Args[1]
44415 m2 := v.Args[2]
44416 if m2.Op != OpStore {
44417 break
44418 }
44419 t2 := m2.Aux
44420 _ = m2.Args[2]
44421 op2 := m2.Args[0]
44422 if op2.Op != OpOffPtr {
44423 break
44424 }
44425 o2 := op2.AuxInt
44426 p2 := op2.Args[0]
44427 d2 := m2.Args[1]
44428 m3 := m2.Args[2]
44429 if m3.Op != OpStore {
44430 break
44431 }
44432 t3 := m3.Aux
44433 _ = m3.Args[2]
44434 op3 := m3.Args[0]
44435 if op3.Op != OpOffPtr {
44436 break
44437 }
44438 if op3.AuxInt != 0 {
44439 break
44440 }
44441 p3 := op3.Args[0]
44442 d3 := m3.Args[1]
44443 m4 := m3.Args[2]
44444 if m4.Op != OpMove {
44445 break
44446 }
44447 n := m4.AuxInt
44448 mem := m4.Args[2]
44449 p4 := m4.Args[0]
44450 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && clobber(m2) && clobber(m3) && clobber(m4)) {
44451 break
44452 }
44453 v.reset(OpStore)
44454 v.Aux = t1
44455 v.AddArg(op1)
44456 v.AddArg(d1)
44457 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44458 v0.Aux = t2
44459 v0.AddArg(op2)
44460 v0.AddArg(d2)
44461 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44462 v1.Aux = t3
44463 v1.AddArg(op3)
44464 v1.AddArg(d3)
44465 v1.AddArg(mem)
44466 v0.AddArg(v1)
44467 v.AddArg(v0)
44468 return true
44469 }
44470
44471
44472
44473 for {
44474 t1 := v.Aux
44475 _ = v.Args[2]
44476 op1 := v.Args[0]
44477 if op1.Op != OpOffPtr {
44478 break
44479 }
44480 o1 := op1.AuxInt
44481 p1 := op1.Args[0]
44482 d1 := v.Args[1]
44483 m2 := v.Args[2]
44484 if m2.Op != OpStore {
44485 break
44486 }
44487 t2 := m2.Aux
44488 _ = m2.Args[2]
44489 op2 := m2.Args[0]
44490 if op2.Op != OpOffPtr {
44491 break
44492 }
44493 o2 := op2.AuxInt
44494 p2 := op2.Args[0]
44495 d2 := m2.Args[1]
44496 m3 := m2.Args[2]
44497 if m3.Op != OpStore {
44498 break
44499 }
44500 t3 := m3.Aux
44501 _ = m3.Args[2]
44502 op3 := m3.Args[0]
44503 if op3.Op != OpOffPtr {
44504 break
44505 }
44506 o3 := op3.AuxInt
44507 p3 := op3.Args[0]
44508 d3 := m3.Args[1]
44509 m4 := m3.Args[2]
44510 if m4.Op != OpStore {
44511 break
44512 }
44513 t4 := m4.Aux
44514 _ = m4.Args[2]
44515 op4 := m4.Args[0]
44516 if op4.Op != OpOffPtr {
44517 break
44518 }
44519 if op4.AuxInt != 0 {
44520 break
44521 }
44522 p4 := op4.Args[0]
44523 d4 := m4.Args[1]
44524 m5 := m4.Args[2]
44525 if m5.Op != OpMove {
44526 break
44527 }
44528 n := m5.AuxInt
44529 mem := m5.Args[2]
44530 p5 := m5.Args[0]
44531 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t4)+sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && clobber(m2) && clobber(m3) && clobber(m4) && clobber(m5)) {
44532 break
44533 }
44534 v.reset(OpStore)
44535 v.Aux = t1
44536 v.AddArg(op1)
44537 v.AddArg(d1)
44538 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44539 v0.Aux = t2
44540 v0.AddArg(op2)
44541 v0.AddArg(d2)
44542 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44543 v1.Aux = t3
44544 v1.AddArg(op3)
44545 v1.AddArg(d3)
44546 v2 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44547 v2.Aux = t4
44548 v2.AddArg(op4)
44549 v2.AddArg(d4)
44550 v2.AddArg(mem)
44551 v1.AddArg(v2)
44552 v0.AddArg(v1)
44553 v.AddArg(v0)
44554 return true
44555 }
44556
44557
44558
44559 for {
44560 t1 := v.Aux
44561 _ = v.Args[2]
44562 op1 := v.Args[0]
44563 if op1.Op != OpOffPtr {
44564 break
44565 }
44566 o1 := op1.AuxInt
44567 p1 := op1.Args[0]
44568 d1 := v.Args[1]
44569 m2 := v.Args[2]
44570 if m2.Op != OpStore {
44571 break
44572 }
44573 t2 := m2.Aux
44574 _ = m2.Args[2]
44575 op2 := m2.Args[0]
44576 if op2.Op != OpOffPtr {
44577 break
44578 }
44579 if op2.AuxInt != 0 {
44580 break
44581 }
44582 p2 := op2.Args[0]
44583 d2 := m2.Args[1]
44584 m3 := m2.Args[2]
44585 if m3.Op != OpZero {
44586 break
44587 }
44588 n := m3.AuxInt
44589 mem := m3.Args[1]
44590 p3 := m3.Args[0]
44591 if !(m2.Uses == 1 && m3.Uses == 1 && o1 == sizeof(t2) && n == sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && clobber(m2) && clobber(m3)) {
44592 break
44593 }
44594 v.reset(OpStore)
44595 v.Aux = t1
44596 v.AddArg(op1)
44597 v.AddArg(d1)
44598 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44599 v0.Aux = t2
44600 v0.AddArg(op2)
44601 v0.AddArg(d2)
44602 v0.AddArg(mem)
44603 v.AddArg(v0)
44604 return true
44605 }
44606
44607
44608
44609 for {
44610 t1 := v.Aux
44611 _ = v.Args[2]
44612 op1 := v.Args[0]
44613 if op1.Op != OpOffPtr {
44614 break
44615 }
44616 o1 := op1.AuxInt
44617 p1 := op1.Args[0]
44618 d1 := v.Args[1]
44619 m2 := v.Args[2]
44620 if m2.Op != OpStore {
44621 break
44622 }
44623 t2 := m2.Aux
44624 _ = m2.Args[2]
44625 op2 := m2.Args[0]
44626 if op2.Op != OpOffPtr {
44627 break
44628 }
44629 o2 := op2.AuxInt
44630 p2 := op2.Args[0]
44631 d2 := m2.Args[1]
44632 m3 := m2.Args[2]
44633 if m3.Op != OpStore {
44634 break
44635 }
44636 t3 := m3.Aux
44637 _ = m3.Args[2]
44638 op3 := m3.Args[0]
44639 if op3.Op != OpOffPtr {
44640 break
44641 }
44642 if op3.AuxInt != 0 {
44643 break
44644 }
44645 p3 := op3.Args[0]
44646 d3 := m3.Args[1]
44647 m4 := m3.Args[2]
44648 if m4.Op != OpZero {
44649 break
44650 }
44651 n := m4.AuxInt
44652 mem := m4.Args[1]
44653 p4 := m4.Args[0]
44654 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && clobber(m2) && clobber(m3) && clobber(m4)) {
44655 break
44656 }
44657 v.reset(OpStore)
44658 v.Aux = t1
44659 v.AddArg(op1)
44660 v.AddArg(d1)
44661 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44662 v0.Aux = t2
44663 v0.AddArg(op2)
44664 v0.AddArg(d2)
44665 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44666 v1.Aux = t3
44667 v1.AddArg(op3)
44668 v1.AddArg(d3)
44669 v1.AddArg(mem)
44670 v0.AddArg(v1)
44671 v.AddArg(v0)
44672 return true
44673 }
44674
44675
44676
44677 for {
44678 t1 := v.Aux
44679 _ = v.Args[2]
44680 op1 := v.Args[0]
44681 if op1.Op != OpOffPtr {
44682 break
44683 }
44684 o1 := op1.AuxInt
44685 p1 := op1.Args[0]
44686 d1 := v.Args[1]
44687 m2 := v.Args[2]
44688 if m2.Op != OpStore {
44689 break
44690 }
44691 t2 := m2.Aux
44692 _ = m2.Args[2]
44693 op2 := m2.Args[0]
44694 if op2.Op != OpOffPtr {
44695 break
44696 }
44697 o2 := op2.AuxInt
44698 p2 := op2.Args[0]
44699 d2 := m2.Args[1]
44700 m3 := m2.Args[2]
44701 if m3.Op != OpStore {
44702 break
44703 }
44704 t3 := m3.Aux
44705 _ = m3.Args[2]
44706 op3 := m3.Args[0]
44707 if op3.Op != OpOffPtr {
44708 break
44709 }
44710 o3 := op3.AuxInt
44711 p3 := op3.Args[0]
44712 d3 := m3.Args[1]
44713 m4 := m3.Args[2]
44714 if m4.Op != OpStore {
44715 break
44716 }
44717 t4 := m4.Aux
44718 _ = m4.Args[2]
44719 op4 := m4.Args[0]
44720 if op4.Op != OpOffPtr {
44721 break
44722 }
44723 if op4.AuxInt != 0 {
44724 break
44725 }
44726 p4 := op4.Args[0]
44727 d4 := m4.Args[1]
44728 m5 := m4.Args[2]
44729 if m5.Op != OpZero {
44730 break
44731 }
44732 n := m5.AuxInt
44733 mem := m5.Args[1]
44734 p5 := m5.Args[0]
44735 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t4)+sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && clobber(m2) && clobber(m3) && clobber(m4) && clobber(m5)) {
44736 break
44737 }
44738 v.reset(OpStore)
44739 v.Aux = t1
44740 v.AddArg(op1)
44741 v.AddArg(d1)
44742 v0 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44743 v0.Aux = t2
44744 v0.AddArg(op2)
44745 v0.AddArg(d2)
44746 v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44747 v1.Aux = t3
44748 v1.AddArg(op3)
44749 v1.AddArg(d3)
44750 v2 := b.NewValue0(v.Pos, OpStore, types.TypeMem)
44751 v2.Aux = t4
44752 v2.AddArg(op4)
44753 v2.AddArg(d4)
44754 v2.AddArg(mem)
44755 v1.AddArg(v2)
44756 v0.AddArg(v1)
44757 v.AddArg(v0)
44758 return true
44759 }
44760 return false
44761 }
44762 func rewriteValuegeneric_OpStringLen_0(v *Value) bool {
44763
44764
44765
44766 for {
44767 v_0 := v.Args[0]
44768 if v_0.Op != OpStringMake {
44769 break
44770 }
44771 _ = v_0.Args[1]
44772 v_0_1 := v_0.Args[1]
44773 if v_0_1.Op != OpConst64 {
44774 break
44775 }
44776 t := v_0_1.Type
44777 c := v_0_1.AuxInt
44778 v.reset(OpConst64)
44779 v.Type = t
44780 v.AuxInt = c
44781 return true
44782 }
44783 return false
44784 }
44785 func rewriteValuegeneric_OpStringPtr_0(v *Value) bool {
44786
44787
44788
44789 for {
44790 v_0 := v.Args[0]
44791 if v_0.Op != OpStringMake {
44792 break
44793 }
44794 _ = v_0.Args[1]
44795 v_0_0 := v_0.Args[0]
44796 if v_0_0.Op != OpAddr {
44797 break
44798 }
44799 t := v_0_0.Type
44800 s := v_0_0.Aux
44801 base := v_0_0.Args[0]
44802 v.reset(OpAddr)
44803 v.Type = t
44804 v.Aux = s
44805 v.AddArg(base)
44806 return true
44807 }
44808 return false
44809 }
44810 func rewriteValuegeneric_OpStructSelect_0(v *Value) bool {
44811
44812
44813
44814 for {
44815 v_0 := v.Args[0]
44816 if v_0.Op != OpStructMake1 {
44817 break
44818 }
44819 x := v_0.Args[0]
44820 v.reset(OpCopy)
44821 v.Type = x.Type
44822 v.AddArg(x)
44823 return true
44824 }
44825
44826
44827
44828 for {
44829 if v.AuxInt != 0 {
44830 break
44831 }
44832 v_0 := v.Args[0]
44833 if v_0.Op != OpStructMake2 {
44834 break
44835 }
44836 _ = v_0.Args[1]
44837 x := v_0.Args[0]
44838 v.reset(OpCopy)
44839 v.Type = x.Type
44840 v.AddArg(x)
44841 return true
44842 }
44843
44844
44845
44846 for {
44847 if v.AuxInt != 1 {
44848 break
44849 }
44850 v_0 := v.Args[0]
44851 if v_0.Op != OpStructMake2 {
44852 break
44853 }
44854 x := v_0.Args[1]
44855 v.reset(OpCopy)
44856 v.Type = x.Type
44857 v.AddArg(x)
44858 return true
44859 }
44860
44861
44862
44863 for {
44864 if v.AuxInt != 0 {
44865 break
44866 }
44867 v_0 := v.Args[0]
44868 if v_0.Op != OpStructMake3 {
44869 break
44870 }
44871 _ = v_0.Args[2]
44872 x := v_0.Args[0]
44873 v.reset(OpCopy)
44874 v.Type = x.Type
44875 v.AddArg(x)
44876 return true
44877 }
44878
44879
44880
44881 for {
44882 if v.AuxInt != 1 {
44883 break
44884 }
44885 v_0 := v.Args[0]
44886 if v_0.Op != OpStructMake3 {
44887 break
44888 }
44889 _ = v_0.Args[2]
44890 x := v_0.Args[1]
44891 v.reset(OpCopy)
44892 v.Type = x.Type
44893 v.AddArg(x)
44894 return true
44895 }
44896
44897
44898
44899 for {
44900 if v.AuxInt != 2 {
44901 break
44902 }
44903 v_0 := v.Args[0]
44904 if v_0.Op != OpStructMake3 {
44905 break
44906 }
44907 x := v_0.Args[2]
44908 v.reset(OpCopy)
44909 v.Type = x.Type
44910 v.AddArg(x)
44911 return true
44912 }
44913
44914
44915
44916 for {
44917 if v.AuxInt != 0 {
44918 break
44919 }
44920 v_0 := v.Args[0]
44921 if v_0.Op != OpStructMake4 {
44922 break
44923 }
44924 _ = v_0.Args[3]
44925 x := v_0.Args[0]
44926 v.reset(OpCopy)
44927 v.Type = x.Type
44928 v.AddArg(x)
44929 return true
44930 }
44931
44932
44933
44934 for {
44935 if v.AuxInt != 1 {
44936 break
44937 }
44938 v_0 := v.Args[0]
44939 if v_0.Op != OpStructMake4 {
44940 break
44941 }
44942 _ = v_0.Args[3]
44943 x := v_0.Args[1]
44944 v.reset(OpCopy)
44945 v.Type = x.Type
44946 v.AddArg(x)
44947 return true
44948 }
44949
44950
44951
44952 for {
44953 if v.AuxInt != 2 {
44954 break
44955 }
44956 v_0 := v.Args[0]
44957 if v_0.Op != OpStructMake4 {
44958 break
44959 }
44960 _ = v_0.Args[3]
44961 x := v_0.Args[2]
44962 v.reset(OpCopy)
44963 v.Type = x.Type
44964 v.AddArg(x)
44965 return true
44966 }
44967
44968
44969
44970 for {
44971 if v.AuxInt != 3 {
44972 break
44973 }
44974 v_0 := v.Args[0]
44975 if v_0.Op != OpStructMake4 {
44976 break
44977 }
44978 x := v_0.Args[3]
44979 v.reset(OpCopy)
44980 v.Type = x.Type
44981 v.AddArg(x)
44982 return true
44983 }
44984 return false
44985 }
44986 func rewriteValuegeneric_OpStructSelect_10(v *Value) bool {
44987 b := v.Block
44988 fe := b.Func.fe
44989
44990
44991
44992 for {
44993 i := v.AuxInt
44994 x := v.Args[0]
44995 if x.Op != OpLoad {
44996 break
44997 }
44998 t := x.Type
44999 mem := x.Args[1]
45000 ptr := x.Args[0]
45001 if !(!fe.CanSSA(t)) {
45002 break
45003 }
45004 b = x.Block
45005 v0 := b.NewValue0(v.Pos, OpLoad, v.Type)
45006 v.reset(OpCopy)
45007 v.AddArg(v0)
45008 v1 := b.NewValue0(v.Pos, OpOffPtr, v.Type.PtrTo())
45009 v1.AuxInt = t.FieldOff(int(i))
45010 v1.AddArg(ptr)
45011 v0.AddArg(v1)
45012 v0.AddArg(mem)
45013 return true
45014 }
45015
45016
45017
45018 for {
45019 if v.AuxInt != 0 {
45020 break
45021 }
45022 x := v.Args[0]
45023 if x.Op != OpIData {
45024 break
45025 }
45026 v.reset(OpCopy)
45027 v.Type = x.Type
45028 v.AddArg(x)
45029 return true
45030 }
45031 return false
45032 }
45033 func rewriteValuegeneric_OpSub16_0(v *Value) bool {
45034 b := v.Block
45035
45036
45037
45038 for {
45039 _ = v.Args[1]
45040 v_0 := v.Args[0]
45041 if v_0.Op != OpConst16 {
45042 break
45043 }
45044 c := v_0.AuxInt
45045 v_1 := v.Args[1]
45046 if v_1.Op != OpConst16 {
45047 break
45048 }
45049 d := v_1.AuxInt
45050 v.reset(OpConst16)
45051 v.AuxInt = int64(int16(c - d))
45052 return true
45053 }
45054
45055
45056
45057 for {
45058 _ = v.Args[1]
45059 x := v.Args[0]
45060 v_1 := v.Args[1]
45061 if v_1.Op != OpConst16 {
45062 break
45063 }
45064 t := v_1.Type
45065 c := v_1.AuxInt
45066 if !(x.Op != OpConst16) {
45067 break
45068 }
45069 v.reset(OpAdd16)
45070 v0 := b.NewValue0(v.Pos, OpConst16, t)
45071 v0.AuxInt = int64(int16(-c))
45072 v.AddArg(v0)
45073 v.AddArg(x)
45074 return true
45075 }
45076
45077
45078
45079 for {
45080 t := v.Type
45081 _ = v.Args[1]
45082 v_0 := v.Args[0]
45083 if v_0.Op != OpMul16 {
45084 break
45085 }
45086 y := v_0.Args[1]
45087 x := v_0.Args[0]
45088 v_1 := v.Args[1]
45089 if v_1.Op != OpMul16 {
45090 break
45091 }
45092 z := v_1.Args[1]
45093 if x != v_1.Args[0] {
45094 break
45095 }
45096 v.reset(OpMul16)
45097 v.AddArg(x)
45098 v0 := b.NewValue0(v.Pos, OpSub16, t)
45099 v0.AddArg(y)
45100 v0.AddArg(z)
45101 v.AddArg(v0)
45102 return true
45103 }
45104
45105
45106
45107 for {
45108 t := v.Type
45109 _ = v.Args[1]
45110 v_0 := v.Args[0]
45111 if v_0.Op != OpMul16 {
45112 break
45113 }
45114 x := v_0.Args[1]
45115 y := v_0.Args[0]
45116 v_1 := v.Args[1]
45117 if v_1.Op != OpMul16 {
45118 break
45119 }
45120 z := v_1.Args[1]
45121 if x != v_1.Args[0] {
45122 break
45123 }
45124 v.reset(OpMul16)
45125 v.AddArg(x)
45126 v0 := b.NewValue0(v.Pos, OpSub16, t)
45127 v0.AddArg(y)
45128 v0.AddArg(z)
45129 v.AddArg(v0)
45130 return true
45131 }
45132
45133
45134
45135 for {
45136 t := v.Type
45137 _ = v.Args[1]
45138 v_0 := v.Args[0]
45139 if v_0.Op != OpMul16 {
45140 break
45141 }
45142 y := v_0.Args[1]
45143 x := v_0.Args[0]
45144 v_1 := v.Args[1]
45145 if v_1.Op != OpMul16 {
45146 break
45147 }
45148 _ = v_1.Args[1]
45149 z := v_1.Args[0]
45150 if x != v_1.Args[1] {
45151 break
45152 }
45153 v.reset(OpMul16)
45154 v.AddArg(x)
45155 v0 := b.NewValue0(v.Pos, OpSub16, t)
45156 v0.AddArg(y)
45157 v0.AddArg(z)
45158 v.AddArg(v0)
45159 return true
45160 }
45161
45162
45163
45164 for {
45165 t := v.Type
45166 _ = v.Args[1]
45167 v_0 := v.Args[0]
45168 if v_0.Op != OpMul16 {
45169 break
45170 }
45171 x := v_0.Args[1]
45172 y := v_0.Args[0]
45173 v_1 := v.Args[1]
45174 if v_1.Op != OpMul16 {
45175 break
45176 }
45177 _ = v_1.Args[1]
45178 z := v_1.Args[0]
45179 if x != v_1.Args[1] {
45180 break
45181 }
45182 v.reset(OpMul16)
45183 v.AddArg(x)
45184 v0 := b.NewValue0(v.Pos, OpSub16, t)
45185 v0.AddArg(y)
45186 v0.AddArg(z)
45187 v.AddArg(v0)
45188 return true
45189 }
45190
45191
45192
45193 for {
45194 x := v.Args[1]
45195 if x != v.Args[0] {
45196 break
45197 }
45198 v.reset(OpConst16)
45199 v.AuxInt = 0
45200 return true
45201 }
45202
45203
45204
45205 for {
45206 x := v.Args[1]
45207 v_0 := v.Args[0]
45208 if v_0.Op != OpAdd16 {
45209 break
45210 }
45211 y := v_0.Args[1]
45212 if x != v_0.Args[0] {
45213 break
45214 }
45215 v.reset(OpCopy)
45216 v.Type = y.Type
45217 v.AddArg(y)
45218 return true
45219 }
45220
45221
45222
45223 for {
45224 x := v.Args[1]
45225 v_0 := v.Args[0]
45226 if v_0.Op != OpAdd16 {
45227 break
45228 }
45229 _ = v_0.Args[1]
45230 y := v_0.Args[0]
45231 if x != v_0.Args[1] {
45232 break
45233 }
45234 v.reset(OpCopy)
45235 v.Type = y.Type
45236 v.AddArg(y)
45237 return true
45238 }
45239
45240
45241
45242 for {
45243 y := v.Args[1]
45244 v_0 := v.Args[0]
45245 if v_0.Op != OpAdd16 {
45246 break
45247 }
45248 _ = v_0.Args[1]
45249 x := v_0.Args[0]
45250 if y != v_0.Args[1] {
45251 break
45252 }
45253 v.reset(OpCopy)
45254 v.Type = x.Type
45255 v.AddArg(x)
45256 return true
45257 }
45258 return false
45259 }
45260 func rewriteValuegeneric_OpSub16_10(v *Value) bool {
45261 b := v.Block
45262
45263
45264
45265 for {
45266 y := v.Args[1]
45267 v_0 := v.Args[0]
45268 if v_0.Op != OpAdd16 {
45269 break
45270 }
45271 x := v_0.Args[1]
45272 if y != v_0.Args[0] {
45273 break
45274 }
45275 v.reset(OpCopy)
45276 v.Type = x.Type
45277 v.AddArg(x)
45278 return true
45279 }
45280
45281
45282
45283 for {
45284 _ = v.Args[1]
45285 x := v.Args[0]
45286 v_1 := v.Args[1]
45287 if v_1.Op != OpSub16 {
45288 break
45289 }
45290 z := v_1.Args[1]
45291 i := v_1.Args[0]
45292 if i.Op != OpConst16 {
45293 break
45294 }
45295 t := i.Type
45296 if !(z.Op != OpConst16 && x.Op != OpConst16) {
45297 break
45298 }
45299 v.reset(OpSub16)
45300 v0 := b.NewValue0(v.Pos, OpAdd16, t)
45301 v0.AddArg(x)
45302 v0.AddArg(z)
45303 v.AddArg(v0)
45304 v.AddArg(i)
45305 return true
45306 }
45307
45308
45309
45310 for {
45311 _ = v.Args[1]
45312 x := v.Args[0]
45313 v_1 := v.Args[1]
45314 if v_1.Op != OpSub16 {
45315 break
45316 }
45317 _ = v_1.Args[1]
45318 z := v_1.Args[0]
45319 i := v_1.Args[1]
45320 if i.Op != OpConst16 {
45321 break
45322 }
45323 t := i.Type
45324 if !(z.Op != OpConst16 && x.Op != OpConst16) {
45325 break
45326 }
45327 v.reset(OpAdd16)
45328 v.AddArg(i)
45329 v0 := b.NewValue0(v.Pos, OpSub16, t)
45330 v0.AddArg(x)
45331 v0.AddArg(z)
45332 v.AddArg(v0)
45333 return true
45334 }
45335
45336
45337
45338 for {
45339 _ = v.Args[1]
45340 v_0 := v.Args[0]
45341 if v_0.Op != OpConst16 {
45342 break
45343 }
45344 t := v_0.Type
45345 c := v_0.AuxInt
45346 v_1 := v.Args[1]
45347 if v_1.Op != OpSub16 {
45348 break
45349 }
45350 _ = v_1.Args[1]
45351 x := v_1.Args[0]
45352 v_1_1 := v_1.Args[1]
45353 if v_1_1.Op != OpConst16 {
45354 break
45355 }
45356 if v_1_1.Type != t {
45357 break
45358 }
45359 d := v_1_1.AuxInt
45360 v.reset(OpSub16)
45361 v0 := b.NewValue0(v.Pos, OpConst16, t)
45362 v0.AuxInt = int64(int16(c + d))
45363 v.AddArg(v0)
45364 v.AddArg(x)
45365 return true
45366 }
45367
45368
45369
45370 for {
45371 _ = v.Args[1]
45372 v_0 := v.Args[0]
45373 if v_0.Op != OpConst16 {
45374 break
45375 }
45376 t := v_0.Type
45377 c := v_0.AuxInt
45378 v_1 := v.Args[1]
45379 if v_1.Op != OpSub16 {
45380 break
45381 }
45382 x := v_1.Args[1]
45383 v_1_0 := v_1.Args[0]
45384 if v_1_0.Op != OpConst16 {
45385 break
45386 }
45387 if v_1_0.Type != t {
45388 break
45389 }
45390 d := v_1_0.AuxInt
45391 v.reset(OpAdd16)
45392 v0 := b.NewValue0(v.Pos, OpConst16, t)
45393 v0.AuxInt = int64(int16(c - d))
45394 v.AddArg(v0)
45395 v.AddArg(x)
45396 return true
45397 }
45398 return false
45399 }
45400 func rewriteValuegeneric_OpSub32_0(v *Value) bool {
45401 b := v.Block
45402
45403
45404
45405 for {
45406 _ = v.Args[1]
45407 v_0 := v.Args[0]
45408 if v_0.Op != OpConst32 {
45409 break
45410 }
45411 c := v_0.AuxInt
45412 v_1 := v.Args[1]
45413 if v_1.Op != OpConst32 {
45414 break
45415 }
45416 d := v_1.AuxInt
45417 v.reset(OpConst32)
45418 v.AuxInt = int64(int32(c - d))
45419 return true
45420 }
45421
45422
45423
45424 for {
45425 _ = v.Args[1]
45426 x := v.Args[0]
45427 v_1 := v.Args[1]
45428 if v_1.Op != OpConst32 {
45429 break
45430 }
45431 t := v_1.Type
45432 c := v_1.AuxInt
45433 if !(x.Op != OpConst32) {
45434 break
45435 }
45436 v.reset(OpAdd32)
45437 v0 := b.NewValue0(v.Pos, OpConst32, t)
45438 v0.AuxInt = int64(int32(-c))
45439 v.AddArg(v0)
45440 v.AddArg(x)
45441 return true
45442 }
45443
45444
45445
45446 for {
45447 t := v.Type
45448 _ = v.Args[1]
45449 v_0 := v.Args[0]
45450 if v_0.Op != OpMul32 {
45451 break
45452 }
45453 y := v_0.Args[1]
45454 x := v_0.Args[0]
45455 v_1 := v.Args[1]
45456 if v_1.Op != OpMul32 {
45457 break
45458 }
45459 z := v_1.Args[1]
45460 if x != v_1.Args[0] {
45461 break
45462 }
45463 v.reset(OpMul32)
45464 v.AddArg(x)
45465 v0 := b.NewValue0(v.Pos, OpSub32, t)
45466 v0.AddArg(y)
45467 v0.AddArg(z)
45468 v.AddArg(v0)
45469 return true
45470 }
45471
45472
45473
45474 for {
45475 t := v.Type
45476 _ = v.Args[1]
45477 v_0 := v.Args[0]
45478 if v_0.Op != OpMul32 {
45479 break
45480 }
45481 x := v_0.Args[1]
45482 y := v_0.Args[0]
45483 v_1 := v.Args[1]
45484 if v_1.Op != OpMul32 {
45485 break
45486 }
45487 z := v_1.Args[1]
45488 if x != v_1.Args[0] {
45489 break
45490 }
45491 v.reset(OpMul32)
45492 v.AddArg(x)
45493 v0 := b.NewValue0(v.Pos, OpSub32, t)
45494 v0.AddArg(y)
45495 v0.AddArg(z)
45496 v.AddArg(v0)
45497 return true
45498 }
45499
45500
45501
45502 for {
45503 t := v.Type
45504 _ = v.Args[1]
45505 v_0 := v.Args[0]
45506 if v_0.Op != OpMul32 {
45507 break
45508 }
45509 y := v_0.Args[1]
45510 x := v_0.Args[0]
45511 v_1 := v.Args[1]
45512 if v_1.Op != OpMul32 {
45513 break
45514 }
45515 _ = v_1.Args[1]
45516 z := v_1.Args[0]
45517 if x != v_1.Args[1] {
45518 break
45519 }
45520 v.reset(OpMul32)
45521 v.AddArg(x)
45522 v0 := b.NewValue0(v.Pos, OpSub32, t)
45523 v0.AddArg(y)
45524 v0.AddArg(z)
45525 v.AddArg(v0)
45526 return true
45527 }
45528
45529
45530
45531 for {
45532 t := v.Type
45533 _ = v.Args[1]
45534 v_0 := v.Args[0]
45535 if v_0.Op != OpMul32 {
45536 break
45537 }
45538 x := v_0.Args[1]
45539 y := v_0.Args[0]
45540 v_1 := v.Args[1]
45541 if v_1.Op != OpMul32 {
45542 break
45543 }
45544 _ = v_1.Args[1]
45545 z := v_1.Args[0]
45546 if x != v_1.Args[1] {
45547 break
45548 }
45549 v.reset(OpMul32)
45550 v.AddArg(x)
45551 v0 := b.NewValue0(v.Pos, OpSub32, t)
45552 v0.AddArg(y)
45553 v0.AddArg(z)
45554 v.AddArg(v0)
45555 return true
45556 }
45557
45558
45559
45560 for {
45561 x := v.Args[1]
45562 if x != v.Args[0] {
45563 break
45564 }
45565 v.reset(OpConst32)
45566 v.AuxInt = 0
45567 return true
45568 }
45569
45570
45571
45572 for {
45573 x := v.Args[1]
45574 v_0 := v.Args[0]
45575 if v_0.Op != OpAdd32 {
45576 break
45577 }
45578 y := v_0.Args[1]
45579 if x != v_0.Args[0] {
45580 break
45581 }
45582 v.reset(OpCopy)
45583 v.Type = y.Type
45584 v.AddArg(y)
45585 return true
45586 }
45587
45588
45589
45590 for {
45591 x := v.Args[1]
45592 v_0 := v.Args[0]
45593 if v_0.Op != OpAdd32 {
45594 break
45595 }
45596 _ = v_0.Args[1]
45597 y := v_0.Args[0]
45598 if x != v_0.Args[1] {
45599 break
45600 }
45601 v.reset(OpCopy)
45602 v.Type = y.Type
45603 v.AddArg(y)
45604 return true
45605 }
45606
45607
45608
45609 for {
45610 y := v.Args[1]
45611 v_0 := v.Args[0]
45612 if v_0.Op != OpAdd32 {
45613 break
45614 }
45615 _ = v_0.Args[1]
45616 x := v_0.Args[0]
45617 if y != v_0.Args[1] {
45618 break
45619 }
45620 v.reset(OpCopy)
45621 v.Type = x.Type
45622 v.AddArg(x)
45623 return true
45624 }
45625 return false
45626 }
45627 func rewriteValuegeneric_OpSub32_10(v *Value) bool {
45628 b := v.Block
45629
45630
45631
45632 for {
45633 y := v.Args[1]
45634 v_0 := v.Args[0]
45635 if v_0.Op != OpAdd32 {
45636 break
45637 }
45638 x := v_0.Args[1]
45639 if y != v_0.Args[0] {
45640 break
45641 }
45642 v.reset(OpCopy)
45643 v.Type = x.Type
45644 v.AddArg(x)
45645 return true
45646 }
45647
45648
45649
45650 for {
45651 _ = v.Args[1]
45652 x := v.Args[0]
45653 v_1 := v.Args[1]
45654 if v_1.Op != OpSub32 {
45655 break
45656 }
45657 z := v_1.Args[1]
45658 i := v_1.Args[0]
45659 if i.Op != OpConst32 {
45660 break
45661 }
45662 t := i.Type
45663 if !(z.Op != OpConst32 && x.Op != OpConst32) {
45664 break
45665 }
45666 v.reset(OpSub32)
45667 v0 := b.NewValue0(v.Pos, OpAdd32, t)
45668 v0.AddArg(x)
45669 v0.AddArg(z)
45670 v.AddArg(v0)
45671 v.AddArg(i)
45672 return true
45673 }
45674
45675
45676
45677 for {
45678 _ = v.Args[1]
45679 x := v.Args[0]
45680 v_1 := v.Args[1]
45681 if v_1.Op != OpSub32 {
45682 break
45683 }
45684 _ = v_1.Args[1]
45685 z := v_1.Args[0]
45686 i := v_1.Args[1]
45687 if i.Op != OpConst32 {
45688 break
45689 }
45690 t := i.Type
45691 if !(z.Op != OpConst32 && x.Op != OpConst32) {
45692 break
45693 }
45694 v.reset(OpAdd32)
45695 v.AddArg(i)
45696 v0 := b.NewValue0(v.Pos, OpSub32, t)
45697 v0.AddArg(x)
45698 v0.AddArg(z)
45699 v.AddArg(v0)
45700 return true
45701 }
45702
45703
45704
45705 for {
45706 _ = v.Args[1]
45707 v_0 := v.Args[0]
45708 if v_0.Op != OpConst32 {
45709 break
45710 }
45711 t := v_0.Type
45712 c := v_0.AuxInt
45713 v_1 := v.Args[1]
45714 if v_1.Op != OpSub32 {
45715 break
45716 }
45717 _ = v_1.Args[1]
45718 x := v_1.Args[0]
45719 v_1_1 := v_1.Args[1]
45720 if v_1_1.Op != OpConst32 {
45721 break
45722 }
45723 if v_1_1.Type != t {
45724 break
45725 }
45726 d := v_1_1.AuxInt
45727 v.reset(OpSub32)
45728 v0 := b.NewValue0(v.Pos, OpConst32, t)
45729 v0.AuxInt = int64(int32(c + d))
45730 v.AddArg(v0)
45731 v.AddArg(x)
45732 return true
45733 }
45734
45735
45736
45737 for {
45738 _ = v.Args[1]
45739 v_0 := v.Args[0]
45740 if v_0.Op != OpConst32 {
45741 break
45742 }
45743 t := v_0.Type
45744 c := v_0.AuxInt
45745 v_1 := v.Args[1]
45746 if v_1.Op != OpSub32 {
45747 break
45748 }
45749 x := v_1.Args[1]
45750 v_1_0 := v_1.Args[0]
45751 if v_1_0.Op != OpConst32 {
45752 break
45753 }
45754 if v_1_0.Type != t {
45755 break
45756 }
45757 d := v_1_0.AuxInt
45758 v.reset(OpAdd32)
45759 v0 := b.NewValue0(v.Pos, OpConst32, t)
45760 v0.AuxInt = int64(int32(c - d))
45761 v.AddArg(v0)
45762 v.AddArg(x)
45763 return true
45764 }
45765 return false
45766 }
45767 func rewriteValuegeneric_OpSub32F_0(v *Value) bool {
45768
45769
45770
45771 for {
45772 _ = v.Args[1]
45773 v_0 := v.Args[0]
45774 if v_0.Op != OpConst32F {
45775 break
45776 }
45777 c := v_0.AuxInt
45778 v_1 := v.Args[1]
45779 if v_1.Op != OpConst32F {
45780 break
45781 }
45782 d := v_1.AuxInt
45783 v.reset(OpConst32F)
45784 v.AuxInt = auxFrom32F(auxTo32F(c) - auxTo32F(d))
45785 return true
45786 }
45787 return false
45788 }
45789 func rewriteValuegeneric_OpSub64_0(v *Value) bool {
45790 b := v.Block
45791
45792
45793
45794 for {
45795 _ = v.Args[1]
45796 v_0 := v.Args[0]
45797 if v_0.Op != OpConst64 {
45798 break
45799 }
45800 c := v_0.AuxInt
45801 v_1 := v.Args[1]
45802 if v_1.Op != OpConst64 {
45803 break
45804 }
45805 d := v_1.AuxInt
45806 v.reset(OpConst64)
45807 v.AuxInt = c - d
45808 return true
45809 }
45810
45811
45812
45813 for {
45814 _ = v.Args[1]
45815 x := v.Args[0]
45816 v_1 := v.Args[1]
45817 if v_1.Op != OpConst64 {
45818 break
45819 }
45820 t := v_1.Type
45821 c := v_1.AuxInt
45822 if !(x.Op != OpConst64) {
45823 break
45824 }
45825 v.reset(OpAdd64)
45826 v0 := b.NewValue0(v.Pos, OpConst64, t)
45827 v0.AuxInt = -c
45828 v.AddArg(v0)
45829 v.AddArg(x)
45830 return true
45831 }
45832
45833
45834
45835 for {
45836 t := v.Type
45837 _ = v.Args[1]
45838 v_0 := v.Args[0]
45839 if v_0.Op != OpMul64 {
45840 break
45841 }
45842 y := v_0.Args[1]
45843 x := v_0.Args[0]
45844 v_1 := v.Args[1]
45845 if v_1.Op != OpMul64 {
45846 break
45847 }
45848 z := v_1.Args[1]
45849 if x != v_1.Args[0] {
45850 break
45851 }
45852 v.reset(OpMul64)
45853 v.AddArg(x)
45854 v0 := b.NewValue0(v.Pos, OpSub64, t)
45855 v0.AddArg(y)
45856 v0.AddArg(z)
45857 v.AddArg(v0)
45858 return true
45859 }
45860
45861
45862
45863 for {
45864 t := v.Type
45865 _ = v.Args[1]
45866 v_0 := v.Args[0]
45867 if v_0.Op != OpMul64 {
45868 break
45869 }
45870 x := v_0.Args[1]
45871 y := v_0.Args[0]
45872 v_1 := v.Args[1]
45873 if v_1.Op != OpMul64 {
45874 break
45875 }
45876 z := v_1.Args[1]
45877 if x != v_1.Args[0] {
45878 break
45879 }
45880 v.reset(OpMul64)
45881 v.AddArg(x)
45882 v0 := b.NewValue0(v.Pos, OpSub64, t)
45883 v0.AddArg(y)
45884 v0.AddArg(z)
45885 v.AddArg(v0)
45886 return true
45887 }
45888
45889
45890
45891 for {
45892 t := v.Type
45893 _ = v.Args[1]
45894 v_0 := v.Args[0]
45895 if v_0.Op != OpMul64 {
45896 break
45897 }
45898 y := v_0.Args[1]
45899 x := v_0.Args[0]
45900 v_1 := v.Args[1]
45901 if v_1.Op != OpMul64 {
45902 break
45903 }
45904 _ = v_1.Args[1]
45905 z := v_1.Args[0]
45906 if x != v_1.Args[1] {
45907 break
45908 }
45909 v.reset(OpMul64)
45910 v.AddArg(x)
45911 v0 := b.NewValue0(v.Pos, OpSub64, t)
45912 v0.AddArg(y)
45913 v0.AddArg(z)
45914 v.AddArg(v0)
45915 return true
45916 }
45917
45918
45919
45920 for {
45921 t := v.Type
45922 _ = v.Args[1]
45923 v_0 := v.Args[0]
45924 if v_0.Op != OpMul64 {
45925 break
45926 }
45927 x := v_0.Args[1]
45928 y := v_0.Args[0]
45929 v_1 := v.Args[1]
45930 if v_1.Op != OpMul64 {
45931 break
45932 }
45933 _ = v_1.Args[1]
45934 z := v_1.Args[0]
45935 if x != v_1.Args[1] {
45936 break
45937 }
45938 v.reset(OpMul64)
45939 v.AddArg(x)
45940 v0 := b.NewValue0(v.Pos, OpSub64, t)
45941 v0.AddArg(y)
45942 v0.AddArg(z)
45943 v.AddArg(v0)
45944 return true
45945 }
45946
45947
45948
45949 for {
45950 x := v.Args[1]
45951 if x != v.Args[0] {
45952 break
45953 }
45954 v.reset(OpConst64)
45955 v.AuxInt = 0
45956 return true
45957 }
45958
45959
45960
45961 for {
45962 x := v.Args[1]
45963 v_0 := v.Args[0]
45964 if v_0.Op != OpAdd64 {
45965 break
45966 }
45967 y := v_0.Args[1]
45968 if x != v_0.Args[0] {
45969 break
45970 }
45971 v.reset(OpCopy)
45972 v.Type = y.Type
45973 v.AddArg(y)
45974 return true
45975 }
45976
45977
45978
45979 for {
45980 x := v.Args[1]
45981 v_0 := v.Args[0]
45982 if v_0.Op != OpAdd64 {
45983 break
45984 }
45985 _ = v_0.Args[1]
45986 y := v_0.Args[0]
45987 if x != v_0.Args[1] {
45988 break
45989 }
45990 v.reset(OpCopy)
45991 v.Type = y.Type
45992 v.AddArg(y)
45993 return true
45994 }
45995
45996
45997
45998 for {
45999 y := v.Args[1]
46000 v_0 := v.Args[0]
46001 if v_0.Op != OpAdd64 {
46002 break
46003 }
46004 _ = v_0.Args[1]
46005 x := v_0.Args[0]
46006 if y != v_0.Args[1] {
46007 break
46008 }
46009 v.reset(OpCopy)
46010 v.Type = x.Type
46011 v.AddArg(x)
46012 return true
46013 }
46014 return false
46015 }
46016 func rewriteValuegeneric_OpSub64_10(v *Value) bool {
46017 b := v.Block
46018
46019
46020
46021 for {
46022 y := v.Args[1]
46023 v_0 := v.Args[0]
46024 if v_0.Op != OpAdd64 {
46025 break
46026 }
46027 x := v_0.Args[1]
46028 if y != v_0.Args[0] {
46029 break
46030 }
46031 v.reset(OpCopy)
46032 v.Type = x.Type
46033 v.AddArg(x)
46034 return true
46035 }
46036
46037
46038
46039 for {
46040 _ = v.Args[1]
46041 x := v.Args[0]
46042 v_1 := v.Args[1]
46043 if v_1.Op != OpSub64 {
46044 break
46045 }
46046 z := v_1.Args[1]
46047 i := v_1.Args[0]
46048 if i.Op != OpConst64 {
46049 break
46050 }
46051 t := i.Type
46052 if !(z.Op != OpConst64 && x.Op != OpConst64) {
46053 break
46054 }
46055 v.reset(OpSub64)
46056 v0 := b.NewValue0(v.Pos, OpAdd64, t)
46057 v0.AddArg(x)
46058 v0.AddArg(z)
46059 v.AddArg(v0)
46060 v.AddArg(i)
46061 return true
46062 }
46063
46064
46065
46066 for {
46067 _ = v.Args[1]
46068 x := v.Args[0]
46069 v_1 := v.Args[1]
46070 if v_1.Op != OpSub64 {
46071 break
46072 }
46073 _ = v_1.Args[1]
46074 z := v_1.Args[0]
46075 i := v_1.Args[1]
46076 if i.Op != OpConst64 {
46077 break
46078 }
46079 t := i.Type
46080 if !(z.Op != OpConst64 && x.Op != OpConst64) {
46081 break
46082 }
46083 v.reset(OpAdd64)
46084 v.AddArg(i)
46085 v0 := b.NewValue0(v.Pos, OpSub64, t)
46086 v0.AddArg(x)
46087 v0.AddArg(z)
46088 v.AddArg(v0)
46089 return true
46090 }
46091
46092
46093
46094 for {
46095 _ = v.Args[1]
46096 v_0 := v.Args[0]
46097 if v_0.Op != OpConst64 {
46098 break
46099 }
46100 t := v_0.Type
46101 c := v_0.AuxInt
46102 v_1 := v.Args[1]
46103 if v_1.Op != OpSub64 {
46104 break
46105 }
46106 _ = v_1.Args[1]
46107 x := v_1.Args[0]
46108 v_1_1 := v_1.Args[1]
46109 if v_1_1.Op != OpConst64 {
46110 break
46111 }
46112 if v_1_1.Type != t {
46113 break
46114 }
46115 d := v_1_1.AuxInt
46116 v.reset(OpSub64)
46117 v0 := b.NewValue0(v.Pos, OpConst64, t)
46118 v0.AuxInt = c + d
46119 v.AddArg(v0)
46120 v.AddArg(x)
46121 return true
46122 }
46123
46124
46125
46126 for {
46127 _ = v.Args[1]
46128 v_0 := v.Args[0]
46129 if v_0.Op != OpConst64 {
46130 break
46131 }
46132 t := v_0.Type
46133 c := v_0.AuxInt
46134 v_1 := v.Args[1]
46135 if v_1.Op != OpSub64 {
46136 break
46137 }
46138 x := v_1.Args[1]
46139 v_1_0 := v_1.Args[0]
46140 if v_1_0.Op != OpConst64 {
46141 break
46142 }
46143 if v_1_0.Type != t {
46144 break
46145 }
46146 d := v_1_0.AuxInt
46147 v.reset(OpAdd64)
46148 v0 := b.NewValue0(v.Pos, OpConst64, t)
46149 v0.AuxInt = c - d
46150 v.AddArg(v0)
46151 v.AddArg(x)
46152 return true
46153 }
46154 return false
46155 }
46156 func rewriteValuegeneric_OpSub64F_0(v *Value) bool {
46157
46158
46159
46160 for {
46161 _ = v.Args[1]
46162 v_0 := v.Args[0]
46163 if v_0.Op != OpConst64F {
46164 break
46165 }
46166 c := v_0.AuxInt
46167 v_1 := v.Args[1]
46168 if v_1.Op != OpConst64F {
46169 break
46170 }
46171 d := v_1.AuxInt
46172 v.reset(OpConst64F)
46173 v.AuxInt = auxFrom64F(auxTo64F(c) - auxTo64F(d))
46174 return true
46175 }
46176 return false
46177 }
46178 func rewriteValuegeneric_OpSub8_0(v *Value) bool {
46179 b := v.Block
46180
46181
46182
46183 for {
46184 _ = v.Args[1]
46185 v_0 := v.Args[0]
46186 if v_0.Op != OpConst8 {
46187 break
46188 }
46189 c := v_0.AuxInt
46190 v_1 := v.Args[1]
46191 if v_1.Op != OpConst8 {
46192 break
46193 }
46194 d := v_1.AuxInt
46195 v.reset(OpConst8)
46196 v.AuxInt = int64(int8(c - d))
46197 return true
46198 }
46199
46200
46201
46202 for {
46203 _ = v.Args[1]
46204 x := v.Args[0]
46205 v_1 := v.Args[1]
46206 if v_1.Op != OpConst8 {
46207 break
46208 }
46209 t := v_1.Type
46210 c := v_1.AuxInt
46211 if !(x.Op != OpConst8) {
46212 break
46213 }
46214 v.reset(OpAdd8)
46215 v0 := b.NewValue0(v.Pos, OpConst8, t)
46216 v0.AuxInt = int64(int8(-c))
46217 v.AddArg(v0)
46218 v.AddArg(x)
46219 return true
46220 }
46221
46222
46223
46224 for {
46225 t := v.Type
46226 _ = v.Args[1]
46227 v_0 := v.Args[0]
46228 if v_0.Op != OpMul8 {
46229 break
46230 }
46231 y := v_0.Args[1]
46232 x := v_0.Args[0]
46233 v_1 := v.Args[1]
46234 if v_1.Op != OpMul8 {
46235 break
46236 }
46237 z := v_1.Args[1]
46238 if x != v_1.Args[0] {
46239 break
46240 }
46241 v.reset(OpMul8)
46242 v.AddArg(x)
46243 v0 := b.NewValue0(v.Pos, OpSub8, t)
46244 v0.AddArg(y)
46245 v0.AddArg(z)
46246 v.AddArg(v0)
46247 return true
46248 }
46249
46250
46251
46252 for {
46253 t := v.Type
46254 _ = v.Args[1]
46255 v_0 := v.Args[0]
46256 if v_0.Op != OpMul8 {
46257 break
46258 }
46259 x := v_0.Args[1]
46260 y := v_0.Args[0]
46261 v_1 := v.Args[1]
46262 if v_1.Op != OpMul8 {
46263 break
46264 }
46265 z := v_1.Args[1]
46266 if x != v_1.Args[0] {
46267 break
46268 }
46269 v.reset(OpMul8)
46270 v.AddArg(x)
46271 v0 := b.NewValue0(v.Pos, OpSub8, t)
46272 v0.AddArg(y)
46273 v0.AddArg(z)
46274 v.AddArg(v0)
46275 return true
46276 }
46277
46278
46279
46280 for {
46281 t := v.Type
46282 _ = v.Args[1]
46283 v_0 := v.Args[0]
46284 if v_0.Op != OpMul8 {
46285 break
46286 }
46287 y := v_0.Args[1]
46288 x := v_0.Args[0]
46289 v_1 := v.Args[1]
46290 if v_1.Op != OpMul8 {
46291 break
46292 }
46293 _ = v_1.Args[1]
46294 z := v_1.Args[0]
46295 if x != v_1.Args[1] {
46296 break
46297 }
46298 v.reset(OpMul8)
46299 v.AddArg(x)
46300 v0 := b.NewValue0(v.Pos, OpSub8, t)
46301 v0.AddArg(y)
46302 v0.AddArg(z)
46303 v.AddArg(v0)
46304 return true
46305 }
46306
46307
46308
46309 for {
46310 t := v.Type
46311 _ = v.Args[1]
46312 v_0 := v.Args[0]
46313 if v_0.Op != OpMul8 {
46314 break
46315 }
46316 x := v_0.Args[1]
46317 y := v_0.Args[0]
46318 v_1 := v.Args[1]
46319 if v_1.Op != OpMul8 {
46320 break
46321 }
46322 _ = v_1.Args[1]
46323 z := v_1.Args[0]
46324 if x != v_1.Args[1] {
46325 break
46326 }
46327 v.reset(OpMul8)
46328 v.AddArg(x)
46329 v0 := b.NewValue0(v.Pos, OpSub8, t)
46330 v0.AddArg(y)
46331 v0.AddArg(z)
46332 v.AddArg(v0)
46333 return true
46334 }
46335
46336
46337
46338 for {
46339 x := v.Args[1]
46340 if x != v.Args[0] {
46341 break
46342 }
46343 v.reset(OpConst8)
46344 v.AuxInt = 0
46345 return true
46346 }
46347
46348
46349
46350 for {
46351 x := v.Args[1]
46352 v_0 := v.Args[0]
46353 if v_0.Op != OpAdd8 {
46354 break
46355 }
46356 y := v_0.Args[1]
46357 if x != v_0.Args[0] {
46358 break
46359 }
46360 v.reset(OpCopy)
46361 v.Type = y.Type
46362 v.AddArg(y)
46363 return true
46364 }
46365
46366
46367
46368 for {
46369 x := v.Args[1]
46370 v_0 := v.Args[0]
46371 if v_0.Op != OpAdd8 {
46372 break
46373 }
46374 _ = v_0.Args[1]
46375 y := v_0.Args[0]
46376 if x != v_0.Args[1] {
46377 break
46378 }
46379 v.reset(OpCopy)
46380 v.Type = y.Type
46381 v.AddArg(y)
46382 return true
46383 }
46384
46385
46386
46387 for {
46388 y := v.Args[1]
46389 v_0 := v.Args[0]
46390 if v_0.Op != OpAdd8 {
46391 break
46392 }
46393 _ = v_0.Args[1]
46394 x := v_0.Args[0]
46395 if y != v_0.Args[1] {
46396 break
46397 }
46398 v.reset(OpCopy)
46399 v.Type = x.Type
46400 v.AddArg(x)
46401 return true
46402 }
46403 return false
46404 }
46405 func rewriteValuegeneric_OpSub8_10(v *Value) bool {
46406 b := v.Block
46407
46408
46409
46410 for {
46411 y := v.Args[1]
46412 v_0 := v.Args[0]
46413 if v_0.Op != OpAdd8 {
46414 break
46415 }
46416 x := v_0.Args[1]
46417 if y != v_0.Args[0] {
46418 break
46419 }
46420 v.reset(OpCopy)
46421 v.Type = x.Type
46422 v.AddArg(x)
46423 return true
46424 }
46425
46426
46427
46428 for {
46429 _ = v.Args[1]
46430 x := v.Args[0]
46431 v_1 := v.Args[1]
46432 if v_1.Op != OpSub8 {
46433 break
46434 }
46435 z := v_1.Args[1]
46436 i := v_1.Args[0]
46437 if i.Op != OpConst8 {
46438 break
46439 }
46440 t := i.Type
46441 if !(z.Op != OpConst8 && x.Op != OpConst8) {
46442 break
46443 }
46444 v.reset(OpSub8)
46445 v0 := b.NewValue0(v.Pos, OpAdd8, t)
46446 v0.AddArg(x)
46447 v0.AddArg(z)
46448 v.AddArg(v0)
46449 v.AddArg(i)
46450 return true
46451 }
46452
46453
46454
46455 for {
46456 _ = v.Args[1]
46457 x := v.Args[0]
46458 v_1 := v.Args[1]
46459 if v_1.Op != OpSub8 {
46460 break
46461 }
46462 _ = v_1.Args[1]
46463 z := v_1.Args[0]
46464 i := v_1.Args[1]
46465 if i.Op != OpConst8 {
46466 break
46467 }
46468 t := i.Type
46469 if !(z.Op != OpConst8 && x.Op != OpConst8) {
46470 break
46471 }
46472 v.reset(OpAdd8)
46473 v.AddArg(i)
46474 v0 := b.NewValue0(v.Pos, OpSub8, t)
46475 v0.AddArg(x)
46476 v0.AddArg(z)
46477 v.AddArg(v0)
46478 return true
46479 }
46480
46481
46482
46483 for {
46484 _ = v.Args[1]
46485 v_0 := v.Args[0]
46486 if v_0.Op != OpConst8 {
46487 break
46488 }
46489 t := v_0.Type
46490 c := v_0.AuxInt
46491 v_1 := v.Args[1]
46492 if v_1.Op != OpSub8 {
46493 break
46494 }
46495 _ = v_1.Args[1]
46496 x := v_1.Args[0]
46497 v_1_1 := v_1.Args[1]
46498 if v_1_1.Op != OpConst8 {
46499 break
46500 }
46501 if v_1_1.Type != t {
46502 break
46503 }
46504 d := v_1_1.AuxInt
46505 v.reset(OpSub8)
46506 v0 := b.NewValue0(v.Pos, OpConst8, t)
46507 v0.AuxInt = int64(int8(c + d))
46508 v.AddArg(v0)
46509 v.AddArg(x)
46510 return true
46511 }
46512
46513
46514
46515 for {
46516 _ = v.Args[1]
46517 v_0 := v.Args[0]
46518 if v_0.Op != OpConst8 {
46519 break
46520 }
46521 t := v_0.Type
46522 c := v_0.AuxInt
46523 v_1 := v.Args[1]
46524 if v_1.Op != OpSub8 {
46525 break
46526 }
46527 x := v_1.Args[1]
46528 v_1_0 := v_1.Args[0]
46529 if v_1_0.Op != OpConst8 {
46530 break
46531 }
46532 if v_1_0.Type != t {
46533 break
46534 }
46535 d := v_1_0.AuxInt
46536 v.reset(OpAdd8)
46537 v0 := b.NewValue0(v.Pos, OpConst8, t)
46538 v0.AuxInt = int64(int8(c - d))
46539 v.AddArg(v0)
46540 v.AddArg(x)
46541 return true
46542 }
46543 return false
46544 }
46545 func rewriteValuegeneric_OpTrunc16to8_0(v *Value) bool {
46546
46547
46548
46549 for {
46550 v_0 := v.Args[0]
46551 if v_0.Op != OpConst16 {
46552 break
46553 }
46554 c := v_0.AuxInt
46555 v.reset(OpConst8)
46556 v.AuxInt = int64(int8(c))
46557 return true
46558 }
46559
46560
46561
46562 for {
46563 v_0 := v.Args[0]
46564 if v_0.Op != OpZeroExt8to16 {
46565 break
46566 }
46567 x := v_0.Args[0]
46568 v.reset(OpCopy)
46569 v.Type = x.Type
46570 v.AddArg(x)
46571 return true
46572 }
46573
46574
46575
46576 for {
46577 v_0 := v.Args[0]
46578 if v_0.Op != OpSignExt8to16 {
46579 break
46580 }
46581 x := v_0.Args[0]
46582 v.reset(OpCopy)
46583 v.Type = x.Type
46584 v.AddArg(x)
46585 return true
46586 }
46587
46588
46589
46590 for {
46591 v_0 := v.Args[0]
46592 if v_0.Op != OpAnd16 {
46593 break
46594 }
46595 x := v_0.Args[1]
46596 v_0_0 := v_0.Args[0]
46597 if v_0_0.Op != OpConst16 {
46598 break
46599 }
46600 y := v_0_0.AuxInt
46601 if !(y&0xFF == 0xFF) {
46602 break
46603 }
46604 v.reset(OpTrunc16to8)
46605 v.AddArg(x)
46606 return true
46607 }
46608
46609
46610
46611 for {
46612 v_0 := v.Args[0]
46613 if v_0.Op != OpAnd16 {
46614 break
46615 }
46616 _ = v_0.Args[1]
46617 x := v_0.Args[0]
46618 v_0_1 := v_0.Args[1]
46619 if v_0_1.Op != OpConst16 {
46620 break
46621 }
46622 y := v_0_1.AuxInt
46623 if !(y&0xFF == 0xFF) {
46624 break
46625 }
46626 v.reset(OpTrunc16to8)
46627 v.AddArg(x)
46628 return true
46629 }
46630 return false
46631 }
46632 func rewriteValuegeneric_OpTrunc32to16_0(v *Value) bool {
46633
46634
46635
46636 for {
46637 v_0 := v.Args[0]
46638 if v_0.Op != OpConst32 {
46639 break
46640 }
46641 c := v_0.AuxInt
46642 v.reset(OpConst16)
46643 v.AuxInt = int64(int16(c))
46644 return true
46645 }
46646
46647
46648
46649 for {
46650 v_0 := v.Args[0]
46651 if v_0.Op != OpZeroExt8to32 {
46652 break
46653 }
46654 x := v_0.Args[0]
46655 v.reset(OpZeroExt8to16)
46656 v.AddArg(x)
46657 return true
46658 }
46659
46660
46661
46662 for {
46663 v_0 := v.Args[0]
46664 if v_0.Op != OpZeroExt16to32 {
46665 break
46666 }
46667 x := v_0.Args[0]
46668 v.reset(OpCopy)
46669 v.Type = x.Type
46670 v.AddArg(x)
46671 return true
46672 }
46673
46674
46675
46676 for {
46677 v_0 := v.Args[0]
46678 if v_0.Op != OpSignExt8to32 {
46679 break
46680 }
46681 x := v_0.Args[0]
46682 v.reset(OpSignExt8to16)
46683 v.AddArg(x)
46684 return true
46685 }
46686
46687
46688
46689 for {
46690 v_0 := v.Args[0]
46691 if v_0.Op != OpSignExt16to32 {
46692 break
46693 }
46694 x := v_0.Args[0]
46695 v.reset(OpCopy)
46696 v.Type = x.Type
46697 v.AddArg(x)
46698 return true
46699 }
46700
46701
46702
46703 for {
46704 v_0 := v.Args[0]
46705 if v_0.Op != OpAnd32 {
46706 break
46707 }
46708 x := v_0.Args[1]
46709 v_0_0 := v_0.Args[0]
46710 if v_0_0.Op != OpConst32 {
46711 break
46712 }
46713 y := v_0_0.AuxInt
46714 if !(y&0xFFFF == 0xFFFF) {
46715 break
46716 }
46717 v.reset(OpTrunc32to16)
46718 v.AddArg(x)
46719 return true
46720 }
46721
46722
46723
46724 for {
46725 v_0 := v.Args[0]
46726 if v_0.Op != OpAnd32 {
46727 break
46728 }
46729 _ = v_0.Args[1]
46730 x := v_0.Args[0]
46731 v_0_1 := v_0.Args[1]
46732 if v_0_1.Op != OpConst32 {
46733 break
46734 }
46735 y := v_0_1.AuxInt
46736 if !(y&0xFFFF == 0xFFFF) {
46737 break
46738 }
46739 v.reset(OpTrunc32to16)
46740 v.AddArg(x)
46741 return true
46742 }
46743 return false
46744 }
46745 func rewriteValuegeneric_OpTrunc32to8_0(v *Value) bool {
46746
46747
46748
46749 for {
46750 v_0 := v.Args[0]
46751 if v_0.Op != OpConst32 {
46752 break
46753 }
46754 c := v_0.AuxInt
46755 v.reset(OpConst8)
46756 v.AuxInt = int64(int8(c))
46757 return true
46758 }
46759
46760
46761
46762 for {
46763 v_0 := v.Args[0]
46764 if v_0.Op != OpZeroExt8to32 {
46765 break
46766 }
46767 x := v_0.Args[0]
46768 v.reset(OpCopy)
46769 v.Type = x.Type
46770 v.AddArg(x)
46771 return true
46772 }
46773
46774
46775
46776 for {
46777 v_0 := v.Args[0]
46778 if v_0.Op != OpSignExt8to32 {
46779 break
46780 }
46781 x := v_0.Args[0]
46782 v.reset(OpCopy)
46783 v.Type = x.Type
46784 v.AddArg(x)
46785 return true
46786 }
46787
46788
46789
46790 for {
46791 v_0 := v.Args[0]
46792 if v_0.Op != OpAnd32 {
46793 break
46794 }
46795 x := v_0.Args[1]
46796 v_0_0 := v_0.Args[0]
46797 if v_0_0.Op != OpConst32 {
46798 break
46799 }
46800 y := v_0_0.AuxInt
46801 if !(y&0xFF == 0xFF) {
46802 break
46803 }
46804 v.reset(OpTrunc32to8)
46805 v.AddArg(x)
46806 return true
46807 }
46808
46809
46810
46811 for {
46812 v_0 := v.Args[0]
46813 if v_0.Op != OpAnd32 {
46814 break
46815 }
46816 _ = v_0.Args[1]
46817 x := v_0.Args[0]
46818 v_0_1 := v_0.Args[1]
46819 if v_0_1.Op != OpConst32 {
46820 break
46821 }
46822 y := v_0_1.AuxInt
46823 if !(y&0xFF == 0xFF) {
46824 break
46825 }
46826 v.reset(OpTrunc32to8)
46827 v.AddArg(x)
46828 return true
46829 }
46830 return false
46831 }
46832 func rewriteValuegeneric_OpTrunc64to16_0(v *Value) bool {
46833
46834
46835
46836 for {
46837 v_0 := v.Args[0]
46838 if v_0.Op != OpConst64 {
46839 break
46840 }
46841 c := v_0.AuxInt
46842 v.reset(OpConst16)
46843 v.AuxInt = int64(int16(c))
46844 return true
46845 }
46846
46847
46848
46849 for {
46850 v_0 := v.Args[0]
46851 if v_0.Op != OpZeroExt8to64 {
46852 break
46853 }
46854 x := v_0.Args[0]
46855 v.reset(OpZeroExt8to16)
46856 v.AddArg(x)
46857 return true
46858 }
46859
46860
46861
46862 for {
46863 v_0 := v.Args[0]
46864 if v_0.Op != OpZeroExt16to64 {
46865 break
46866 }
46867 x := v_0.Args[0]
46868 v.reset(OpCopy)
46869 v.Type = x.Type
46870 v.AddArg(x)
46871 return true
46872 }
46873
46874
46875
46876 for {
46877 v_0 := v.Args[0]
46878 if v_0.Op != OpSignExt8to64 {
46879 break
46880 }
46881 x := v_0.Args[0]
46882 v.reset(OpSignExt8to16)
46883 v.AddArg(x)
46884 return true
46885 }
46886
46887
46888
46889 for {
46890 v_0 := v.Args[0]
46891 if v_0.Op != OpSignExt16to64 {
46892 break
46893 }
46894 x := v_0.Args[0]
46895 v.reset(OpCopy)
46896 v.Type = x.Type
46897 v.AddArg(x)
46898 return true
46899 }
46900
46901
46902
46903 for {
46904 v_0 := v.Args[0]
46905 if v_0.Op != OpAnd64 {
46906 break
46907 }
46908 x := v_0.Args[1]
46909 v_0_0 := v_0.Args[0]
46910 if v_0_0.Op != OpConst64 {
46911 break
46912 }
46913 y := v_0_0.AuxInt
46914 if !(y&0xFFFF == 0xFFFF) {
46915 break
46916 }
46917 v.reset(OpTrunc64to16)
46918 v.AddArg(x)
46919 return true
46920 }
46921
46922
46923
46924 for {
46925 v_0 := v.Args[0]
46926 if v_0.Op != OpAnd64 {
46927 break
46928 }
46929 _ = v_0.Args[1]
46930 x := v_0.Args[0]
46931 v_0_1 := v_0.Args[1]
46932 if v_0_1.Op != OpConst64 {
46933 break
46934 }
46935 y := v_0_1.AuxInt
46936 if !(y&0xFFFF == 0xFFFF) {
46937 break
46938 }
46939 v.reset(OpTrunc64to16)
46940 v.AddArg(x)
46941 return true
46942 }
46943 return false
46944 }
46945 func rewriteValuegeneric_OpTrunc64to32_0(v *Value) bool {
46946
46947
46948
46949 for {
46950 v_0 := v.Args[0]
46951 if v_0.Op != OpConst64 {
46952 break
46953 }
46954 c := v_0.AuxInt
46955 v.reset(OpConst32)
46956 v.AuxInt = int64(int32(c))
46957 return true
46958 }
46959
46960
46961
46962 for {
46963 v_0 := v.Args[0]
46964 if v_0.Op != OpZeroExt8to64 {
46965 break
46966 }
46967 x := v_0.Args[0]
46968 v.reset(OpZeroExt8to32)
46969 v.AddArg(x)
46970 return true
46971 }
46972
46973
46974
46975 for {
46976 v_0 := v.Args[0]
46977 if v_0.Op != OpZeroExt16to64 {
46978 break
46979 }
46980 x := v_0.Args[0]
46981 v.reset(OpZeroExt16to32)
46982 v.AddArg(x)
46983 return true
46984 }
46985
46986
46987
46988 for {
46989 v_0 := v.Args[0]
46990 if v_0.Op != OpZeroExt32to64 {
46991 break
46992 }
46993 x := v_0.Args[0]
46994 v.reset(OpCopy)
46995 v.Type = x.Type
46996 v.AddArg(x)
46997 return true
46998 }
46999
47000
47001
47002 for {
47003 v_0 := v.Args[0]
47004 if v_0.Op != OpSignExt8to64 {
47005 break
47006 }
47007 x := v_0.Args[0]
47008 v.reset(OpSignExt8to32)
47009 v.AddArg(x)
47010 return true
47011 }
47012
47013
47014
47015 for {
47016 v_0 := v.Args[0]
47017 if v_0.Op != OpSignExt16to64 {
47018 break
47019 }
47020 x := v_0.Args[0]
47021 v.reset(OpSignExt16to32)
47022 v.AddArg(x)
47023 return true
47024 }
47025
47026
47027
47028 for {
47029 v_0 := v.Args[0]
47030 if v_0.Op != OpSignExt32to64 {
47031 break
47032 }
47033 x := v_0.Args[0]
47034 v.reset(OpCopy)
47035 v.Type = x.Type
47036 v.AddArg(x)
47037 return true
47038 }
47039
47040
47041
47042 for {
47043 v_0 := v.Args[0]
47044 if v_0.Op != OpAnd64 {
47045 break
47046 }
47047 x := v_0.Args[1]
47048 v_0_0 := v_0.Args[0]
47049 if v_0_0.Op != OpConst64 {
47050 break
47051 }
47052 y := v_0_0.AuxInt
47053 if !(y&0xFFFFFFFF == 0xFFFFFFFF) {
47054 break
47055 }
47056 v.reset(OpTrunc64to32)
47057 v.AddArg(x)
47058 return true
47059 }
47060
47061
47062
47063 for {
47064 v_0 := v.Args[0]
47065 if v_0.Op != OpAnd64 {
47066 break
47067 }
47068 _ = v_0.Args[1]
47069 x := v_0.Args[0]
47070 v_0_1 := v_0.Args[1]
47071 if v_0_1.Op != OpConst64 {
47072 break
47073 }
47074 y := v_0_1.AuxInt
47075 if !(y&0xFFFFFFFF == 0xFFFFFFFF) {
47076 break
47077 }
47078 v.reset(OpTrunc64to32)
47079 v.AddArg(x)
47080 return true
47081 }
47082 return false
47083 }
47084 func rewriteValuegeneric_OpTrunc64to8_0(v *Value) bool {
47085
47086
47087
47088 for {
47089 v_0 := v.Args[0]
47090 if v_0.Op != OpConst64 {
47091 break
47092 }
47093 c := v_0.AuxInt
47094 v.reset(OpConst8)
47095 v.AuxInt = int64(int8(c))
47096 return true
47097 }
47098
47099
47100
47101 for {
47102 v_0 := v.Args[0]
47103 if v_0.Op != OpZeroExt8to64 {
47104 break
47105 }
47106 x := v_0.Args[0]
47107 v.reset(OpCopy)
47108 v.Type = x.Type
47109 v.AddArg(x)
47110 return true
47111 }
47112
47113
47114
47115 for {
47116 v_0 := v.Args[0]
47117 if v_0.Op != OpSignExt8to64 {
47118 break
47119 }
47120 x := v_0.Args[0]
47121 v.reset(OpCopy)
47122 v.Type = x.Type
47123 v.AddArg(x)
47124 return true
47125 }
47126
47127
47128
47129 for {
47130 v_0 := v.Args[0]
47131 if v_0.Op != OpAnd64 {
47132 break
47133 }
47134 x := v_0.Args[1]
47135 v_0_0 := v_0.Args[0]
47136 if v_0_0.Op != OpConst64 {
47137 break
47138 }
47139 y := v_0_0.AuxInt
47140 if !(y&0xFF == 0xFF) {
47141 break
47142 }
47143 v.reset(OpTrunc64to8)
47144 v.AddArg(x)
47145 return true
47146 }
47147
47148
47149
47150 for {
47151 v_0 := v.Args[0]
47152 if v_0.Op != OpAnd64 {
47153 break
47154 }
47155 _ = v_0.Args[1]
47156 x := v_0.Args[0]
47157 v_0_1 := v_0.Args[1]
47158 if v_0_1.Op != OpConst64 {
47159 break
47160 }
47161 y := v_0_1.AuxInt
47162 if !(y&0xFF == 0xFF) {
47163 break
47164 }
47165 v.reset(OpTrunc64to8)
47166 v.AddArg(x)
47167 return true
47168 }
47169 return false
47170 }
47171 func rewriteValuegeneric_OpXor16_0(v *Value) bool {
47172 b := v.Block
47173
47174
47175
47176 for {
47177 _ = v.Args[1]
47178 v_0 := v.Args[0]
47179 if v_0.Op != OpConst16 {
47180 break
47181 }
47182 c := v_0.AuxInt
47183 v_1 := v.Args[1]
47184 if v_1.Op != OpConst16 {
47185 break
47186 }
47187 d := v_1.AuxInt
47188 v.reset(OpConst16)
47189 v.AuxInt = int64(int16(c ^ d))
47190 return true
47191 }
47192
47193
47194
47195 for {
47196 _ = v.Args[1]
47197 v_0 := v.Args[0]
47198 if v_0.Op != OpConst16 {
47199 break
47200 }
47201 d := v_0.AuxInt
47202 v_1 := v.Args[1]
47203 if v_1.Op != OpConst16 {
47204 break
47205 }
47206 c := v_1.AuxInt
47207 v.reset(OpConst16)
47208 v.AuxInt = int64(int16(c ^ d))
47209 return true
47210 }
47211
47212
47213
47214 for {
47215 x := v.Args[1]
47216 if x != v.Args[0] {
47217 break
47218 }
47219 v.reset(OpConst16)
47220 v.AuxInt = 0
47221 return true
47222 }
47223
47224
47225
47226 for {
47227 x := v.Args[1]
47228 v_0 := v.Args[0]
47229 if v_0.Op != OpConst16 {
47230 break
47231 }
47232 if v_0.AuxInt != 0 {
47233 break
47234 }
47235 v.reset(OpCopy)
47236 v.Type = x.Type
47237 v.AddArg(x)
47238 return true
47239 }
47240
47241
47242
47243 for {
47244 _ = v.Args[1]
47245 x := v.Args[0]
47246 v_1 := v.Args[1]
47247 if v_1.Op != OpConst16 {
47248 break
47249 }
47250 if v_1.AuxInt != 0 {
47251 break
47252 }
47253 v.reset(OpCopy)
47254 v.Type = x.Type
47255 v.AddArg(x)
47256 return true
47257 }
47258
47259
47260
47261 for {
47262 _ = v.Args[1]
47263 x := v.Args[0]
47264 v_1 := v.Args[1]
47265 if v_1.Op != OpXor16 {
47266 break
47267 }
47268 y := v_1.Args[1]
47269 if x != v_1.Args[0] {
47270 break
47271 }
47272 v.reset(OpCopy)
47273 v.Type = y.Type
47274 v.AddArg(y)
47275 return true
47276 }
47277
47278
47279
47280 for {
47281 _ = v.Args[1]
47282 x := v.Args[0]
47283 v_1 := v.Args[1]
47284 if v_1.Op != OpXor16 {
47285 break
47286 }
47287 _ = v_1.Args[1]
47288 y := v_1.Args[0]
47289 if x != v_1.Args[1] {
47290 break
47291 }
47292 v.reset(OpCopy)
47293 v.Type = y.Type
47294 v.AddArg(y)
47295 return true
47296 }
47297
47298
47299
47300 for {
47301 x := v.Args[1]
47302 v_0 := v.Args[0]
47303 if v_0.Op != OpXor16 {
47304 break
47305 }
47306 y := v_0.Args[1]
47307 if x != v_0.Args[0] {
47308 break
47309 }
47310 v.reset(OpCopy)
47311 v.Type = y.Type
47312 v.AddArg(y)
47313 return true
47314 }
47315
47316
47317
47318 for {
47319 x := v.Args[1]
47320 v_0 := v.Args[0]
47321 if v_0.Op != OpXor16 {
47322 break
47323 }
47324 _ = v_0.Args[1]
47325 y := v_0.Args[0]
47326 if x != v_0.Args[1] {
47327 break
47328 }
47329 v.reset(OpCopy)
47330 v.Type = y.Type
47331 v.AddArg(y)
47332 return true
47333 }
47334
47335
47336
47337 for {
47338 x := v.Args[1]
47339 v_0 := v.Args[0]
47340 if v_0.Op != OpXor16 {
47341 break
47342 }
47343 z := v_0.Args[1]
47344 i := v_0.Args[0]
47345 if i.Op != OpConst16 {
47346 break
47347 }
47348 t := i.Type
47349 if !(z.Op != OpConst16 && x.Op != OpConst16) {
47350 break
47351 }
47352 v.reset(OpXor16)
47353 v.AddArg(i)
47354 v0 := b.NewValue0(v.Pos, OpXor16, t)
47355 v0.AddArg(z)
47356 v0.AddArg(x)
47357 v.AddArg(v0)
47358 return true
47359 }
47360 return false
47361 }
47362 func rewriteValuegeneric_OpXor16_10(v *Value) bool {
47363 b := v.Block
47364
47365
47366
47367 for {
47368 x := v.Args[1]
47369 v_0 := v.Args[0]
47370 if v_0.Op != OpXor16 {
47371 break
47372 }
47373 _ = v_0.Args[1]
47374 z := v_0.Args[0]
47375 i := v_0.Args[1]
47376 if i.Op != OpConst16 {
47377 break
47378 }
47379 t := i.Type
47380 if !(z.Op != OpConst16 && x.Op != OpConst16) {
47381 break
47382 }
47383 v.reset(OpXor16)
47384 v.AddArg(i)
47385 v0 := b.NewValue0(v.Pos, OpXor16, t)
47386 v0.AddArg(z)
47387 v0.AddArg(x)
47388 v.AddArg(v0)
47389 return true
47390 }
47391
47392
47393
47394 for {
47395 _ = v.Args[1]
47396 x := v.Args[0]
47397 v_1 := v.Args[1]
47398 if v_1.Op != OpXor16 {
47399 break
47400 }
47401 z := v_1.Args[1]
47402 i := v_1.Args[0]
47403 if i.Op != OpConst16 {
47404 break
47405 }
47406 t := i.Type
47407 if !(z.Op != OpConst16 && x.Op != OpConst16) {
47408 break
47409 }
47410 v.reset(OpXor16)
47411 v.AddArg(i)
47412 v0 := b.NewValue0(v.Pos, OpXor16, t)
47413 v0.AddArg(z)
47414 v0.AddArg(x)
47415 v.AddArg(v0)
47416 return true
47417 }
47418
47419
47420
47421 for {
47422 _ = v.Args[1]
47423 x := v.Args[0]
47424 v_1 := v.Args[1]
47425 if v_1.Op != OpXor16 {
47426 break
47427 }
47428 _ = v_1.Args[1]
47429 z := v_1.Args[0]
47430 i := v_1.Args[1]
47431 if i.Op != OpConst16 {
47432 break
47433 }
47434 t := i.Type
47435 if !(z.Op != OpConst16 && x.Op != OpConst16) {
47436 break
47437 }
47438 v.reset(OpXor16)
47439 v.AddArg(i)
47440 v0 := b.NewValue0(v.Pos, OpXor16, t)
47441 v0.AddArg(z)
47442 v0.AddArg(x)
47443 v.AddArg(v0)
47444 return true
47445 }
47446
47447
47448
47449 for {
47450 _ = v.Args[1]
47451 v_0 := v.Args[0]
47452 if v_0.Op != OpConst16 {
47453 break
47454 }
47455 t := v_0.Type
47456 c := v_0.AuxInt
47457 v_1 := v.Args[1]
47458 if v_1.Op != OpXor16 {
47459 break
47460 }
47461 x := v_1.Args[1]
47462 v_1_0 := v_1.Args[0]
47463 if v_1_0.Op != OpConst16 {
47464 break
47465 }
47466 if v_1_0.Type != t {
47467 break
47468 }
47469 d := v_1_0.AuxInt
47470 v.reset(OpXor16)
47471 v0 := b.NewValue0(v.Pos, OpConst16, t)
47472 v0.AuxInt = int64(int16(c ^ d))
47473 v.AddArg(v0)
47474 v.AddArg(x)
47475 return true
47476 }
47477
47478
47479
47480 for {
47481 _ = v.Args[1]
47482 v_0 := v.Args[0]
47483 if v_0.Op != OpConst16 {
47484 break
47485 }
47486 t := v_0.Type
47487 c := v_0.AuxInt
47488 v_1 := v.Args[1]
47489 if v_1.Op != OpXor16 {
47490 break
47491 }
47492 _ = v_1.Args[1]
47493 x := v_1.Args[0]
47494 v_1_1 := v_1.Args[1]
47495 if v_1_1.Op != OpConst16 {
47496 break
47497 }
47498 if v_1_1.Type != t {
47499 break
47500 }
47501 d := v_1_1.AuxInt
47502 v.reset(OpXor16)
47503 v0 := b.NewValue0(v.Pos, OpConst16, t)
47504 v0.AuxInt = int64(int16(c ^ d))
47505 v.AddArg(v0)
47506 v.AddArg(x)
47507 return true
47508 }
47509
47510
47511
47512 for {
47513 _ = v.Args[1]
47514 v_0 := v.Args[0]
47515 if v_0.Op != OpXor16 {
47516 break
47517 }
47518 x := v_0.Args[1]
47519 v_0_0 := v_0.Args[0]
47520 if v_0_0.Op != OpConst16 {
47521 break
47522 }
47523 t := v_0_0.Type
47524 d := v_0_0.AuxInt
47525 v_1 := v.Args[1]
47526 if v_1.Op != OpConst16 {
47527 break
47528 }
47529 if v_1.Type != t {
47530 break
47531 }
47532 c := v_1.AuxInt
47533 v.reset(OpXor16)
47534 v0 := b.NewValue0(v.Pos, OpConst16, t)
47535 v0.AuxInt = int64(int16(c ^ d))
47536 v.AddArg(v0)
47537 v.AddArg(x)
47538 return true
47539 }
47540
47541
47542
47543 for {
47544 _ = v.Args[1]
47545 v_0 := v.Args[0]
47546 if v_0.Op != OpXor16 {
47547 break
47548 }
47549 _ = v_0.Args[1]
47550 x := v_0.Args[0]
47551 v_0_1 := v_0.Args[1]
47552 if v_0_1.Op != OpConst16 {
47553 break
47554 }
47555 t := v_0_1.Type
47556 d := v_0_1.AuxInt
47557 v_1 := v.Args[1]
47558 if v_1.Op != OpConst16 {
47559 break
47560 }
47561 if v_1.Type != t {
47562 break
47563 }
47564 c := v_1.AuxInt
47565 v.reset(OpXor16)
47566 v0 := b.NewValue0(v.Pos, OpConst16, t)
47567 v0.AuxInt = int64(int16(c ^ d))
47568 v.AddArg(v0)
47569 v.AddArg(x)
47570 return true
47571 }
47572 return false
47573 }
47574 func rewriteValuegeneric_OpXor32_0(v *Value) bool {
47575 b := v.Block
47576
47577
47578
47579 for {
47580 _ = v.Args[1]
47581 v_0 := v.Args[0]
47582 if v_0.Op != OpConst32 {
47583 break
47584 }
47585 c := v_0.AuxInt
47586 v_1 := v.Args[1]
47587 if v_1.Op != OpConst32 {
47588 break
47589 }
47590 d := v_1.AuxInt
47591 v.reset(OpConst32)
47592 v.AuxInt = int64(int32(c ^ d))
47593 return true
47594 }
47595
47596
47597
47598 for {
47599 _ = v.Args[1]
47600 v_0 := v.Args[0]
47601 if v_0.Op != OpConst32 {
47602 break
47603 }
47604 d := v_0.AuxInt
47605 v_1 := v.Args[1]
47606 if v_1.Op != OpConst32 {
47607 break
47608 }
47609 c := v_1.AuxInt
47610 v.reset(OpConst32)
47611 v.AuxInt = int64(int32(c ^ d))
47612 return true
47613 }
47614
47615
47616
47617 for {
47618 x := v.Args[1]
47619 if x != v.Args[0] {
47620 break
47621 }
47622 v.reset(OpConst32)
47623 v.AuxInt = 0
47624 return true
47625 }
47626
47627
47628
47629 for {
47630 x := v.Args[1]
47631 v_0 := v.Args[0]
47632 if v_0.Op != OpConst32 {
47633 break
47634 }
47635 if v_0.AuxInt != 0 {
47636 break
47637 }
47638 v.reset(OpCopy)
47639 v.Type = x.Type
47640 v.AddArg(x)
47641 return true
47642 }
47643
47644
47645
47646 for {
47647 _ = v.Args[1]
47648 x := v.Args[0]
47649 v_1 := v.Args[1]
47650 if v_1.Op != OpConst32 {
47651 break
47652 }
47653 if v_1.AuxInt != 0 {
47654 break
47655 }
47656 v.reset(OpCopy)
47657 v.Type = x.Type
47658 v.AddArg(x)
47659 return true
47660 }
47661
47662
47663
47664 for {
47665 _ = v.Args[1]
47666 x := v.Args[0]
47667 v_1 := v.Args[1]
47668 if v_1.Op != OpXor32 {
47669 break
47670 }
47671 y := v_1.Args[1]
47672 if x != v_1.Args[0] {
47673 break
47674 }
47675 v.reset(OpCopy)
47676 v.Type = y.Type
47677 v.AddArg(y)
47678 return true
47679 }
47680
47681
47682
47683 for {
47684 _ = v.Args[1]
47685 x := v.Args[0]
47686 v_1 := v.Args[1]
47687 if v_1.Op != OpXor32 {
47688 break
47689 }
47690 _ = v_1.Args[1]
47691 y := v_1.Args[0]
47692 if x != v_1.Args[1] {
47693 break
47694 }
47695 v.reset(OpCopy)
47696 v.Type = y.Type
47697 v.AddArg(y)
47698 return true
47699 }
47700
47701
47702
47703 for {
47704 x := v.Args[1]
47705 v_0 := v.Args[0]
47706 if v_0.Op != OpXor32 {
47707 break
47708 }
47709 y := v_0.Args[1]
47710 if x != v_0.Args[0] {
47711 break
47712 }
47713 v.reset(OpCopy)
47714 v.Type = y.Type
47715 v.AddArg(y)
47716 return true
47717 }
47718
47719
47720
47721 for {
47722 x := v.Args[1]
47723 v_0 := v.Args[0]
47724 if v_0.Op != OpXor32 {
47725 break
47726 }
47727 _ = v_0.Args[1]
47728 y := v_0.Args[0]
47729 if x != v_0.Args[1] {
47730 break
47731 }
47732 v.reset(OpCopy)
47733 v.Type = y.Type
47734 v.AddArg(y)
47735 return true
47736 }
47737
47738
47739
47740 for {
47741 x := v.Args[1]
47742 v_0 := v.Args[0]
47743 if v_0.Op != OpXor32 {
47744 break
47745 }
47746 z := v_0.Args[1]
47747 i := v_0.Args[0]
47748 if i.Op != OpConst32 {
47749 break
47750 }
47751 t := i.Type
47752 if !(z.Op != OpConst32 && x.Op != OpConst32) {
47753 break
47754 }
47755 v.reset(OpXor32)
47756 v.AddArg(i)
47757 v0 := b.NewValue0(v.Pos, OpXor32, t)
47758 v0.AddArg(z)
47759 v0.AddArg(x)
47760 v.AddArg(v0)
47761 return true
47762 }
47763 return false
47764 }
47765 func rewriteValuegeneric_OpXor32_10(v *Value) bool {
47766 b := v.Block
47767
47768
47769
47770 for {
47771 x := v.Args[1]
47772 v_0 := v.Args[0]
47773 if v_0.Op != OpXor32 {
47774 break
47775 }
47776 _ = v_0.Args[1]
47777 z := v_0.Args[0]
47778 i := v_0.Args[1]
47779 if i.Op != OpConst32 {
47780 break
47781 }
47782 t := i.Type
47783 if !(z.Op != OpConst32 && x.Op != OpConst32) {
47784 break
47785 }
47786 v.reset(OpXor32)
47787 v.AddArg(i)
47788 v0 := b.NewValue0(v.Pos, OpXor32, t)
47789 v0.AddArg(z)
47790 v0.AddArg(x)
47791 v.AddArg(v0)
47792 return true
47793 }
47794
47795
47796
47797 for {
47798 _ = v.Args[1]
47799 x := v.Args[0]
47800 v_1 := v.Args[1]
47801 if v_1.Op != OpXor32 {
47802 break
47803 }
47804 z := v_1.Args[1]
47805 i := v_1.Args[0]
47806 if i.Op != OpConst32 {
47807 break
47808 }
47809 t := i.Type
47810 if !(z.Op != OpConst32 && x.Op != OpConst32) {
47811 break
47812 }
47813 v.reset(OpXor32)
47814 v.AddArg(i)
47815 v0 := b.NewValue0(v.Pos, OpXor32, t)
47816 v0.AddArg(z)
47817 v0.AddArg(x)
47818 v.AddArg(v0)
47819 return true
47820 }
47821
47822
47823
47824 for {
47825 _ = v.Args[1]
47826 x := v.Args[0]
47827 v_1 := v.Args[1]
47828 if v_1.Op != OpXor32 {
47829 break
47830 }
47831 _ = v_1.Args[1]
47832 z := v_1.Args[0]
47833 i := v_1.Args[1]
47834 if i.Op != OpConst32 {
47835 break
47836 }
47837 t := i.Type
47838 if !(z.Op != OpConst32 && x.Op != OpConst32) {
47839 break
47840 }
47841 v.reset(OpXor32)
47842 v.AddArg(i)
47843 v0 := b.NewValue0(v.Pos, OpXor32, t)
47844 v0.AddArg(z)
47845 v0.AddArg(x)
47846 v.AddArg(v0)
47847 return true
47848 }
47849
47850
47851
47852 for {
47853 _ = v.Args[1]
47854 v_0 := v.Args[0]
47855 if v_0.Op != OpConst32 {
47856 break
47857 }
47858 t := v_0.Type
47859 c := v_0.AuxInt
47860 v_1 := v.Args[1]
47861 if v_1.Op != OpXor32 {
47862 break
47863 }
47864 x := v_1.Args[1]
47865 v_1_0 := v_1.Args[0]
47866 if v_1_0.Op != OpConst32 {
47867 break
47868 }
47869 if v_1_0.Type != t {
47870 break
47871 }
47872 d := v_1_0.AuxInt
47873 v.reset(OpXor32)
47874 v0 := b.NewValue0(v.Pos, OpConst32, t)
47875 v0.AuxInt = int64(int32(c ^ d))
47876 v.AddArg(v0)
47877 v.AddArg(x)
47878 return true
47879 }
47880
47881
47882
47883 for {
47884 _ = v.Args[1]
47885 v_0 := v.Args[0]
47886 if v_0.Op != OpConst32 {
47887 break
47888 }
47889 t := v_0.Type
47890 c := v_0.AuxInt
47891 v_1 := v.Args[1]
47892 if v_1.Op != OpXor32 {
47893 break
47894 }
47895 _ = v_1.Args[1]
47896 x := v_1.Args[0]
47897 v_1_1 := v_1.Args[1]
47898 if v_1_1.Op != OpConst32 {
47899 break
47900 }
47901 if v_1_1.Type != t {
47902 break
47903 }
47904 d := v_1_1.AuxInt
47905 v.reset(OpXor32)
47906 v0 := b.NewValue0(v.Pos, OpConst32, t)
47907 v0.AuxInt = int64(int32(c ^ d))
47908 v.AddArg(v0)
47909 v.AddArg(x)
47910 return true
47911 }
47912
47913
47914
47915 for {
47916 _ = v.Args[1]
47917 v_0 := v.Args[0]
47918 if v_0.Op != OpXor32 {
47919 break
47920 }
47921 x := v_0.Args[1]
47922 v_0_0 := v_0.Args[0]
47923 if v_0_0.Op != OpConst32 {
47924 break
47925 }
47926 t := v_0_0.Type
47927 d := v_0_0.AuxInt
47928 v_1 := v.Args[1]
47929 if v_1.Op != OpConst32 {
47930 break
47931 }
47932 if v_1.Type != t {
47933 break
47934 }
47935 c := v_1.AuxInt
47936 v.reset(OpXor32)
47937 v0 := b.NewValue0(v.Pos, OpConst32, t)
47938 v0.AuxInt = int64(int32(c ^ d))
47939 v.AddArg(v0)
47940 v.AddArg(x)
47941 return true
47942 }
47943
47944
47945
47946 for {
47947 _ = v.Args[1]
47948 v_0 := v.Args[0]
47949 if v_0.Op != OpXor32 {
47950 break
47951 }
47952 _ = v_0.Args[1]
47953 x := v_0.Args[0]
47954 v_0_1 := v_0.Args[1]
47955 if v_0_1.Op != OpConst32 {
47956 break
47957 }
47958 t := v_0_1.Type
47959 d := v_0_1.AuxInt
47960 v_1 := v.Args[1]
47961 if v_1.Op != OpConst32 {
47962 break
47963 }
47964 if v_1.Type != t {
47965 break
47966 }
47967 c := v_1.AuxInt
47968 v.reset(OpXor32)
47969 v0 := b.NewValue0(v.Pos, OpConst32, t)
47970 v0.AuxInt = int64(int32(c ^ d))
47971 v.AddArg(v0)
47972 v.AddArg(x)
47973 return true
47974 }
47975 return false
47976 }
47977 func rewriteValuegeneric_OpXor64_0(v *Value) bool {
47978 b := v.Block
47979
47980
47981
47982 for {
47983 _ = v.Args[1]
47984 v_0 := v.Args[0]
47985 if v_0.Op != OpConst64 {
47986 break
47987 }
47988 c := v_0.AuxInt
47989 v_1 := v.Args[1]
47990 if v_1.Op != OpConst64 {
47991 break
47992 }
47993 d := v_1.AuxInt
47994 v.reset(OpConst64)
47995 v.AuxInt = c ^ d
47996 return true
47997 }
47998
47999
48000
48001 for {
48002 _ = v.Args[1]
48003 v_0 := v.Args[0]
48004 if v_0.Op != OpConst64 {
48005 break
48006 }
48007 d := v_0.AuxInt
48008 v_1 := v.Args[1]
48009 if v_1.Op != OpConst64 {
48010 break
48011 }
48012 c := v_1.AuxInt
48013 v.reset(OpConst64)
48014 v.AuxInt = c ^ d
48015 return true
48016 }
48017
48018
48019
48020 for {
48021 x := v.Args[1]
48022 if x != v.Args[0] {
48023 break
48024 }
48025 v.reset(OpConst64)
48026 v.AuxInt = 0
48027 return true
48028 }
48029
48030
48031
48032 for {
48033 x := v.Args[1]
48034 v_0 := v.Args[0]
48035 if v_0.Op != OpConst64 {
48036 break
48037 }
48038 if v_0.AuxInt != 0 {
48039 break
48040 }
48041 v.reset(OpCopy)
48042 v.Type = x.Type
48043 v.AddArg(x)
48044 return true
48045 }
48046
48047
48048
48049 for {
48050 _ = v.Args[1]
48051 x := v.Args[0]
48052 v_1 := v.Args[1]
48053 if v_1.Op != OpConst64 {
48054 break
48055 }
48056 if v_1.AuxInt != 0 {
48057 break
48058 }
48059 v.reset(OpCopy)
48060 v.Type = x.Type
48061 v.AddArg(x)
48062 return true
48063 }
48064
48065
48066
48067 for {
48068 _ = v.Args[1]
48069 x := v.Args[0]
48070 v_1 := v.Args[1]
48071 if v_1.Op != OpXor64 {
48072 break
48073 }
48074 y := v_1.Args[1]
48075 if x != v_1.Args[0] {
48076 break
48077 }
48078 v.reset(OpCopy)
48079 v.Type = y.Type
48080 v.AddArg(y)
48081 return true
48082 }
48083
48084
48085
48086 for {
48087 _ = v.Args[1]
48088 x := v.Args[0]
48089 v_1 := v.Args[1]
48090 if v_1.Op != OpXor64 {
48091 break
48092 }
48093 _ = v_1.Args[1]
48094 y := v_1.Args[0]
48095 if x != v_1.Args[1] {
48096 break
48097 }
48098 v.reset(OpCopy)
48099 v.Type = y.Type
48100 v.AddArg(y)
48101 return true
48102 }
48103
48104
48105
48106 for {
48107 x := v.Args[1]
48108 v_0 := v.Args[0]
48109 if v_0.Op != OpXor64 {
48110 break
48111 }
48112 y := v_0.Args[1]
48113 if x != v_0.Args[0] {
48114 break
48115 }
48116 v.reset(OpCopy)
48117 v.Type = y.Type
48118 v.AddArg(y)
48119 return true
48120 }
48121
48122
48123
48124 for {
48125 x := v.Args[1]
48126 v_0 := v.Args[0]
48127 if v_0.Op != OpXor64 {
48128 break
48129 }
48130 _ = v_0.Args[1]
48131 y := v_0.Args[0]
48132 if x != v_0.Args[1] {
48133 break
48134 }
48135 v.reset(OpCopy)
48136 v.Type = y.Type
48137 v.AddArg(y)
48138 return true
48139 }
48140
48141
48142
48143 for {
48144 x := v.Args[1]
48145 v_0 := v.Args[0]
48146 if v_0.Op != OpXor64 {
48147 break
48148 }
48149 z := v_0.Args[1]
48150 i := v_0.Args[0]
48151 if i.Op != OpConst64 {
48152 break
48153 }
48154 t := i.Type
48155 if !(z.Op != OpConst64 && x.Op != OpConst64) {
48156 break
48157 }
48158 v.reset(OpXor64)
48159 v.AddArg(i)
48160 v0 := b.NewValue0(v.Pos, OpXor64, t)
48161 v0.AddArg(z)
48162 v0.AddArg(x)
48163 v.AddArg(v0)
48164 return true
48165 }
48166 return false
48167 }
48168 func rewriteValuegeneric_OpXor64_10(v *Value) bool {
48169 b := v.Block
48170
48171
48172
48173 for {
48174 x := v.Args[1]
48175 v_0 := v.Args[0]
48176 if v_0.Op != OpXor64 {
48177 break
48178 }
48179 _ = v_0.Args[1]
48180 z := v_0.Args[0]
48181 i := v_0.Args[1]
48182 if i.Op != OpConst64 {
48183 break
48184 }
48185 t := i.Type
48186 if !(z.Op != OpConst64 && x.Op != OpConst64) {
48187 break
48188 }
48189 v.reset(OpXor64)
48190 v.AddArg(i)
48191 v0 := b.NewValue0(v.Pos, OpXor64, t)
48192 v0.AddArg(z)
48193 v0.AddArg(x)
48194 v.AddArg(v0)
48195 return true
48196 }
48197
48198
48199
48200 for {
48201 _ = v.Args[1]
48202 x := v.Args[0]
48203 v_1 := v.Args[1]
48204 if v_1.Op != OpXor64 {
48205 break
48206 }
48207 z := v_1.Args[1]
48208 i := v_1.Args[0]
48209 if i.Op != OpConst64 {
48210 break
48211 }
48212 t := i.Type
48213 if !(z.Op != OpConst64 && x.Op != OpConst64) {
48214 break
48215 }
48216 v.reset(OpXor64)
48217 v.AddArg(i)
48218 v0 := b.NewValue0(v.Pos, OpXor64, t)
48219 v0.AddArg(z)
48220 v0.AddArg(x)
48221 v.AddArg(v0)
48222 return true
48223 }
48224
48225
48226
48227 for {
48228 _ = v.Args[1]
48229 x := v.Args[0]
48230 v_1 := v.Args[1]
48231 if v_1.Op != OpXor64 {
48232 break
48233 }
48234 _ = v_1.Args[1]
48235 z := v_1.Args[0]
48236 i := v_1.Args[1]
48237 if i.Op != OpConst64 {
48238 break
48239 }
48240 t := i.Type
48241 if !(z.Op != OpConst64 && x.Op != OpConst64) {
48242 break
48243 }
48244 v.reset(OpXor64)
48245 v.AddArg(i)
48246 v0 := b.NewValue0(v.Pos, OpXor64, t)
48247 v0.AddArg(z)
48248 v0.AddArg(x)
48249 v.AddArg(v0)
48250 return true
48251 }
48252
48253
48254
48255 for {
48256 _ = v.Args[1]
48257 v_0 := v.Args[0]
48258 if v_0.Op != OpConst64 {
48259 break
48260 }
48261 t := v_0.Type
48262 c := v_0.AuxInt
48263 v_1 := v.Args[1]
48264 if v_1.Op != OpXor64 {
48265 break
48266 }
48267 x := v_1.Args[1]
48268 v_1_0 := v_1.Args[0]
48269 if v_1_0.Op != OpConst64 {
48270 break
48271 }
48272 if v_1_0.Type != t {
48273 break
48274 }
48275 d := v_1_0.AuxInt
48276 v.reset(OpXor64)
48277 v0 := b.NewValue0(v.Pos, OpConst64, t)
48278 v0.AuxInt = c ^ d
48279 v.AddArg(v0)
48280 v.AddArg(x)
48281 return true
48282 }
48283
48284
48285
48286 for {
48287 _ = v.Args[1]
48288 v_0 := v.Args[0]
48289 if v_0.Op != OpConst64 {
48290 break
48291 }
48292 t := v_0.Type
48293 c := v_0.AuxInt
48294 v_1 := v.Args[1]
48295 if v_1.Op != OpXor64 {
48296 break
48297 }
48298 _ = v_1.Args[1]
48299 x := v_1.Args[0]
48300 v_1_1 := v_1.Args[1]
48301 if v_1_1.Op != OpConst64 {
48302 break
48303 }
48304 if v_1_1.Type != t {
48305 break
48306 }
48307 d := v_1_1.AuxInt
48308 v.reset(OpXor64)
48309 v0 := b.NewValue0(v.Pos, OpConst64, t)
48310 v0.AuxInt = c ^ d
48311 v.AddArg(v0)
48312 v.AddArg(x)
48313 return true
48314 }
48315
48316
48317
48318 for {
48319 _ = v.Args[1]
48320 v_0 := v.Args[0]
48321 if v_0.Op != OpXor64 {
48322 break
48323 }
48324 x := v_0.Args[1]
48325 v_0_0 := v_0.Args[0]
48326 if v_0_0.Op != OpConst64 {
48327 break
48328 }
48329 t := v_0_0.Type
48330 d := v_0_0.AuxInt
48331 v_1 := v.Args[1]
48332 if v_1.Op != OpConst64 {
48333 break
48334 }
48335 if v_1.Type != t {
48336 break
48337 }
48338 c := v_1.AuxInt
48339 v.reset(OpXor64)
48340 v0 := b.NewValue0(v.Pos, OpConst64, t)
48341 v0.AuxInt = c ^ d
48342 v.AddArg(v0)
48343 v.AddArg(x)
48344 return true
48345 }
48346
48347
48348
48349 for {
48350 _ = v.Args[1]
48351 v_0 := v.Args[0]
48352 if v_0.Op != OpXor64 {
48353 break
48354 }
48355 _ = v_0.Args[1]
48356 x := v_0.Args[0]
48357 v_0_1 := v_0.Args[1]
48358 if v_0_1.Op != OpConst64 {
48359 break
48360 }
48361 t := v_0_1.Type
48362 d := v_0_1.AuxInt
48363 v_1 := v.Args[1]
48364 if v_1.Op != OpConst64 {
48365 break
48366 }
48367 if v_1.Type != t {
48368 break
48369 }
48370 c := v_1.AuxInt
48371 v.reset(OpXor64)
48372 v0 := b.NewValue0(v.Pos, OpConst64, t)
48373 v0.AuxInt = c ^ d
48374 v.AddArg(v0)
48375 v.AddArg(x)
48376 return true
48377 }
48378 return false
48379 }
48380 func rewriteValuegeneric_OpXor8_0(v *Value) bool {
48381 b := v.Block
48382
48383
48384
48385 for {
48386 _ = v.Args[1]
48387 v_0 := v.Args[0]
48388 if v_0.Op != OpConst8 {
48389 break
48390 }
48391 c := v_0.AuxInt
48392 v_1 := v.Args[1]
48393 if v_1.Op != OpConst8 {
48394 break
48395 }
48396 d := v_1.AuxInt
48397 v.reset(OpConst8)
48398 v.AuxInt = int64(int8(c ^ d))
48399 return true
48400 }
48401
48402
48403
48404 for {
48405 _ = v.Args[1]
48406 v_0 := v.Args[0]
48407 if v_0.Op != OpConst8 {
48408 break
48409 }
48410 d := v_0.AuxInt
48411 v_1 := v.Args[1]
48412 if v_1.Op != OpConst8 {
48413 break
48414 }
48415 c := v_1.AuxInt
48416 v.reset(OpConst8)
48417 v.AuxInt = int64(int8(c ^ d))
48418 return true
48419 }
48420
48421
48422
48423 for {
48424 x := v.Args[1]
48425 if x != v.Args[0] {
48426 break
48427 }
48428 v.reset(OpConst8)
48429 v.AuxInt = 0
48430 return true
48431 }
48432
48433
48434
48435 for {
48436 x := v.Args[1]
48437 v_0 := v.Args[0]
48438 if v_0.Op != OpConst8 {
48439 break
48440 }
48441 if v_0.AuxInt != 0 {
48442 break
48443 }
48444 v.reset(OpCopy)
48445 v.Type = x.Type
48446 v.AddArg(x)
48447 return true
48448 }
48449
48450
48451
48452 for {
48453 _ = v.Args[1]
48454 x := v.Args[0]
48455 v_1 := v.Args[1]
48456 if v_1.Op != OpConst8 {
48457 break
48458 }
48459 if v_1.AuxInt != 0 {
48460 break
48461 }
48462 v.reset(OpCopy)
48463 v.Type = x.Type
48464 v.AddArg(x)
48465 return true
48466 }
48467
48468
48469
48470 for {
48471 _ = v.Args[1]
48472 x := v.Args[0]
48473 v_1 := v.Args[1]
48474 if v_1.Op != OpXor8 {
48475 break
48476 }
48477 y := v_1.Args[1]
48478 if x != v_1.Args[0] {
48479 break
48480 }
48481 v.reset(OpCopy)
48482 v.Type = y.Type
48483 v.AddArg(y)
48484 return true
48485 }
48486
48487
48488
48489 for {
48490 _ = v.Args[1]
48491 x := v.Args[0]
48492 v_1 := v.Args[1]
48493 if v_1.Op != OpXor8 {
48494 break
48495 }
48496 _ = v_1.Args[1]
48497 y := v_1.Args[0]
48498 if x != v_1.Args[1] {
48499 break
48500 }
48501 v.reset(OpCopy)
48502 v.Type = y.Type
48503 v.AddArg(y)
48504 return true
48505 }
48506
48507
48508
48509 for {
48510 x := v.Args[1]
48511 v_0 := v.Args[0]
48512 if v_0.Op != OpXor8 {
48513 break
48514 }
48515 y := v_0.Args[1]
48516 if x != v_0.Args[0] {
48517 break
48518 }
48519 v.reset(OpCopy)
48520 v.Type = y.Type
48521 v.AddArg(y)
48522 return true
48523 }
48524
48525
48526
48527 for {
48528 x := v.Args[1]
48529 v_0 := v.Args[0]
48530 if v_0.Op != OpXor8 {
48531 break
48532 }
48533 _ = v_0.Args[1]
48534 y := v_0.Args[0]
48535 if x != v_0.Args[1] {
48536 break
48537 }
48538 v.reset(OpCopy)
48539 v.Type = y.Type
48540 v.AddArg(y)
48541 return true
48542 }
48543
48544
48545
48546 for {
48547 x := v.Args[1]
48548 v_0 := v.Args[0]
48549 if v_0.Op != OpXor8 {
48550 break
48551 }
48552 z := v_0.Args[1]
48553 i := v_0.Args[0]
48554 if i.Op != OpConst8 {
48555 break
48556 }
48557 t := i.Type
48558 if !(z.Op != OpConst8 && x.Op != OpConst8) {
48559 break
48560 }
48561 v.reset(OpXor8)
48562 v.AddArg(i)
48563 v0 := b.NewValue0(v.Pos, OpXor8, t)
48564 v0.AddArg(z)
48565 v0.AddArg(x)
48566 v.AddArg(v0)
48567 return true
48568 }
48569 return false
48570 }
48571 func rewriteValuegeneric_OpXor8_10(v *Value) bool {
48572 b := v.Block
48573
48574
48575
48576 for {
48577 x := v.Args[1]
48578 v_0 := v.Args[0]
48579 if v_0.Op != OpXor8 {
48580 break
48581 }
48582 _ = v_0.Args[1]
48583 z := v_0.Args[0]
48584 i := v_0.Args[1]
48585 if i.Op != OpConst8 {
48586 break
48587 }
48588 t := i.Type
48589 if !(z.Op != OpConst8 && x.Op != OpConst8) {
48590 break
48591 }
48592 v.reset(OpXor8)
48593 v.AddArg(i)
48594 v0 := b.NewValue0(v.Pos, OpXor8, t)
48595 v0.AddArg(z)
48596 v0.AddArg(x)
48597 v.AddArg(v0)
48598 return true
48599 }
48600
48601
48602
48603 for {
48604 _ = v.Args[1]
48605 x := v.Args[0]
48606 v_1 := v.Args[1]
48607 if v_1.Op != OpXor8 {
48608 break
48609 }
48610 z := v_1.Args[1]
48611 i := v_1.Args[0]
48612 if i.Op != OpConst8 {
48613 break
48614 }
48615 t := i.Type
48616 if !(z.Op != OpConst8 && x.Op != OpConst8) {
48617 break
48618 }
48619 v.reset(OpXor8)
48620 v.AddArg(i)
48621 v0 := b.NewValue0(v.Pos, OpXor8, t)
48622 v0.AddArg(z)
48623 v0.AddArg(x)
48624 v.AddArg(v0)
48625 return true
48626 }
48627
48628
48629
48630 for {
48631 _ = v.Args[1]
48632 x := v.Args[0]
48633 v_1 := v.Args[1]
48634 if v_1.Op != OpXor8 {
48635 break
48636 }
48637 _ = v_1.Args[1]
48638 z := v_1.Args[0]
48639 i := v_1.Args[1]
48640 if i.Op != OpConst8 {
48641 break
48642 }
48643 t := i.Type
48644 if !(z.Op != OpConst8 && x.Op != OpConst8) {
48645 break
48646 }
48647 v.reset(OpXor8)
48648 v.AddArg(i)
48649 v0 := b.NewValue0(v.Pos, OpXor8, t)
48650 v0.AddArg(z)
48651 v0.AddArg(x)
48652 v.AddArg(v0)
48653 return true
48654 }
48655
48656
48657
48658 for {
48659 _ = v.Args[1]
48660 v_0 := v.Args[0]
48661 if v_0.Op != OpConst8 {
48662 break
48663 }
48664 t := v_0.Type
48665 c := v_0.AuxInt
48666 v_1 := v.Args[1]
48667 if v_1.Op != OpXor8 {
48668 break
48669 }
48670 x := v_1.Args[1]
48671 v_1_0 := v_1.Args[0]
48672 if v_1_0.Op != OpConst8 {
48673 break
48674 }
48675 if v_1_0.Type != t {
48676 break
48677 }
48678 d := v_1_0.AuxInt
48679 v.reset(OpXor8)
48680 v0 := b.NewValue0(v.Pos, OpConst8, t)
48681 v0.AuxInt = int64(int8(c ^ d))
48682 v.AddArg(v0)
48683 v.AddArg(x)
48684 return true
48685 }
48686
48687
48688
48689 for {
48690 _ = v.Args[1]
48691 v_0 := v.Args[0]
48692 if v_0.Op != OpConst8 {
48693 break
48694 }
48695 t := v_0.Type
48696 c := v_0.AuxInt
48697 v_1 := v.Args[1]
48698 if v_1.Op != OpXor8 {
48699 break
48700 }
48701 _ = v_1.Args[1]
48702 x := v_1.Args[0]
48703 v_1_1 := v_1.Args[1]
48704 if v_1_1.Op != OpConst8 {
48705 break
48706 }
48707 if v_1_1.Type != t {
48708 break
48709 }
48710 d := v_1_1.AuxInt
48711 v.reset(OpXor8)
48712 v0 := b.NewValue0(v.Pos, OpConst8, t)
48713 v0.AuxInt = int64(int8(c ^ d))
48714 v.AddArg(v0)
48715 v.AddArg(x)
48716 return true
48717 }
48718
48719
48720
48721 for {
48722 _ = v.Args[1]
48723 v_0 := v.Args[0]
48724 if v_0.Op != OpXor8 {
48725 break
48726 }
48727 x := v_0.Args[1]
48728 v_0_0 := v_0.Args[0]
48729 if v_0_0.Op != OpConst8 {
48730 break
48731 }
48732 t := v_0_0.Type
48733 d := v_0_0.AuxInt
48734 v_1 := v.Args[1]
48735 if v_1.Op != OpConst8 {
48736 break
48737 }
48738 if v_1.Type != t {
48739 break
48740 }
48741 c := v_1.AuxInt
48742 v.reset(OpXor8)
48743 v0 := b.NewValue0(v.Pos, OpConst8, t)
48744 v0.AuxInt = int64(int8(c ^ d))
48745 v.AddArg(v0)
48746 v.AddArg(x)
48747 return true
48748 }
48749
48750
48751
48752 for {
48753 _ = v.Args[1]
48754 v_0 := v.Args[0]
48755 if v_0.Op != OpXor8 {
48756 break
48757 }
48758 _ = v_0.Args[1]
48759 x := v_0.Args[0]
48760 v_0_1 := v_0.Args[1]
48761 if v_0_1.Op != OpConst8 {
48762 break
48763 }
48764 t := v_0_1.Type
48765 d := v_0_1.AuxInt
48766 v_1 := v.Args[1]
48767 if v_1.Op != OpConst8 {
48768 break
48769 }
48770 if v_1.Type != t {
48771 break
48772 }
48773 c := v_1.AuxInt
48774 v.reset(OpXor8)
48775 v0 := b.NewValue0(v.Pos, OpConst8, t)
48776 v0.AuxInt = int64(int8(c ^ d))
48777 v.AddArg(v0)
48778 v.AddArg(x)
48779 return true
48780 }
48781 return false
48782 }
48783 func rewriteValuegeneric_OpZero_0(v *Value) bool {
48784 b := v.Block
48785 config := b.Func.Config
48786
48787
48788
48789 for {
48790 mem := v.Args[1]
48791 v_0 := v.Args[0]
48792 if v_0.Op != OpLoad {
48793 break
48794 }
48795 _ = v_0.Args[1]
48796 v_0_0 := v_0.Args[0]
48797 if v_0_0.Op != OpOffPtr {
48798 break
48799 }
48800 c := v_0_0.AuxInt
48801 v_0_0_0 := v_0_0.Args[0]
48802 if v_0_0_0.Op != OpSP {
48803 break
48804 }
48805 if mem != v_0.Args[1] {
48806 break
48807 }
48808 if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) {
48809 break
48810 }
48811 v.reset(OpCopy)
48812 v.Type = mem.Type
48813 v.AddArg(mem)
48814 return true
48815 }
48816
48817
48818
48819 for {
48820 n := v.AuxInt
48821 t1 := v.Aux
48822 _ = v.Args[1]
48823 p1 := v.Args[0]
48824 store := v.Args[1]
48825 if store.Op != OpStore {
48826 break
48827 }
48828 t2 := store.Aux
48829 mem := store.Args[2]
48830 store_0 := store.Args[0]
48831 if store_0.Op != OpOffPtr {
48832 break
48833 }
48834 o2 := store_0.AuxInt
48835 p2 := store_0.Args[0]
48836 if !(isSamePtr(p1, p2) && store.Uses == 1 && n >= o2+sizeof(t2) && clobber(store)) {
48837 break
48838 }
48839 v.reset(OpZero)
48840 v.AuxInt = n
48841 v.Aux = t1
48842 v.AddArg(p1)
48843 v.AddArg(mem)
48844 return true
48845 }
48846
48847
48848
48849 for {
48850 n := v.AuxInt
48851 t := v.Aux
48852 _ = v.Args[1]
48853 dst1 := v.Args[0]
48854 move := v.Args[1]
48855 if move.Op != OpMove {
48856 break
48857 }
48858 if move.AuxInt != n {
48859 break
48860 }
48861 if move.Aux != t {
48862 break
48863 }
48864 mem := move.Args[2]
48865 dst2 := move.Args[0]
48866 if !(move.Uses == 1 && isSamePtr(dst1, dst2) && clobber(move)) {
48867 break
48868 }
48869 v.reset(OpZero)
48870 v.AuxInt = n
48871 v.Aux = t
48872 v.AddArg(dst1)
48873 v.AddArg(mem)
48874 return true
48875 }
48876
48877
48878
48879 for {
48880 n := v.AuxInt
48881 t := v.Aux
48882 _ = v.Args[1]
48883 dst1 := v.Args[0]
48884 vardef := v.Args[1]
48885 if vardef.Op != OpVarDef {
48886 break
48887 }
48888 x := vardef.Aux
48889 move := vardef.Args[0]
48890 if move.Op != OpMove {
48891 break
48892 }
48893 if move.AuxInt != n {
48894 break
48895 }
48896 if move.Aux != t {
48897 break
48898 }
48899 mem := move.Args[2]
48900 dst2 := move.Args[0]
48901 if !(move.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && clobber(move) && clobber(vardef)) {
48902 break
48903 }
48904 v.reset(OpZero)
48905 v.AuxInt = n
48906 v.Aux = t
48907 v.AddArg(dst1)
48908 v0 := b.NewValue0(v.Pos, OpVarDef, types.TypeMem)
48909 v0.Aux = x
48910 v0.AddArg(mem)
48911 v.AddArg(v0)
48912 return true
48913 }
48914 return false
48915 }
48916 func rewriteValuegeneric_OpZeroExt16to32_0(v *Value) bool {
48917
48918
48919
48920 for {
48921 v_0 := v.Args[0]
48922 if v_0.Op != OpConst16 {
48923 break
48924 }
48925 c := v_0.AuxInt
48926 v.reset(OpConst32)
48927 v.AuxInt = int64(uint16(c))
48928 return true
48929 }
48930
48931
48932
48933 for {
48934 v_0 := v.Args[0]
48935 if v_0.Op != OpTrunc32to16 {
48936 break
48937 }
48938 x := v_0.Args[0]
48939 if x.Op != OpRsh32Ux64 {
48940 break
48941 }
48942 _ = x.Args[1]
48943 x_1 := x.Args[1]
48944 if x_1.Op != OpConst64 {
48945 break
48946 }
48947 s := x_1.AuxInt
48948 if !(s >= 16) {
48949 break
48950 }
48951 v.reset(OpCopy)
48952 v.Type = x.Type
48953 v.AddArg(x)
48954 return true
48955 }
48956 return false
48957 }
48958 func rewriteValuegeneric_OpZeroExt16to64_0(v *Value) bool {
48959
48960
48961
48962 for {
48963 v_0 := v.Args[0]
48964 if v_0.Op != OpConst16 {
48965 break
48966 }
48967 c := v_0.AuxInt
48968 v.reset(OpConst64)
48969 v.AuxInt = int64(uint16(c))
48970 return true
48971 }
48972
48973
48974
48975 for {
48976 v_0 := v.Args[0]
48977 if v_0.Op != OpTrunc64to16 {
48978 break
48979 }
48980 x := v_0.Args[0]
48981 if x.Op != OpRsh64Ux64 {
48982 break
48983 }
48984 _ = x.Args[1]
48985 x_1 := x.Args[1]
48986 if x_1.Op != OpConst64 {
48987 break
48988 }
48989 s := x_1.AuxInt
48990 if !(s >= 48) {
48991 break
48992 }
48993 v.reset(OpCopy)
48994 v.Type = x.Type
48995 v.AddArg(x)
48996 return true
48997 }
48998 return false
48999 }
49000 func rewriteValuegeneric_OpZeroExt32to64_0(v *Value) bool {
49001
49002
49003
49004 for {
49005 v_0 := v.Args[0]
49006 if v_0.Op != OpConst32 {
49007 break
49008 }
49009 c := v_0.AuxInt
49010 v.reset(OpConst64)
49011 v.AuxInt = int64(uint32(c))
49012 return true
49013 }
49014
49015
49016
49017 for {
49018 v_0 := v.Args[0]
49019 if v_0.Op != OpTrunc64to32 {
49020 break
49021 }
49022 x := v_0.Args[0]
49023 if x.Op != OpRsh64Ux64 {
49024 break
49025 }
49026 _ = x.Args[1]
49027 x_1 := x.Args[1]
49028 if x_1.Op != OpConst64 {
49029 break
49030 }
49031 s := x_1.AuxInt
49032 if !(s >= 32) {
49033 break
49034 }
49035 v.reset(OpCopy)
49036 v.Type = x.Type
49037 v.AddArg(x)
49038 return true
49039 }
49040 return false
49041 }
49042 func rewriteValuegeneric_OpZeroExt8to16_0(v *Value) bool {
49043
49044
49045
49046 for {
49047 v_0 := v.Args[0]
49048 if v_0.Op != OpConst8 {
49049 break
49050 }
49051 c := v_0.AuxInt
49052 v.reset(OpConst16)
49053 v.AuxInt = int64(uint8(c))
49054 return true
49055 }
49056
49057
49058
49059 for {
49060 v_0 := v.Args[0]
49061 if v_0.Op != OpTrunc16to8 {
49062 break
49063 }
49064 x := v_0.Args[0]
49065 if x.Op != OpRsh16Ux64 {
49066 break
49067 }
49068 _ = x.Args[1]
49069 x_1 := x.Args[1]
49070 if x_1.Op != OpConst64 {
49071 break
49072 }
49073 s := x_1.AuxInt
49074 if !(s >= 8) {
49075 break
49076 }
49077 v.reset(OpCopy)
49078 v.Type = x.Type
49079 v.AddArg(x)
49080 return true
49081 }
49082 return false
49083 }
49084 func rewriteValuegeneric_OpZeroExt8to32_0(v *Value) bool {
49085
49086
49087
49088 for {
49089 v_0 := v.Args[0]
49090 if v_0.Op != OpConst8 {
49091 break
49092 }
49093 c := v_0.AuxInt
49094 v.reset(OpConst32)
49095 v.AuxInt = int64(uint8(c))
49096 return true
49097 }
49098
49099
49100
49101 for {
49102 v_0 := v.Args[0]
49103 if v_0.Op != OpTrunc32to8 {
49104 break
49105 }
49106 x := v_0.Args[0]
49107 if x.Op != OpRsh32Ux64 {
49108 break
49109 }
49110 _ = x.Args[1]
49111 x_1 := x.Args[1]
49112 if x_1.Op != OpConst64 {
49113 break
49114 }
49115 s := x_1.AuxInt
49116 if !(s >= 24) {
49117 break
49118 }
49119 v.reset(OpCopy)
49120 v.Type = x.Type
49121 v.AddArg(x)
49122 return true
49123 }
49124 return false
49125 }
49126 func rewriteValuegeneric_OpZeroExt8to64_0(v *Value) bool {
49127
49128
49129
49130 for {
49131 v_0 := v.Args[0]
49132 if v_0.Op != OpConst8 {
49133 break
49134 }
49135 c := v_0.AuxInt
49136 v.reset(OpConst64)
49137 v.AuxInt = int64(uint8(c))
49138 return true
49139 }
49140
49141
49142
49143 for {
49144 v_0 := v.Args[0]
49145 if v_0.Op != OpTrunc64to8 {
49146 break
49147 }
49148 x := v_0.Args[0]
49149 if x.Op != OpRsh64Ux64 {
49150 break
49151 }
49152 _ = x.Args[1]
49153 x_1 := x.Args[1]
49154 if x_1.Op != OpConst64 {
49155 break
49156 }
49157 s := x_1.AuxInt
49158 if !(s >= 56) {
49159 break
49160 }
49161 v.reset(OpCopy)
49162 v.Type = x.Type
49163 v.AddArg(x)
49164 return true
49165 }
49166 return false
49167 }
49168 func rewriteBlockgeneric(b *Block) bool {
49169 config := b.Func.Config
49170 typ := &config.Types
49171 _ = typ
49172 v := b.Control
49173 _ = v
49174 switch b.Kind {
49175 case BlockIf:
49176
49177
49178
49179 for v.Op == OpNot {
49180 cond := v.Args[0]
49181 b.Kind = BlockIf
49182 b.SetControl(cond)
49183 b.Aux = nil
49184 b.swapSuccessors()
49185 return true
49186 }
49187
49188
49189
49190 for v.Op == OpConstBool {
49191 c := v.AuxInt
49192 if !(c == 1) {
49193 break
49194 }
49195 b.Kind = BlockFirst
49196 b.SetControl(nil)
49197 b.Aux = nil
49198 return true
49199 }
49200
49201
49202
49203 for v.Op == OpConstBool {
49204 c := v.AuxInt
49205 if !(c == 0) {
49206 break
49207 }
49208 b.Kind = BlockFirst
49209 b.SetControl(nil)
49210 b.Aux = nil
49211 b.swapSuccessors()
49212 return true
49213 }
49214 }
49215 return false
49216 }
49217
View as plain text