From patchwork Tue Jan 8 13:55:33 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Greenhalgh X-Patchwork-Id: 210389 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id C50B82C009B for ; Wed, 9 Jan 2013 00:56:07 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1358258168; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type: Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:Sender:Delivered-To; bh=8JE1M679PFKkq6mooNAz Z/kq/jE=; b=qUdfA6vfg68vj1rGKfsvJ8LIlOgqLaYmbjITz99saUDquWhFcbUl 5psxKutix4Z9pFU3xY52c4PnJu2LmhdeWEhWV6mePFw6SOHgTOHF8HjyZhA0rF+k diixw/M3WSfuvgfEElEm63p1UKScOf+oKuFn/xX2CS1fZxnm1B/GPAA= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:From:To:Cc:Subject:Date:Message-Id:MIME-Version:X-MC-Unique:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=y7ZNrTnQ1D4EDvVD7BBWfA8aNfiVbB2V8EFlcrF8QRUkkL2zVN6u230s0FCjcm PQgo92FgPzbQIbAmnZOOqQMFK//Eaobf39vwGO9O3Bd3zUyk4LEQY6f9tMgg6+Nf axJ5pLlinyLKbO4ISha1KZD17QThtbIkvAZrPzByxZD/c=; Received: (qmail 6560 invoked by alias); 8 Jan 2013 13:55:54 -0000 Received: (qmail 6546 invoked by uid 22791); 8 Jan 2013 13:55:51 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, RCVD_IN_DNSWL_LOW, TW_VS X-Spam-Check-By: sourceware.org Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 08 Jan 2013 13:55:47 +0000 Received: from cam-owa2.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Tue, 08 Jan 2013 13:55:45 +0000 Received: from e106375-lin.cambridge.arm.com ([10.1.255.212]) by cam-owa2.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 8 Jan 2013 13:55:43 +0000 From: James Greenhalgh To: gcc-patches@gcc.gnu.org Cc: marcus.shawcroft@arm.com Subject: [AARCH64] Fix support for vectorization over sqrt (), sqrtf (). Date: Tue, 8 Jan 2013 13:55:33 +0000 Message-Id: <1357653333-29428-1-git-send-email-james.greenhalgh@arm.com> MIME-Version: 1.0 X-MC-Unique: 113010813554503601 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, This patch fixes the support for vectorizing sqrt and sqrtf function calls on AArch64. While the standard name was implemented previously, the glue in aarch64_builtin_vectorized_function was not. We also fix the initialisation of vectors in the gcc.target/aarch64/vsqrt.c testcase such that they are more big-endian-safe. This patch regresses clean on aarch64-none-elf. Applying this patch gives: FAIL->PASS: gcc.dg/vect/no-math-errno-slp-32.c scan-tree-dump vect "pattern recognized" FAIL->PASS: gcc.dg/vect/no-math-errno-vect-pow-1.c scan-tree-dump vect "pattern recognized" Is this OK to commit? Thanks, James Greenhalgh --- gcc/ 2013-01-08 James Greenhalgh * config/aarch64/aarch64-builtins.c (aarch64_builtin_vectorized_function): Handle sqrt, sqrtf. gcc/testsuite/ 2013-01-08 James Greenhalgh * gcc.target/aarch64/vsqrt.c (test_square_root_v2sf): Use endian-safe float pool loading. (test_square_root_v4sf): Likewise. (test_square_root_v2df): Likewise. * lib/target-supports.exp (check_effective_target_vect_call_sqrtf): Add AArch64. diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index a683afd..f54e9f4 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -1271,6 +1271,9 @@ aarch64_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in) case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: return AARCH64_FIND_FRINT_VARIANT (frinti); + case BUILT_IN_SQRT: + case BUILT_IN_SQRTF: + return AARCH64_FIND_FRINT_VARIANT (sqrt); #undef AARCH64_CHECK_BUILTIN_MODE #define AARCH64_CHECK_BUILTIN_MODE(C, N) \ (out_mode == N##Imode && out_n == C \ diff --git a/gcc/testsuite/gcc.target/aarch64/vsqrt.c b/gcc/testsuite/gcc.target/aarch64/vsqrt.c index b59535a..5b777b2 100644 --- a/gcc/testsuite/gcc.target/aarch64/vsqrt.c +++ b/gcc/testsuite/gcc.target/aarch64/vsqrt.c @@ -11,9 +11,11 @@ extern void abort (void); void test_square_root_v2sf () { - float32x2_t val = {4.0f, 9.0f}; + const float32_t pool[] = {4.0f, 9.0f}; + float32x2_t val; float32x2_t res; + val = vld1_f32 (pool); res = vsqrt_f32 (val); if (vget_lane_f32 (res, 0) != 2.0f) @@ -25,9 +27,11 @@ test_square_root_v2sf () void test_square_root_v4sf () { - float32x4_t val = {4.0f, 9.0f, 16.0f, 25.0f}; + const float32_t pool[] = {4.0f, 9.0f, 16.0f, 25.0f}; + float32x4_t val; float32x4_t res; + val = vld1q_f32 (pool); res = vsqrtq_f32 (val); if (vgetq_lane_f32 (res, 0) != 2.0f) @@ -43,9 +47,11 @@ test_square_root_v4sf () void test_square_root_v2df () { - float64x2_t val = {4.0, 9.0}; + const float64_t pool[] = {4.0, 9.0}; + float64x2_t val; float64x2_t res; + val = vld1q_f64 (pool); res = vsqrtq_f64 (val); if (vgetq_lane_f64 (res, 0) != 2.0) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index a3828cb..a6d766e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3952,7 +3952,8 @@ proc check_effective_target_vect_call_sqrtf { } { verbose "check_effective_target_vect_call_sqrtf: using cached result" 2 } else { set et_vect_call_sqrtf_saved 0 - if { [istarget i?86-*-*] + if { [istarget aarch64*-*-*] + || [istarget i?86-*-*] || [istarget x86_64-*-*] || ([istarget powerpc*-*-*] && [check_vsx_hw_available]) } { set et_vect_call_sqrtf_saved 1