Change-Id: Idefb6669d54929065f57e3bd767c91451dc3a375
Reviewed-on: https://go-review.googlesource.com/c/go/+/223562
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
// For positive x, bit 63 of x-1 is always 0, so the result is -1.
// For zero x, bit 63 of x-1 is 1, so the result is 0.
//
-(Slicemask <t> x) -> (XORI [-1] (SRAI <t> [63] (ADDI <t> [-1] x)))
+(Slicemask <t> x) -> (NOT (SRAI <t> [63] (ADDI <t> [-1] x)))
// Truncations
// We ignore the unused high parts of registers, so truncates are just copies.
v_0 := v.Args[0]
b := v.Block
// match: (Slicemask <t> x)
- // result: (XORI [-1] (SRAI <t> [63] (ADDI <t> [-1] x)))
+ // result: (NOT (SRAI <t> [63] (ADDI <t> [-1] x)))
for {
t := v.Type
x := v_0
- v.reset(OpRISCV64XORI)
- v.AuxInt = -1
+ v.reset(OpRISCV64NOT)
v0 := b.NewValue0(v.Pos, OpRISCV64SRAI, t)
v0.AuxInt = 63
v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, t)