1
2
3 package ssa
4
5 func rewriteValueLOONG64latelower(v *Value) bool {
6 switch v.Op {
7 case OpLOONG64MOVVconst:
8 return rewriteValueLOONG64latelower_OpLOONG64MOVVconst(v)
9 case OpLOONG64SLLVconst:
10 return rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v)
11 }
12 return false
13 }
14 func rewriteValueLOONG64latelower_OpLOONG64MOVVconst(v *Value) bool {
15
16
17 for {
18 if auxIntToInt64(v.AuxInt) != 0 {
19 break
20 }
21 v.reset(OpLOONG64ZERO)
22 return true
23 }
24 return false
25 }
26 func rewriteValueLOONG64latelower_OpLOONG64SLLVconst(v *Value) bool {
27 v_0 := v.Args[0]
28
29
30 for {
31 if auxIntToInt64(v.AuxInt) != 1 {
32 break
33 }
34 x := v_0
35 v.reset(OpLOONG64ADDV)
36 v.AddArg2(x, x)
37 return true
38 }
39 return false
40 }
41 func rewriteBlockLOONG64latelower(b *Block) bool {
42 switch b.Kind {
43 case BlockLOONG64EQZ:
44
45
46 for b.Controls[0].Op == OpLOONG64XOR {
47 v_0 := b.Controls[0]
48 _ = v_0.Args[1]
49 v_0_0 := v_0.Args[0]
50 v_0_1 := v_0.Args[1]
51 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
52 x := v_0_0
53 y := v_0_1
54 b.resetWithControl2(BlockLOONG64BEQ, x, y)
55 return true
56 }
57 }
58 case BlockLOONG64NEZ:
59
60
61 for b.Controls[0].Op == OpLOONG64XOR {
62 v_0 := b.Controls[0]
63 _ = v_0.Args[1]
64 v_0_0 := v_0.Args[0]
65 v_0_1 := v_0.Args[1]
66 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
67 x := v_0_0
68 y := v_0_1
69 b.resetWithControl2(BlockLOONG64BNE, x, y)
70 return true
71 }
72 }
73 }
74 return false
75 }
76
View as plain text