summaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2022-10-19 15:53:43 +1100
committerJoel Sing <joel@sing.id.au>2022-10-20 16:13:20 +0000
commitc0f27eb3d580c8b9efd73802678eba4c6c9461be (patch)
treef9b6f4ccdc83e1f677e3d07d72bc974b520293a3 /src/cmd/compile/internal
parent3e6ca3a506fc89f19277b3c19b751847b3864185 (diff)
downloadgo-git-c0f27eb3d580c8b9efd73802678eba4c6c9461be.tar.gz
cmd/compile/internal/ssa: wire up late lower block function
Currently, the lowerBlock function is reused with lateLowerValue, meaning that any block rewriting rules in the late lower pass are silently ignored. Change the late lower pass to actually use the lateLowerBlock function with the lateLowerValue function. Change-Id: Iaac1c2955bb27078378cac50cde3716e79a7d9f8 Reviewed-on: https://go-review.googlesource.com/c/go/+/444335 Run-TryBot: Joel Sing <joel@sing.id.au> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal')
-rw-r--r--src/cmd/compile/internal/ssa/config.go10
-rw-r--r--src/cmd/compile/internal/ssa/lower.go2
2 files changed, 8 insertions, 4 deletions
diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go
index 17f336315a..df168e6f03 100644
--- a/src/cmd/compile/internal/ssa/config.go
+++ b/src/cmd/compile/internal/ssa/config.go
@@ -21,9 +21,10 @@ type Config struct {
PtrSize int64 // 4 or 8; copy of cmd/internal/sys.Arch.PtrSize
RegSize int64 // 4 or 8; copy of cmd/internal/sys.Arch.RegSize
Types Types
- lowerBlock blockRewriter // lowering function
- lowerValue valueRewriter // lowering function, first round
- lateLowerValue valueRewriter // lowering function that needs to be run after the first round of lower function; only used on some architectures
+ lowerBlock blockRewriter // block lowering function, first round
+ lowerValue valueRewriter // value lowering function, first round
+ lateLowerBlock blockRewriter // block lowering function that needs to be run after the first round; only used on some architectures
+ lateLowerValue valueRewriter // value lowering function that needs to be run after the first round; only used on some architectures
splitLoad valueRewriter // function for splitting merged load ops; only used on some architectures
registers []Register // machine registers
gpRegMask regMask // general purpose integer register mask
@@ -185,6 +186,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
c.RegSize = 8
c.lowerBlock = rewriteBlockAMD64
c.lowerValue = rewriteValueAMD64
+ c.lateLowerBlock = rewriteBlockAMD64latelower
c.lateLowerValue = rewriteValueAMD64latelower
c.splitLoad = rewriteValueAMD64splitload
c.registers = registersAMD64[:]
@@ -224,6 +226,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
c.RegSize = 8
c.lowerBlock = rewriteBlockARM64
c.lowerValue = rewriteValueARM64
+ c.lateLowerBlock = rewriteBlockARM64latelower
c.lateLowerValue = rewriteValueARM64latelower
c.registers = registersARM64[:]
c.gpRegMask = gpRegMaskARM64
@@ -310,6 +313,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo
c.RegSize = 8
c.lowerBlock = rewriteBlockRISCV64
c.lowerValue = rewriteValueRISCV64
+ c.lateLowerBlock = rewriteBlockRISCV64latelower
c.lateLowerValue = rewriteValueRISCV64latelower
c.registers = registersRISCV64[:]
c.gpRegMask = gpRegMaskRISCV64
diff --git a/src/cmd/compile/internal/ssa/lower.go b/src/cmd/compile/internal/ssa/lower.go
index b850ac52e3..df25ac9f1a 100644
--- a/src/cmd/compile/internal/ssa/lower.go
+++ b/src/cmd/compile/internal/ssa/lower.go
@@ -14,7 +14,7 @@ func lower(f *Func) {
func lateLower(f *Func) {
// repeat rewrites until we find no more rewrites
if f.Config.lateLowerValue != nil {
- applyRewrite(f, f.Config.lowerBlock, f.Config.lateLowerValue, removeDeadValues)
+ applyRewrite(f, f.Config.lateLowerBlock, f.Config.lateLowerValue, removeDeadValues)
}
}