From: fanzha02 Date: Mon, 11 Mar 2019 03:51:06 +0000 (+0000) Subject: cmd/compile: add handling for new floating-point comparisons flags X-Git-Tag: go1.13beta1~1090 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a85afef27726b5870e02e50f8e210e0f16f89981;p=gostls13.git cmd/compile: add handling for new floating-point comparisons flags The CL 164718 adds new condition flags for floating-point comparisons in arm64 backend, but dose not add the handling in rewrite.go for corresponding Ops, which causes issue 30679. And this CL fixes this issue. Fixes #30679 Change-Id: I8acc749f78227c3e9e74fa7938f05fb442fb62c6 Reviewed-on: https://go-review.googlesource.com/c/go/+/166579 Reviewed-by: Cherry Zhang Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot --- 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 +}