Commit 2679282d authored by Keith Randall's avatar Keith Randall

cmd/compile: fold ADDconsts together for PPC

Change-Id: I571f03af6f791e78e7e18addcc310eb25747cdcf
Reviewed-on: https://go-review.googlesource.com/29351Reviewed-by: default avatarDavid Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 6129f373
...@@ -530,8 +530,9 @@ ...@@ -530,8 +530,9 @@
// Optimizations // Optimizations
(ADD (MOVDconst [c]) x) && int64(int32(c)) == c -> (ADDconst [c] x) (ADD (MOVDconst [c]) x) && is32Bit(c) -> (ADDconst [c] x)
(ADD x (MOVDconst [c])) && int64(int32(c)) == c -> (ADDconst [c] x) (ADD x (MOVDconst [c])) && is32Bit(c) -> (ADDconst [c] x)
(ADDconst [c] (ADDconst [d] x)) && is32Bit(c+d) -> (ADDconst [c+d] x)
// Fold offsets for stores. // Fold offsets for stores.
(MOVDstore [off1] {sym} (ADDconst [off2] x) val mem) && is16Bit(off1+off2) -> (MOVDstore [off1+off2] {sym} x val mem) (MOVDstore [off1] {sym} (ADDconst [off2] x) val mem) && is16Bit(off1+off2) -> (MOVDstore [off1+off2] {sym} x val mem)
......
...@@ -340,6 +340,8 @@ func rewriteValuePPC64(v *Value, config *Config) bool { ...@@ -340,6 +340,8 @@ func rewriteValuePPC64(v *Value, config *Config) bool {
return rewriteValuePPC64_OpOrB(v, config) return rewriteValuePPC64_OpOrB(v, config)
case OpPPC64ADD: case OpPPC64ADD:
return rewriteValuePPC64_OpPPC64ADD(v, config) return rewriteValuePPC64_OpPPC64ADD(v, config)
case OpPPC64ADDconst:
return rewriteValuePPC64_OpPPC64ADDconst(v, config)
case OpPPC64CMPUconst: case OpPPC64CMPUconst:
return rewriteValuePPC64_OpPPC64CMPUconst(v, config) return rewriteValuePPC64_OpPPC64CMPUconst(v, config)
case OpPPC64CMPWUconst: case OpPPC64CMPWUconst:
...@@ -3977,7 +3979,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool { ...@@ -3977,7 +3979,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool {
b := v.Block b := v.Block
_ = b _ = b
// match: (ADD (MOVDconst [c]) x) // match: (ADD (MOVDconst [c]) x)
// cond: int64(int32(c)) == c // cond: is32Bit(c)
// result: (ADDconst [c] x) // result: (ADDconst [c] x)
for { for {
v_0 := v.Args[0] v_0 := v.Args[0]
...@@ -3986,7 +3988,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool { ...@@ -3986,7 +3988,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool {
} }
c := v_0.AuxInt c := v_0.AuxInt
x := v.Args[1] x := v.Args[1]
if !(int64(int32(c)) == c) { if !(is32Bit(c)) {
break break
} }
v.reset(OpPPC64ADDconst) v.reset(OpPPC64ADDconst)
...@@ -3995,7 +3997,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool { ...@@ -3995,7 +3997,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool {
return true return true
} }
// match: (ADD x (MOVDconst [c])) // match: (ADD x (MOVDconst [c]))
// cond: int64(int32(c)) == c // cond: is32Bit(c)
// result: (ADDconst [c] x) // result: (ADDconst [c] x)
for { for {
x := v.Args[0] x := v.Args[0]
...@@ -4004,7 +4006,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool { ...@@ -4004,7 +4006,7 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool {
break break
} }
c := v_1.AuxInt c := v_1.AuxInt
if !(int64(int32(c)) == c) { if !(is32Bit(c)) {
break break
} }
v.reset(OpPPC64ADDconst) v.reset(OpPPC64ADDconst)
...@@ -4014,6 +4016,30 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool { ...@@ -4014,6 +4016,30 @@ func rewriteValuePPC64_OpPPC64ADD(v *Value, config *Config) bool {
} }
return false return false
} }
func rewriteValuePPC64_OpPPC64ADDconst(v *Value, config *Config) bool {
b := v.Block
_ = b
// match: (ADDconst [c] (ADDconst [d] x))
// cond: is32Bit(c+d)
// result: (ADDconst [c+d] x)
for {
c := v.AuxInt
v_0 := v.Args[0]
if v_0.Op != OpPPC64ADDconst {
break
}
d := v_0.AuxInt
x := v_0.Args[0]
if !(is32Bit(c + d)) {
break
}
v.reset(OpPPC64ADDconst)
v.AuxInt = c + d
v.AddArg(x)
return true
}
return false
}
func rewriteValuePPC64_OpPPC64CMPUconst(v *Value, config *Config) bool { func rewriteValuePPC64_OpPPC64CMPUconst(v *Value, config *Config) bool {
b := v.Block b := v.Block
_ = b _ = b
......
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