mirror of https://github.com/golang/go.git
cmd/compile: clean up store rules to use store type, not argument type
Argument type is dangerous because it may be thinner than the actual store being issued. Change-Id: Id19fbd8e6c41390a453994f897dd5048473136aa Reviewed-on: https://go-review.googlesource.com/c/go/+/483438 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
9efca84066
commit
60140a86b3
|
|
@ -206,11 +206,9 @@
|
|||
(Load <t> ptr mem) && is64BitFloat(t) => (MOVSDload ptr mem)
|
||||
|
||||
// Lowering stores
|
||||
// These more-specific FP versions of Store pattern should come first.
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVSDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVSSstore ptr val mem)
|
||||
|
||||
(Store {t} ptr val mem) && t.Size() == 4 => (MOVLstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVSDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVSSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVLstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
|
||||
|
|
|
|||
|
|
@ -234,12 +234,10 @@
|
|||
(Load <t> ptr mem) && is64BitFloat(t) => (MOVSDload ptr mem)
|
||||
|
||||
// Lowering stores
|
||||
// These more-specific FP versions of Store pattern should come first.
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVSDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVSSstore ptr val mem)
|
||||
|
||||
(Store {t} ptr val mem) && t.Size() == 8 => (MOVQstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 => (MOVLstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVSDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVSSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVQstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVLstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
|
||||
|
|
|
|||
|
|
@ -264,9 +264,9 @@
|
|||
// stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
|
||||
|
||||
// zero instructions
|
||||
(Zero [0] _ mem) => mem
|
||||
|
|
|
|||
|
|
@ -340,10 +340,10 @@
|
|||
// stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
|
||||
|
||||
// zeroing
|
||||
(Zero [0] _ mem) => mem
|
||||
|
|
|
|||
|
|
@ -246,10 +246,10 @@
|
|||
// stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVVstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVVstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
|
||||
|
||||
// zeroing
|
||||
(Zero [0] _ mem) => mem
|
||||
|
|
|
|||
|
|
@ -226,9 +226,9 @@
|
|||
// stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
|
||||
|
||||
// zero instructions
|
||||
(Zero [0] _ mem) => mem
|
||||
|
|
|
|||
|
|
@ -237,10 +237,10 @@
|
|||
// stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVVstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVVstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
|
||||
|
||||
// zeroing
|
||||
(Zero [0] _ mem) => mem
|
||||
|
|
|
|||
|
|
@ -430,11 +430,10 @@
|
|||
(Load <t> ptr mem) && is32BitFloat(t) => (FMOVSload ptr mem)
|
||||
(Load <t> ptr mem) && is64BitFloat(t) => (FMOVDload ptr mem)
|
||||
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is32BitFloat(val.Type) => (FMOVDstore ptr val mem) // glitch from (Cvt32Fto64F x) => x -- type is wrong
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitInt(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
|
||||
|
|
|
|||
|
|
@ -296,10 +296,10 @@
|
|||
// Stores
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
|
||||
|
||||
// We need to fold MOVaddr into the LD/MOVDstore ops so that the live variable analysis
|
||||
// knows what variables are being read/written by the ops.
|
||||
|
|
|
|||
|
|
@ -346,12 +346,10 @@
|
|||
(Load <t> ptr mem) && is64BitFloat(t) => (FMOVDload ptr mem)
|
||||
|
||||
// Lowering stores
|
||||
// These more-specific FP versions of Store pattern should come first.
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
|
||||
|
||||
(Store {t} ptr val mem) && t.Size() == 8 => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
|
||||
(Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
|
||||
|
||||
|
|
|
|||
|
|
@ -11224,14 +11224,14 @@ func rewriteValue386_OpStore(v *Value) bool {
|
|||
v_1 := v.Args[1]
|
||||
v_0 := v.Args[0]
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVSDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(Op386MOVSDstore)
|
||||
|
|
@ -11239,14 +11239,14 @@ func rewriteValue386_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVSSstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(Op386MOVSSstore)
|
||||
|
|
@ -11254,14 +11254,14 @@ func rewriteValue386_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVLstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(Op386MOVLstore)
|
||||
|
|
|
|||
|
|
@ -33049,14 +33049,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
|
|||
v_1 := v.Args[1]
|
||||
v_0 := v.Args[0]
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVSDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpAMD64MOVSDstore)
|
||||
|
|
@ -33064,14 +33064,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVSSstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpAMD64MOVSSstore)
|
||||
|
|
@ -33079,14 +33079,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVQstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpAMD64MOVQstore)
|
||||
|
|
@ -33094,14 +33094,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVLstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpAMD64MOVLstore)
|
||||
|
|
|
|||
|
|
@ -15912,14 +15912,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARMMOVWstore)
|
||||
|
|
@ -15927,14 +15927,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVFstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARMMOVFstore)
|
||||
|
|
@ -15942,14 +15942,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARMMOVDstore)
|
||||
|
|
|
|||
|
|
@ -28941,14 +28941,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARM64MOVWstore)
|
||||
|
|
@ -28956,14 +28956,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && !is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARM64MOVDstore)
|
||||
|
|
@ -28971,14 +28971,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (FMOVSstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARM64FMOVSstore)
|
||||
|
|
@ -28986,14 +28986,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (FMOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpARM64FMOVDstore)
|
||||
|
|
|
|||
|
|
@ -7225,14 +7225,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpLOONG64MOVWstore)
|
||||
|
|
@ -7240,14 +7240,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && !is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVVstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpLOONG64MOVVstore)
|
||||
|
|
@ -7255,14 +7255,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVFstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpLOONG64MOVFstore)
|
||||
|
|
@ -7270,14 +7270,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpLOONG64MOVDstore)
|
||||
|
|
|
|||
|
|
@ -6785,14 +6785,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPSMOVWstore)
|
||||
|
|
@ -6800,14 +6800,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVFstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPSMOVFstore)
|
||||
|
|
@ -6815,14 +6815,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPSMOVDstore)
|
||||
|
|
|
|||
|
|
@ -7337,14 +7337,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPS64MOVWstore)
|
||||
|
|
@ -7352,14 +7352,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && !is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVVstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPS64MOVVstore)
|
||||
|
|
@ -7367,14 +7367,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (MOVFstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPS64MOVFstore)
|
||||
|
|
@ -7382,14 +7382,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpMIPS64MOVDstore)
|
||||
|
|
|
|||
|
|
@ -16056,14 +16056,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
|
|||
v_1 := v.Args[1]
|
||||
v_0 := v.Args[0]
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (FMOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpPPC64FMOVDstore)
|
||||
|
|
@ -16071,29 +16071,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is32BitFloat(val.Type)
|
||||
// result: (FMOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is32BitFloat(val.Type)) {
|
||||
break
|
||||
}
|
||||
v.reset(OpPPC64FMOVDstore)
|
||||
v.AddArg3(ptr, val, mem)
|
||||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (FMOVSstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpPPC64FMOVSstore)
|
||||
|
|
@ -16101,14 +16086,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && !is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpPPC64MOVDstore)
|
||||
|
|
@ -16116,14 +16101,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitInt(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitInt(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpPPC64MOVWstore)
|
||||
|
|
|
|||
|
|
@ -7862,14 +7862,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && !is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpRISCV64MOVWstore)
|
||||
|
|
@ -7877,14 +7877,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && !is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpRISCV64MOVDstore)
|
||||
|
|
@ -7892,14 +7892,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (FMOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpRISCV64FMOVWstore)
|
||||
|
|
@ -7907,14 +7907,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (FMOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpRISCV64FMOVDstore)
|
||||
|
|
|
|||
|
|
@ -15646,14 +15646,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
|
|||
v_1 := v.Args[1]
|
||||
v_0 := v.Args[0]
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8 && is64BitFloat(val.Type)
|
||||
// cond: t.Size() == 8 && t.IsFloat()
|
||||
// result: (FMOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8 && is64BitFloat(val.Type)) {
|
||||
if !(t.Size() == 8 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpS390XFMOVDstore)
|
||||
|
|
@ -15661,14 +15661,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4 && is32BitFloat(val.Type)
|
||||
// cond: t.Size() == 4 && t.IsFloat()
|
||||
// result: (FMOVSstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4 && is32BitFloat(val.Type)) {
|
||||
if !(t.Size() == 4 && t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpS390XFMOVSstore)
|
||||
|
|
@ -15676,14 +15676,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 8
|
||||
// cond: t.Size() == 8 && !t.IsFloat()
|
||||
// result: (MOVDstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 8) {
|
||||
if !(t.Size() == 8 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpS390XMOVDstore)
|
||||
|
|
@ -15691,14 +15691,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
|
|||
return true
|
||||
}
|
||||
// match: (Store {t} ptr val mem)
|
||||
// cond: t.Size() == 4
|
||||
// cond: t.Size() == 4 && !t.IsFloat()
|
||||
// result: (MOVWstore ptr val mem)
|
||||
for {
|
||||
t := auxToType(v.Aux)
|
||||
ptr := v_0
|
||||
val := v_1
|
||||
mem := v_2
|
||||
if !(t.Size() == 4) {
|
||||
if !(t.Size() == 4 && !t.IsFloat()) {
|
||||
break
|
||||
}
|
||||
v.reset(OpS390XMOVWstore)
|
||||
|
|
|
|||
Loading…
Reference in New Issue