From 19285efaed7b08535e1b3ba921f584ed8bde6e49 Mon Sep 17 00:00:00 2001 From: Todd Neal Date: Wed, 2 Sep 2015 21:11:32 -0500 Subject: [PATCH] [dev.ssa] cmd/compile: fix complex128 complex128 was being treated as a complex64 Fixes math/cmplx. Change-Id: I2996915b4cb6b94198d41cf08a30bd8531b9fec5 Reviewed-on: https://go-review.googlesource.com/14206 Reviewed-by: Keith Randall --- src/cmd/compile/internal/gc/ssa.go | 4 +-- .../compile/internal/gc/testdata/fp_ssa.go | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 61e17ee68b..77c822787d 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -1139,8 +1139,8 @@ func (s *state) expr(n *Node) *ssa.Value { { pt := Types[TFLOAT64] return s.newValue2(ssa.OpComplexMake, n.Type, - s.constFloat32(pt, mpgetflt(r)), - s.constFloat32(pt, mpgetflt(i))) + s.constFloat64(pt, mpgetflt(r)), + s.constFloat64(pt, mpgetflt(i))) } default: s.Fatalf("bad float size %d", n.Type.Size()) diff --git a/src/cmd/compile/internal/gc/testdata/fp_ssa.go b/src/cmd/compile/internal/gc/testdata/fp_ssa.go index ee3163abb3..9bd545f878 100644 --- a/src/cmd/compile/internal/gc/testdata/fp_ssa.go +++ b/src/cmd/compile/internal/gc/testdata/fp_ssa.go @@ -1467,42 +1467,69 @@ func expectCx64(s string, x, expected complex64) int { } func cx128sum_ssa(a, b complex128) complex128 { + switch { // prevent inlining + } return a + b } func cx128diff_ssa(a, b complex128) complex128 { + switch { // prevent inlining + } return a - b } func cx128prod_ssa(a, b complex128) complex128 { + switch { // prevent inlining + } return a * b } func cx128quot_ssa(a, b complex128) complex128 { + switch { // prevent inlining + } return a / b } func cx128neg_ssa(a complex128) complex128 { + switch { // prevent inlining + } return -a } +func cx128cnst_ssa(a complex128) complex128 { + switch { // prevent inlining + } + b := 2 + 3i + return a * b +} + func cx64sum_ssa(a, b complex64) complex64 { + switch { // prevent inlining + } return a + b } func cx64diff_ssa(a, b complex64) complex64 { + switch { // prevent inlining + } return a - b } func cx64prod_ssa(a, b complex64) complex64 { + switch { // prevent inlining + } return a * b } func cx64quot_ssa(a, b complex64) complex64 { + switch { // prevent inlining + } return a / b } func cx64neg_ssa(a complex64) complex64 { + switch { // prevent inlining + } return -a } @@ -1515,12 +1542,14 @@ func complexTest128() int { prod := cx128prod_ssa(b, a) quot := cx128quot_ssa(b, a) neg := cx128neg_ssa(a) + cnst := cx128cnst_ssa(a) fails += expectCx128("sum", sum, 4+8i) fails += expectCx128("diff", diff, 2+4i) fails += expectCx128("prod", prod, -9+12i) fails += expectCx128("quot", quot, 3+0i) fails += expectCx128("neg", neg, -1-2i) + fails += expectCx128("cnst", cnst, -4+7i) return fails }