lab.nexedi.com will be down from Thursday, 20 March 2025, 07:30:00 UTC for a duration of approximately 2 hours

Commit 624630b8 authored by Keith Randall's avatar Keith Randall

cmd/compile: fold constant comparisions into SETxxmem ops.

Fixes #22198

Change-Id: I5cb91c73069af8b16a2580d28756efd58c84b690
Reviewed-on: https://go-review.googlesource.com/69990
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
parent 9ad2319b
...@@ -1545,6 +1545,66 @@ ...@@ -1545,6 +1545,66 @@
(SETAE (FlagGT_ULT)) -> (MOVLconst [0]) (SETAE (FlagGT_ULT)) -> (MOVLconst [0])
(SETAE (FlagGT_UGT)) -> (MOVLconst [1]) (SETAE (FlagGT_UGT)) -> (MOVLconst [1])
(SETEQmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETEQmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETEQmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETEQmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETEQmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETNEmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETNEmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETNEmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETNEmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETNEmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETLmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETLmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETLEmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLEmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLEmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETLEmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETLEmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETGmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETGEmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETGEmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGEmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETGEmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETGEmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETBmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETBmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETBEmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBEmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBEmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETBEmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETBEmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETAmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETAEmem [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETAEmem [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAEmem [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
(SETAEmem [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
(SETAEmem [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
// Remove redundant *const ops // Remove redundant *const ops
(ADDQconst [0] x) -> x (ADDQconst [0] x) -> x
(ADDLconst [c] x) && int32(c)==0 -> x (ADDLconst [c] x) && int32(c)==0 -> x
......
...@@ -316,7 +316,7 @@ func rewriteValueAMD64(v *Value) bool { ...@@ -316,7 +316,7 @@ func rewriteValueAMD64(v *Value) bool {
case OpAMD64SETEQ: case OpAMD64SETEQ:
return rewriteValueAMD64_OpAMD64SETEQ_0(v) || rewriteValueAMD64_OpAMD64SETEQ_10(v) return rewriteValueAMD64_OpAMD64SETEQ_0(v) || rewriteValueAMD64_OpAMD64SETEQ_10(v)
case OpAMD64SETEQmem: case OpAMD64SETEQmem:
return rewriteValueAMD64_OpAMD64SETEQmem_0(v) return rewriteValueAMD64_OpAMD64SETEQmem_0(v) || rewriteValueAMD64_OpAMD64SETEQmem_10(v)
case OpAMD64SETG: case OpAMD64SETG:
return rewriteValueAMD64_OpAMD64SETG_0(v) return rewriteValueAMD64_OpAMD64SETG_0(v)
case OpAMD64SETGE: case OpAMD64SETGE:
...@@ -336,7 +336,7 @@ func rewriteValueAMD64(v *Value) bool { ...@@ -336,7 +336,7 @@ func rewriteValueAMD64(v *Value) bool {
case OpAMD64SETNE: case OpAMD64SETNE:
return rewriteValueAMD64_OpAMD64SETNE_0(v) || rewriteValueAMD64_OpAMD64SETNE_10(v) return rewriteValueAMD64_OpAMD64SETNE_0(v) || rewriteValueAMD64_OpAMD64SETNE_10(v)
case OpAMD64SETNEmem: case OpAMD64SETNEmem:
return rewriteValueAMD64_OpAMD64SETNEmem_0(v) return rewriteValueAMD64_OpAMD64SETNEmem_0(v) || rewriteValueAMD64_OpAMD64SETNEmem_10(v)
case OpAMD64SHLL: case OpAMD64SHLL:
return rewriteValueAMD64_OpAMD64SHLL_0(v) return rewriteValueAMD64_OpAMD64SHLL_0(v)
case OpAMD64SHLLconst: case OpAMD64SHLLconst:
...@@ -35824,6 +35824,8 @@ func rewriteValueAMD64_OpAMD64SETAE_0(v *Value) bool { ...@@ -35824,6 +35824,8 @@ func rewriteValueAMD64_OpAMD64SETAE_0(v *Value) bool {
return false return false
} }
func rewriteValueAMD64_OpAMD64SETAEmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETAEmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETAEmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETAEmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETBEmem [off] {sym} ptr x mem) // result: (SETBEmem [off] {sym} ptr x mem)
...@@ -35846,9 +35848,126 @@ func rewriteValueAMD64_OpAMD64SETAEmem_0(v *Value) bool { ...@@ -35846,9 +35848,126 @@ func rewriteValueAMD64_OpAMD64SETAEmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETAEmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAEmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAEmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAEmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAEmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETAmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETAmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETAmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETAmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETBmem [off] {sym} ptr x mem) // result: (SETBmem [off] {sym} ptr x mem)
...@@ -35871,6 +35990,121 @@ func rewriteValueAMD64_OpAMD64SETAmem_0(v *Value) bool { ...@@ -35871,6 +35990,121 @@ func rewriteValueAMD64_OpAMD64SETAmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETAmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETAmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETB_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETB_0(v *Value) bool {
...@@ -36026,6 +36260,8 @@ func rewriteValueAMD64_OpAMD64SETBE_0(v *Value) bool { ...@@ -36026,6 +36260,8 @@ func rewriteValueAMD64_OpAMD64SETBE_0(v *Value) bool {
return false return false
} }
func rewriteValueAMD64_OpAMD64SETBEmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETBEmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETBEmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETBEmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETAEmem [off] {sym} ptr x mem) // result: (SETAEmem [off] {sym} ptr x mem)
...@@ -36048,9 +36284,126 @@ func rewriteValueAMD64_OpAMD64SETBEmem_0(v *Value) bool { ...@@ -36048,9 +36284,126 @@ func rewriteValueAMD64_OpAMD64SETBEmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETBEmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBEmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBEmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBEmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBEmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETBmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETBmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETBmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETBmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETAmem [off] {sym} ptr x mem) // result: (SETAmem [off] {sym} ptr x mem)
...@@ -36073,6 +36426,121 @@ func rewriteValueAMD64_OpAMD64SETBmem_0(v *Value) bool { ...@@ -36073,6 +36426,121 @@ func rewriteValueAMD64_OpAMD64SETBmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETBmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETBmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool {
...@@ -36701,6 +37169,126 @@ func rewriteValueAMD64_OpAMD64SETEQmem_0(v *Value) bool { ...@@ -36701,6 +37169,126 @@ func rewriteValueAMD64_OpAMD64SETEQmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETEQmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false
}
func rewriteValueAMD64_OpAMD64SETEQmem_10(v *Value) bool {
b := v.Block
_ = b
// match: (SETEQmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETEQmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETEQmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETEQmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETG_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETG_0(v *Value) bool {
...@@ -36856,6 +37444,8 @@ func rewriteValueAMD64_OpAMD64SETGE_0(v *Value) bool { ...@@ -36856,6 +37444,8 @@ func rewriteValueAMD64_OpAMD64SETGE_0(v *Value) bool {
return false return false
} }
func rewriteValueAMD64_OpAMD64SETGEmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETGEmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETGEmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETGEmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETLEmem [off] {sym} ptr x mem) // result: (SETLEmem [off] {sym} ptr x mem)
...@@ -36878,9 +37468,126 @@ func rewriteValueAMD64_OpAMD64SETGEmem_0(v *Value) bool { ...@@ -36878,9 +37468,126 @@ func rewriteValueAMD64_OpAMD64SETGEmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETGEmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGEmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGEmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGEmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGEmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETGmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETGmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETGmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETGmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETLmem [off] {sym} ptr x mem) // result: (SETLmem [off] {sym} ptr x mem)
...@@ -36903,6 +37610,121 @@ func rewriteValueAMD64_OpAMD64SETGmem_0(v *Value) bool { ...@@ -36903,6 +37610,121 @@ func rewriteValueAMD64_OpAMD64SETGmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETGmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETGmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETL_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETL_0(v *Value) bool {
...@@ -37058,6 +37880,8 @@ func rewriteValueAMD64_OpAMD64SETLE_0(v *Value) bool { ...@@ -37058,6 +37880,8 @@ func rewriteValueAMD64_OpAMD64SETLE_0(v *Value) bool {
return false return false
} }
func rewriteValueAMD64_OpAMD64SETLEmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETLEmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETLEmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETLEmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETGEmem [off] {sym} ptr x mem) // result: (SETGEmem [off] {sym} ptr x mem)
...@@ -37080,9 +37904,126 @@ func rewriteValueAMD64_OpAMD64SETLEmem_0(v *Value) bool { ...@@ -37080,9 +37904,126 @@ func rewriteValueAMD64_OpAMD64SETLEmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETLEmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLEmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLEmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLEmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLEmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETLmem_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETLmem_0(v *Value) bool {
b := v.Block
_ = b
// match: (SETLmem [off] {sym} ptr (InvertFlags x) mem) // match: (SETLmem [off] {sym} ptr (InvertFlags x) mem)
// cond: // cond:
// result: (SETGmem [off] {sym} ptr x mem) // result: (SETGmem [off] {sym} ptr x mem)
...@@ -37105,6 +38046,121 @@ func rewriteValueAMD64_OpAMD64SETLmem_0(v *Value) bool { ...@@ -37105,6 +38046,121 @@ func rewriteValueAMD64_OpAMD64SETLmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETLmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETLmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool {
...@@ -37733,6 +38789,126 @@ func rewriteValueAMD64_OpAMD64SETNEmem_0(v *Value) bool { ...@@ -37733,6 +38789,126 @@ func rewriteValueAMD64_OpAMD64SETNEmem_0(v *Value) bool {
v.AddArg(mem) v.AddArg(mem)
return true return true
} }
// match: (SETNEmem [off] {sym} ptr x:(FlagEQ) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [0]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagEQ {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 0
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false
}
func rewriteValueAMD64_OpAMD64SETNEmem_10(v *Value) bool {
b := v.Block
_ = b
// match: (SETNEmem [off] {sym} ptr x:(FlagLT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETNEmem [off] {sym} ptr x:(FlagLT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagLT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETNEmem [off] {sym} ptr x:(FlagGT_ULT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_ULT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
// match: (SETNEmem [off] {sym} ptr x:(FlagGT_UGT) mem)
// cond:
// result: (MOVBstore [off] {sym} ptr (MOVLconst <x.Type> [1]) mem)
for {
off := v.AuxInt
sym := v.Aux
_ = v.Args[2]
ptr := v.Args[0]
x := v.Args[1]
if x.Op != OpAMD64FlagGT_UGT {
break
}
mem := v.Args[2]
v.reset(OpAMD64MOVBstore)
v.AuxInt = off
v.Aux = sym
v.AddArg(ptr)
v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type)
v0.AuxInt = 1
v.AddArg(v0)
v.AddArg(mem)
return true
}
return false return false
} }
func rewriteValueAMD64_OpAMD64SHLL_0(v *Value) bool { func rewriteValueAMD64_OpAMD64SHLL_0(v *Value) bool {
// compile
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package issue22198
func f(a *bool, b bool) {
if b {
return
}
c := '\n'
if b {
c = ' '
}
*a = c == '\n'
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment