1
0
mirror of https://github.com/golang/go synced 2024-11-23 14:40:02 -07:00

cmd/compile: log large copies on riscv64

Log large copies in the riscv64 compiler.

This was missed in 47ade08141, resulting in
the new test added to cmd/compile/internal/logopt failing on riscv64.

Change-Id: I6f763e86f42834148e911d16928f9fbabcfa4290
Reviewed-on: https://go-review.googlesource.com/c/go/+/227804
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Joel Sing 2020-04-13 01:39:45 +10:00
parent 1eb66be1b9
commit fb16f4b82e
2 changed files with 6 additions and 1 deletions

View File

@ -404,7 +404,7 @@
(Move [8] dst src mem) -> (MOVDstore dst (MOVDload src mem) mem)
// Generic move uses a loop
(Move [s] {t} dst src mem) ->
(Move [s] {t} dst src mem) && (s <= 16 || logLargeCopy(v, s)) ->
(LoweredMove [t.(*types.Type).Alignment()]
dst
src

View File

@ -1894,6 +1894,7 @@ func rewriteValueRISCV64_OpMove(v *Value) bool {
return true
}
// match: (Move [s] {t} dst src mem)
// cond: (s <= 16 || logLargeCopy(v, s))
// result: (LoweredMove [t.(*types.Type).Alignment()] dst src (ADDI <src.Type> [s-moveSize(t.(*types.Type).Alignment(), config)] src) mem)
for {
s := v.AuxInt
@ -1901,6 +1902,9 @@ func rewriteValueRISCV64_OpMove(v *Value) bool {
dst := v_0
src := v_1
mem := v_2
if !(s <= 16 || logLargeCopy(v, s)) {
break
}
v.reset(OpRISCV64LoweredMove)
v.AuxInt = t.(*types.Type).Alignment()
v0 := b.NewValue0(v.Pos, OpRISCV64ADDI, src.Type)
@ -1909,6 +1913,7 @@ func rewriteValueRISCV64_OpMove(v *Value) bool {
v.AddArg4(dst, src, v0, mem)
return true
}
return false
}
func rewriteValueRISCV64_OpMul16(v *Value) bool {
v_1 := v.Args[1]