diff options
author | Austin Clements <austin@google.com> | 2019-10-29 00:16:28 -0400 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2019-10-29 13:48:29 +0000 |
commit | ec10e6f364dddef88223eb9ddda1ee900b1551cb (patch) | |
tree | fcb0ee857c9d8101e1890829f6c898655a2fc382 /src/cmd/compile/internal/ssa/rewriteMIPS.go | |
parent | 28a15e3df34258f4f6c1de319fa30a81356ee92c (diff) | |
download | go-ec10e6f364dddef88223eb9ddda1ee900b1551cb.tar.gz go-ec10e6f364dddef88223eb9ddda1ee900b1551cb.zip |
cmd/compile: fix missing lowering of atomic {Load,Store}8
CL 203284 added a compiler intrinsics from atomic Load8 and Store8 on
several architectures, but missed the lowering on MIPS. This CL fixes
that.
Updates #10958, #24543.
Change-Id: I82e88971554fe8c33ad2bf195a633c44b9ac4cf7
Reviewed-on: https://go-review.googlesource.com/c/go/+/203977
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewriteMIPS.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/rewriteMIPS.go | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/src/cmd/compile/internal/ssa/rewriteMIPS.go b/src/cmd/compile/internal/ssa/rewriteMIPS.go index 72e596517f..d17be4422b 100644 --- a/src/cmd/compile/internal/ssa/rewriteMIPS.go +++ b/src/cmd/compile/internal/ssa/rewriteMIPS.go @@ -41,12 +41,16 @@ func rewriteValueMIPS(v *Value) bool { return rewriteValueMIPS_OpAtomicExchange32_0(v) case OpAtomicLoad32: return rewriteValueMIPS_OpAtomicLoad32_0(v) + case OpAtomicLoad8: + return rewriteValueMIPS_OpAtomicLoad8_0(v) case OpAtomicLoadPtr: return rewriteValueMIPS_OpAtomicLoadPtr_0(v) case OpAtomicOr8: return rewriteValueMIPS_OpAtomicOr8_0(v) case OpAtomicStore32: return rewriteValueMIPS_OpAtomicStore32_0(v) + case OpAtomicStore8: + return rewriteValueMIPS_OpAtomicStore8_0(v) case OpAtomicStorePtrNoWB: return rewriteValueMIPS_OpAtomicStorePtrNoWB_0(v) case OpAvg32u: @@ -245,8 +249,8 @@ func rewriteValueMIPS(v *Value) bool { return rewriteValueMIPS_OpMIPSCMOVZzero_0(v) case OpMIPSLoweredAtomicAdd: return rewriteValueMIPS_OpMIPSLoweredAtomicAdd_0(v) - case OpMIPSLoweredAtomicStore: - return rewriteValueMIPS_OpMIPSLoweredAtomicStore_0(v) + case OpMIPSLoweredAtomicStore32: + return rewriteValueMIPS_OpMIPSLoweredAtomicStore32_0(v) case OpMIPSMOVBUload: return rewriteValueMIPS_OpMIPSMOVBUload_0(v) case OpMIPSMOVBUreg: @@ -826,11 +830,23 @@ func rewriteValueMIPS_OpAtomicExchange32_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicLoad32_0(v *Value) bool { // match: (AtomicLoad32 ptr mem) - // result: (LoweredAtomicLoad ptr mem) + // result: (LoweredAtomicLoad32 ptr mem) for { mem := v.Args[1] ptr := v.Args[0] - v.reset(OpMIPSLoweredAtomicLoad) + v.reset(OpMIPSLoweredAtomicLoad32) + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} +func rewriteValueMIPS_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // result: (LoweredAtomicLoad8 ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpMIPSLoweredAtomicLoad8) v.AddArg(ptr) v.AddArg(mem) return true @@ -838,11 +854,11 @@ func rewriteValueMIPS_OpAtomicLoad32_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicLoadPtr_0(v *Value) bool { // match: (AtomicLoadPtr ptr mem) - // result: (LoweredAtomicLoad ptr mem) + // result: (LoweredAtomicLoad32 ptr mem) for { mem := v.Args[1] ptr := v.Args[0] - v.reset(OpMIPSLoweredAtomicLoad) + v.reset(OpMIPSLoweredAtomicLoad32) v.AddArg(ptr) v.AddArg(mem) return true @@ -923,12 +939,26 @@ func rewriteValueMIPS_OpAtomicOr8_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicStore32_0(v *Value) bool { // match: (AtomicStore32 ptr val mem) - // result: (LoweredAtomicStore ptr val mem) + // result: (LoweredAtomicStore32 ptr val mem) + for { + mem := v.Args[2] + ptr := v.Args[0] + val := v.Args[1] + v.reset(OpMIPSLoweredAtomicStore32) + v.AddArg(ptr) + v.AddArg(val) + v.AddArg(mem) + return true + } +} +func rewriteValueMIPS_OpAtomicStore8_0(v *Value) bool { + // match: (AtomicStore8 ptr val mem) + // result: (LoweredAtomicStore8 ptr val mem) for { mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - v.reset(OpMIPSLoweredAtomicStore) + v.reset(OpMIPSLoweredAtomicStore8) v.AddArg(ptr) v.AddArg(val) v.AddArg(mem) @@ -937,12 +967,12 @@ func rewriteValueMIPS_OpAtomicStore32_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicStorePtrNoWB_0(v *Value) bool { // match: (AtomicStorePtrNoWB ptr val mem) - // result: (LoweredAtomicStore ptr val mem) + // result: (LoweredAtomicStore32 ptr val mem) for { mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - v.reset(OpMIPSLoweredAtomicStore) + v.reset(OpMIPSLoweredAtomicStore32) v.AddArg(ptr) v.AddArg(val) v.AddArg(mem) @@ -3000,8 +3030,8 @@ func rewriteValueMIPS_OpMIPSLoweredAtomicAdd_0(v *Value) bool { } return false } -func rewriteValueMIPS_OpMIPSLoweredAtomicStore_0(v *Value) bool { - // match: (LoweredAtomicStore ptr (MOVWconst [0]) mem) +func rewriteValueMIPS_OpMIPSLoweredAtomicStore32_0(v *Value) bool { + // match: (LoweredAtomicStore32 ptr (MOVWconst [0]) mem) // result: (LoweredAtomicStorezero ptr mem) for { mem := v.Args[2] |