aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/rewriteARM.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2020-04-23 19:22:26 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2020-04-24 16:44:20 +0000
commit67a8660b5acd570530f3777727d67e739e54cb2b (patch)
tree4a2550a3801fcb5bf4e8a341309a8315ab46ff24 /src/cmd/compile/internal/ssa/rewriteARM.go
parent3a37fd4010dc20403d642e2c628cb0656a4fb968 (diff)
downloadgo-67a8660b5acd570530f3777727d67e739e54cb2b.tar.gz
go-67a8660b5acd570530f3777727d67e739e54cb2b.zip
cmd/compile: CSE the RHS of rewrite rules
Keep track of all expressions encountered while generating a rewrite result, and re-use them whenever possible. Named expressions may still be used for clarity when desired. Change-Id: I640dca108763eb8baeff8f9a4169300af3445b82 Reviewed-on: https://go-review.googlesource.com/c/go/+/229800 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewriteARM.go')
-rw-r--r--src/cmd/compile/internal/ssa/rewriteARM.go146
1 files changed, 46 insertions, 100 deletions
diff --git a/src/cmd/compile/internal/ssa/rewriteARM.go b/src/cmd/compile/internal/ssa/rewriteARM.go
index b0130aa82f..5c8dd0f2ed 100644
--- a/src/cmd/compile/internal/ssa/rewriteARM.go
+++ b/src/cmd/compile/internal/ssa/rewriteARM.go
@@ -13662,10 +13662,7 @@ func rewriteValueARM_OpCtz16(v *Value) bool {
v3.AddArg(x)
v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
v4.AuxInt = 0
- v5 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
- v5.AuxInt = 0x10000
- v5.AddArg(x)
- v4.AddArg(v5)
+ v4.AddArg(v3)
v2.AddArg2(v3, v4)
v1.AddArg(v2)
v0.AddArg(v1)
@@ -13762,10 +13759,7 @@ func rewriteValueARM_OpCtz8(v *Value) bool {
v3.AddArg(x)
v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32)
v4.AuxInt = 0
- v5 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32)
- v5.AuxInt = 0x100
- v5.AddArg(x)
- v4.AddArg(v5)
+ v4.AddArg(v3)
v2.AddArg2(v3, v4)
v1.AddArg(v2)
v0.AddArg(v1)
@@ -13850,29 +13844,21 @@ func rewriteValueARM_OpDiv32(v *Value) bool {
v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
v5.AddArg(x)
v4.AddArg2(x, v5)
- v6 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v6.AddArg(x)
- v3.AddArg2(v4, v6)
- v7 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
- v8 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
- v9 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v9.AddArg(y)
- v8.AddArg2(y, v9)
- v10 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v10.AddArg(y)
- v7.AddArg2(v8, v10)
- v2.AddArg2(v3, v7)
+ v3.AddArg2(v4, v5)
+ v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
+ v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
+ v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
+ v8.AddArg(y)
+ v7.AddArg2(y, v8)
+ v6.AddArg2(v7, v8)
+ v2.AddArg2(v3, v6)
v1.AddArg(v2)
- v11 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v12 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
- v12.AddArg2(x, y)
- v11.AddArg(v12)
- v0.AddArg2(v1, v11)
- v13 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v14 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
- v14.AddArg2(x, y)
- v13.AddArg(v14)
- v.AddArg2(v0, v13)
+ v9 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
+ v10 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
+ v10.AddArg2(x, y)
+ v9.AddArg(v10)
+ v0.AddArg2(v1, v9)
+ v.AddArg2(v0, v9)
return true
}
}
@@ -14562,9 +14548,7 @@ func rewriteValueARM_OpLsh16x16(v *Value) bool {
v0.AddArg2(x, v1)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg2(v0, v2)
return true
}
@@ -14661,9 +14645,7 @@ func rewriteValueARM_OpLsh32x16(v *Value) bool {
v0.AddArg2(x, v1)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg2(v0, v2)
return true
}
@@ -14760,9 +14742,7 @@ func rewriteValueARM_OpLsh8x16(v *Value) bool {
v0.AddArg2(x, v1)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg2(v0, v2)
return true
}
@@ -14898,25 +14878,17 @@ func rewriteValueARM_OpMod32(v *Value) bool {
v5 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
v5.AddArg(x)
v4.AddArg2(x, v5)
- v6 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v6.AddArg(x)
- v3.AddArg2(v4, v6)
- v7 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
- v8 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
- v9 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v9.AddArg(y)
- v8.AddArg2(y, v9)
- v10 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v10.AddArg(y)
- v7.AddArg2(v8, v10)
- v2.AddArg2(v3, v7)
+ v3.AddArg2(v4, v5)
+ v6 := b.NewValue0(v.Pos, OpARMSUB, typ.UInt32)
+ v7 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32)
+ v8 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
+ v8.AddArg(y)
+ v7.AddArg2(y, v8)
+ v6.AddArg2(v7, v8)
+ v2.AddArg2(v3, v6)
v1.AddArg(v2)
- v11 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v11.AddArg(x)
- v0.AddArg2(v1, v11)
- v12 := b.NewValue0(v.Pos, OpSignmask, typ.Int32)
- v12.AddArg(x)
- v.AddArg2(v0, v12)
+ v0.AddArg2(v1, v5)
+ v.AddArg2(v0, v5)
return true
}
}
@@ -15592,9 +15564,7 @@ func rewriteValueARM_OpRsh16Ux16(v *Value) bool {
v0.AddArg2(v1, v2)
v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v3.AuxInt = 256
- v4 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v4.AddArg(y)
- v3.AddArg(v4)
+ v3.AddArg(v2)
v.AddArg2(v0, v3)
return true
}
@@ -15700,9 +15670,7 @@ func rewriteValueARM_OpRsh16x16(v *Value) bool {
v1.AddArg(y)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg3(v0, v1, v2)
return true
}
@@ -15811,9 +15779,7 @@ func rewriteValueARM_OpRsh32Ux16(v *Value) bool {
v0.AddArg2(x, v1)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg2(v0, v2)
return true
}
@@ -15907,9 +15873,7 @@ func rewriteValueARM_OpRsh32x16(v *Value) bool {
v0.AddArg(y)
v1 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v1.AuxInt = 256
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v1.AddArg(v2)
+ v1.AddArg(v0)
v.AddArg3(x, v0, v1)
return true
}
@@ -16007,9 +15971,7 @@ func rewriteValueARM_OpRsh8Ux16(v *Value) bool {
v0.AddArg2(v1, v2)
v3 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v3.AuxInt = 256
- v4 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v4.AddArg(y)
- v3.AddArg(v4)
+ v3.AddArg(v2)
v.AddArg2(v0, v3)
return true
}
@@ -16115,9 +16077,7 @@ func rewriteValueARM_OpRsh8x16(v *Value) bool {
v1.AddArg(y)
v2 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags)
v2.AuxInt = 256
- v3 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v3.AddArg(y)
- v2.AddArg(v3)
+ v2.AddArg(v1)
v.AddArg3(v0, v1, v2)
return true
}
@@ -16505,9 +16465,7 @@ func rewriteValueARM_OpZero(v *Value) bool {
v0.AuxInt = 0
v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
v1.AuxInt = 0
- v2 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v2.AuxInt = 0
- v1.AddArg3(ptr, v2, mem)
+ v1.AddArg3(ptr, v0, mem)
v.AddArg3(ptr, v0, v1)
return true
}
@@ -16549,9 +16507,7 @@ func rewriteValueARM_OpZero(v *Value) bool {
v0.AuxInt = 0
v1 := b.NewValue0(v.Pos, OpARMMOVHstore, types.TypeMem)
v1.AuxInt = 0
- v2 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v2.AuxInt = 0
- v1.AddArg3(ptr, v2, mem)
+ v1.AddArg3(ptr, v0, mem)
v.AddArg3(ptr, v0, v1)
return true
}
@@ -16569,19 +16525,13 @@ func rewriteValueARM_OpZero(v *Value) bool {
v0.AuxInt = 0
v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
v1.AuxInt = 2
- v2 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v2.AuxInt = 0
+ v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
+ v2.AuxInt = 1
v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
- v3.AuxInt = 1
- v4 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v4.AuxInt = 0
- v5 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
- v5.AuxInt = 0
- v6 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v6.AuxInt = 0
- v5.AddArg3(ptr, v6, mem)
- v3.AddArg3(ptr, v4, v5)
- v1.AddArg3(ptr, v2, v3)
+ v3.AuxInt = 0
+ v3.AddArg3(ptr, v0, mem)
+ v2.AddArg3(ptr, v0, v3)
+ v1.AddArg3(ptr, v0, v2)
v.AddArg3(ptr, v0, v1)
return true
}
@@ -16599,14 +16549,10 @@ func rewriteValueARM_OpZero(v *Value) bool {
v0.AuxInt = 0
v1 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
v1.AuxInt = 1
- v2 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
+ v2 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
v2.AuxInt = 0
- v3 := b.NewValue0(v.Pos, OpARMMOVBstore, types.TypeMem)
- v3.AuxInt = 0
- v4 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32)
- v4.AuxInt = 0
- v3.AddArg3(ptr, v4, mem)
- v1.AddArg3(ptr, v2, v3)
+ v2.AddArg3(ptr, v0, mem)
+ v1.AddArg3(ptr, v0, v2)
v.AddArg3(ptr, v0, v1)
return true
}