|
361 | 361 | (FCMPD (FMOVDconst [0]) x) -> (InvertFlags (FCMPD0 x))
|
362 | 362 |
|
363 | 363 | // CSEL needs a flag-generating argument. Synthesize a CMPW if necessary.
|
364 |
| -(CondSelect x y bool) && flagArg(bool) != nil -> (CSEL {bool.Op} x y flagArg(bool)) |
365 |
| -(CondSelect x y bool) && flagArg(bool) == nil -> (CSEL {OpARM64NotEqual} x y (CMPWconst [0] bool)) |
| 364 | +(CondSelect x y boolval) && flagArg(boolval) != nil -> (CSEL {boolval.Op} x y flagArg(boolval)) |
| 365 | +(CondSelect x y boolval) && flagArg(boolval) == nil -> (CSEL {OpARM64NotEqual} x y (CMPWconst [0] boolval)) |
366 | 366 |
|
367 | 367 | (OffPtr [off] ptr:(SP)) -> (MOVDaddr [off] ptr)
|
368 | 368 | (OffPtr [off] ptr) -> (ADDconst [off] ptr)
|
|
1647 | 1647 | (CSEL0 {cc} _ flag) && ccARM64Eval(cc, flag) < 0 -> (MOVDconst [0])
|
1648 | 1648 |
|
1649 | 1649 | // absorb flags back into boolean CSEL
|
1650 |
| -(CSEL {cc} x y (CMPWconst [0] bool)) && cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil -> |
1651 |
| - (CSEL {bool.Op} x y flagArg(bool)) |
1652 |
| -(CSEL {cc} x y (CMPWconst [0] bool)) && cc.(Op) == OpARM64Equal && flagArg(bool) != nil -> |
1653 |
| - (CSEL {arm64Negate(bool.Op)} x y flagArg(bool)) |
1654 |
| -(CSEL0 {cc} x (CMPWconst [0] bool)) && cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil -> |
1655 |
| - (CSEL0 {bool.Op} x flagArg(bool)) |
1656 |
| -(CSEL0 {cc} x (CMPWconst [0] bool)) && cc.(Op) == OpARM64Equal && flagArg(bool) != nil -> |
1657 |
| - (CSEL0 {arm64Negate(bool.Op)} x flagArg(bool)) |
| 1650 | +(CSEL {cc} x y (CMPWconst [0] boolval)) && cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil -> |
| 1651 | + (CSEL {boolval.Op} x y flagArg(boolval)) |
| 1652 | +(CSEL {cc} x y (CMPWconst [0] boolval)) && cc.(Op) == OpARM64Equal && flagArg(boolval) != nil -> |
| 1653 | + (CSEL {arm64Negate(boolval.Op)} x y flagArg(boolval)) |
| 1654 | +(CSEL0 {cc} x (CMPWconst [0] boolval)) && cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil -> |
| 1655 | + (CSEL0 {boolval.Op} x flagArg(boolval)) |
| 1656 | +(CSEL0 {cc} x (CMPWconst [0] boolval)) && cc.(Op) == OpARM64Equal && flagArg(boolval) != nil -> |
| 1657 | + (CSEL0 {arm64Negate(boolval.Op)} x flagArg(boolval)) |
1658 | 1658 |
|
1659 | 1659 | // absorb shifts into ops
|
1660 | 1660 | (NEG x:(SLLconst [c] y)) && clobberIfDead(x) -> (NEGshiftLL [c] y)
|
|
0 commit comments