Skip to content

Commit f5b2068

Browse files
sophie-zhaogopherbot
authored andcommitted
cmd/compile: optimize loads from readonly globals into constants on loong64
Ref: CL 141118 Update golang#26498 Change-Id: I9c4ad2bedc4d50bd273bbe9119a898d4fca95e45 Reviewed-on: https://go-review.googlesource.com/c/go/+/700875 Reviewed-by: abner chenc <[email protected]> Reviewed-by: Michael Pratt <[email protected]> Reviewed-by: Meidan Li <[email protected]> Auto-Submit: Michael Pratt <[email protected]> Reviewed-by: Cherry Mui <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 3492e42 commit f5b2068

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

src/cmd/compile/internal/ssa/_gen/LOONG64.rules

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,3 +949,12 @@
949949
&& isInlinableMemmove(dst, src, sz, config)
950950
&& clobber(call)
951951
=> (Move [sz] dst src mem)
952+
953+
// fold readonly sym load
954+
(MOVBUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read8(sym, int64(off)))])
955+
(MOVHUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read16(sym, int64(off), config.ctxt.Arch.ByteOrder))])
956+
(MOVWUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read32(sym, int64(off), config.ctxt.Arch.ByteOrder))])
957+
(MOVVload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(read64(sym, int64(off), config.ctxt.Arch.ByteOrder))])
958+
(MOVBload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int8(read8(sym, int64(off))))])
959+
(MOVHload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int16(read16(sym, int64(off), config.ctxt.Arch.ByteOrder)))])
960+
(MOVWload [off] {sym} (SB) _) && symIsRO(sym) => (MOVVconst [int64(int32(read32(sym, int64(off), config.ctxt.Arch.ByteOrder)))])

src/cmd/compile/internal/ssa/rewriteLOONG64.go

Lines changed: 91 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/codegen/strings.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func ConstantLoad() {
3939
// 386:`MOVW\t\$12592, \(`,`MOVB\t\$50, 2\(`
4040
// arm:`MOVW\t\$48`,`MOVW\t\$49`,`MOVW\t\$50`
4141
// arm64:`MOVD\t\$12592`,`MOVD\t\$50`
42+
// loong64:`MOVV\t\$12592`,`MOVV\t\$50`
4243
// wasm:`I64Const\t\$12592`,`I64Store16\t\$0`,`I64Const\t\$50`,`I64Store8\t\$2`
4344
// mips64:`MOVV\t\$48`,`MOVV\t\$49`,`MOVV\t\$50`
4445
bsink = []byte("012")
@@ -48,6 +49,7 @@ func ConstantLoad() {
4849
// amd64:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(`
4950
// 386:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(`
5051
// arm64:`MOVD\t\$858927408`,`MOVD\t\$13620`
52+
// loong64:`MOVV\t\$858927408`,`MOVV\t\$13620`
5153
// wasm:`I64Const\t\$858927408`,`I64Store32\t\$0`,`I64Const\t\$13620`,`I64Store16\t\$4`
5254
bsink = []byte("012345")
5355

@@ -56,19 +58,23 @@ func ConstantLoad() {
5658
// amd64:`MOVQ\t\$3978425819141910832`,`MOVQ\t\$7306073769690871863`
5759
// 386:`MOVL\t\$858927408, \(`,`DUFFCOPY`
5860
// arm64:`MOVD\t\$3978425819141910832`,`MOVD\t\$7306073769690871863`,`MOVD\t\$15`
61+
// loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$7306073769690871863`,`MOVV\t\$15`
5962
// wasm:`I64Const\t\$3978425819141910832`,`I64Store\t\$0`,`I64Const\t\$7306073769690871863`,`I64Store\t\$7`
6063
bsink = []byte("0123456789abcde")
6164

6265
// 56 = 0x38
6366
// amd64:`MOVQ\t\$3978425819141910832`,`MOVB\t\$56`
67+
// loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$56`
6468
bsink = []byte("012345678")
6569

6670
// 14648 = 0x3938
6771
// amd64:`MOVQ\t\$3978425819141910832`,`MOVW\t\$14648`
72+
// loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$14648`
6873
bsink = []byte("0123456789")
6974

7075
// 1650538808 = 0x62613938
7176
// amd64:`MOVQ\t\$3978425819141910832`,`MOVL\t\$1650538808`
77+
// loong64:`MOVV\t\$3978425819141910832`,`MOVV\t\$1650538808`
7278
bsink = []byte("0123456789ab")
7379
}
7480

0 commit comments

Comments
 (0)