]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: wire up late lower block function
authorJoel Sing <joel@sing.id.au>
Wed, 19 Oct 2022 04:53:43 +0000 (15:53 +1100)
committerJoel Sing <joel@sing.id.au>
Thu, 20 Oct 2022 16:13:20 +0000 (16:13 +0000)
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>

src/cmd/compile/internal/ssa/config.go
src/cmd/compile/internal/ssa/lower.go

index 17f336315a01d39e9b0452bcfbe4a7f62a8ba51d..df168e6f0354d021fdf2a99f04bd9125a2637874 100644 (file)
@@ -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
index b850ac52e3d4075816092e0d304fe640193f7c98..df25ac9f1abeda3209aff8b7a935d896c62511e1 100644 (file)
@@ -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)
        }
 }