Skip to content

Commit 6438658

Browse files
andreybokhankocherrymui
authored andcommitted
cmd/compile: Fix SSA building bug for CAS atomics on ARM64
Fixes #67229 Change-Id: I39f1255d38d2b2083753e17f0f5acf520e6167d5 Reviewed-on: https://go-review.googlesource.com/c/go/+/583995 Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: Shu-Chun Weng <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 1a349fc commit 6438658

File tree

1 file changed

+13
-13
lines changed
  • src/cmd/compile/internal/ssagen

1 file changed

+13
-13
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4392,7 +4392,7 @@ func InitTables() {
43924392

43934393
type atomicOpEmitter func(s *state, n *ir.CallExpr, args []*ssa.Value, op ssa.Op, typ types.Kind)
43944394

4395-
makeAtomicGuardedIntrinsicARM64 := func(op0, op1 ssa.Op, typ, rtyp types.Kind, emit atomicOpEmitter) intrinsicBuilder {
4395+
makeAtomicGuardedIntrinsicARM64 := func(op0, op1 ssa.Op, typ types.Kind, emit atomicOpEmitter) intrinsicBuilder {
43964396

43974397
return func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
43984398
if buildcfg.GOARM64.LSE {
@@ -4424,10 +4424,10 @@ func InitTables() {
44244424
// Merge results.
44254425
s.startBlock(bEnd)
44264426
}
4427-
if rtyp == types.TNIL {
4427+
if typ == types.TNIL {
44284428
return nil
44294429
} else {
4430-
return s.variable(n, types.Types[rtyp])
4430+
return s.variable(n, types.Types[typ])
44314431
}
44324432
}
44334433
}
@@ -4438,10 +4438,10 @@ func InitTables() {
44384438
s.vars[n] = s.newValue1(ssa.OpSelect0, types.Types[typ], v)
44394439
}
44404440
addF("internal/runtime/atomic", "Xchg",
4441-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange32, ssa.OpAtomicExchange32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
4441+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange32, ssa.OpAtomicExchange32Variant, types.TUINT32, atomicXchgXaddEmitterARM64),
44424442
sys.ARM64)
44434443
addF("internal/runtime/atomic", "Xchg64",
4444-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange64, ssa.OpAtomicExchange64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
4444+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicExchange64, ssa.OpAtomicExchange64Variant, types.TUINT64, atomicXchgXaddEmitterARM64),
44454445
sys.ARM64)
44464446

44474447
addF("internal/runtime/atomic", "Xadd",
@@ -4460,10 +4460,10 @@ func InitTables() {
44604460
sys.AMD64, sys.Loong64, sys.MIPS64, sys.PPC64, sys.RISCV64, sys.S390X)
44614461

44624462
addF("internal/runtime/atomic", "Xadd",
4463-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd32, ssa.OpAtomicAdd32Variant, types.TUINT32, types.TUINT32, atomicXchgXaddEmitterARM64),
4463+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd32, ssa.OpAtomicAdd32Variant, types.TUINT32, atomicXchgXaddEmitterARM64),
44644464
sys.ARM64)
44654465
addF("internal/runtime/atomic", "Xadd64",
4466-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd64, ssa.OpAtomicAdd64Variant, types.TUINT64, types.TUINT64, atomicXchgXaddEmitterARM64),
4466+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAdd64, ssa.OpAtomicAdd64Variant, types.TUINT64, atomicXchgXaddEmitterARM64),
44674467
sys.ARM64)
44684468

44694469
addF("internal/runtime/atomic", "Cas",
@@ -4495,10 +4495,10 @@ func InitTables() {
44954495
}
44964496

44974497
addF("internal/runtime/atomic", "Cas",
4498-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap32, ssa.OpAtomicCompareAndSwap32Variant, types.TUINT32, types.TBOOL, atomicCasEmitterARM64),
4498+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap32, ssa.OpAtomicCompareAndSwap32Variant, types.TBOOL, atomicCasEmitterARM64),
44994499
sys.ARM64)
45004500
addF("internal/runtime/atomic", "Cas64",
4501-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap64, ssa.OpAtomicCompareAndSwap64Variant, types.TUINT64, types.TBOOL, atomicCasEmitterARM64),
4501+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicCompareAndSwap64, ssa.OpAtomicCompareAndSwap64Variant, types.TBOOL, atomicCasEmitterARM64),
45024502
sys.ARM64)
45034503

45044504
addF("internal/runtime/atomic", "And8",
@@ -4531,16 +4531,16 @@ func InitTables() {
45314531
}
45324532

45334533
addF("internal/runtime/atomic", "And8",
4534-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd8, ssa.OpAtomicAnd8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
4534+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd8, ssa.OpAtomicAnd8Variant, types.TNIL, atomicAndOrEmitterARM64),
45354535
sys.ARM64)
45364536
addF("internal/runtime/atomic", "And",
4537-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
4537+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicAnd32, ssa.OpAtomicAnd32Variant, types.TNIL, atomicAndOrEmitterARM64),
45384538
sys.ARM64)
45394539
addF("internal/runtime/atomic", "Or8",
4540-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr8, ssa.OpAtomicOr8Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
4540+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr8, ssa.OpAtomicOr8Variant, types.TNIL, atomicAndOrEmitterARM64),
45414541
sys.ARM64)
45424542
addF("internal/runtime/atomic", "Or",
4543-
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TNIL, types.TNIL, atomicAndOrEmitterARM64),
4543+
makeAtomicGuardedIntrinsicARM64(ssa.OpAtomicOr32, ssa.OpAtomicOr32Variant, types.TNIL, atomicAndOrEmitterARM64),
45444544
sys.ARM64)
45454545

45464546
// Aliases for atomic load operations

0 commit comments

Comments
 (0)