diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index dbbb33c171..8165852263 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -730,6 +730,14 @@ func arm64Negate(op Op) Op { return OpARM64NotEqual case OpARM64NotEqual: return OpARM64Equal + case OpARM64LessThanF: + return OpARM64GreaterEqualF + case OpARM64GreaterThanF: + return OpARM64LessEqualF + case OpARM64LessEqualF: + return OpARM64GreaterThanF + case OpARM64GreaterEqualF: + return OpARM64LessThanF default: panic("unreachable") } @@ -762,6 +770,14 @@ func arm64Invert(op Op) Op { return OpARM64LessEqualU case OpARM64Equal, OpARM64NotEqual: return op + case OpARM64LessThanF: + return OpARM64GreaterThanF + case OpARM64GreaterThanF: + return OpARM64LessThanF + case OpARM64LessEqualF: + return OpARM64GreaterEqualF + case OpARM64GreaterEqualF: + return OpARM64LessEqualF default: panic("unreachable") } diff --git a/test/fixedbugs/issue30679.go b/test/fixedbugs/issue30679.go new file mode 100644 index 0000000000..4d0df18f45 --- /dev/null +++ b/test/fixedbugs/issue30679.go @@ -0,0 +1,18 @@ +// compile + +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + var f float64 + var p, q *float64 + + p = &f + if *q > 0 { + p = q + } + _ = *p +}