From patchwork Mon Jul 30 11:53:07 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ramana Radhakrishnan X-Patchwork-Id: 10357 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 8AAA923E56 for ; Mon, 30 Jul 2012 11:53:10 +0000 (UTC) Received: from mail-yx0-f180.google.com (mail-yx0-f180.google.com [209.85.213.180]) by fiordland.canonical.com (Postfix) with ESMTP id 41DF4A18146 for ; Mon, 30 Jul 2012 11:53:10 +0000 (UTC) Received: by yenq6 with SMTP id q6so4580147yen.11 for ; Mon, 30 Jul 2012 04:53:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf :mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-gm-message-state; bh=7/pXvPMoLNwJS4J1O4DTuh6yWgx2MiDY4VCV5SRxEWM=; b=gABMc2iOTdyOeOYZ6bYqymT5wwyQ/EdgjhTpL9nCbFqw8ItzFf6ww4qP4MXt1BP9h1 yNH7U7uJEa/AyIt5xwTHctBjy+QZC1gP2k2cm54DpSQz47iQh7p4Jk62V8bB3jcRChcm jCCTmW2h2XFCCETUSpCEYeJbb5jR/b1tNVnDrR7jyTv2uqveIiHsv82cvGzCVcLPX+c0 BrTxa8nILPFinm4ql3RvwT7Zr8SpjUqfsAo150/JYSnWTEjKRcAH8vf4vViLWMUFJKhN ZnoXyYk5Lj7ywdlU2qcdO7bhk1GZw/scY3AptK6rCJE7v+gAPs2e5mgrJpW1tbWaaiZG VsXQ== Received: by 10.50.219.226 with SMTP id pr2mr8026664igc.51.1343649189216; Mon, 30 Jul 2012 04:53:09 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.50.87.40 with SMTP id u8csp84187igz; Mon, 30 Jul 2012 04:53:08 -0700 (PDT) Received: by 10.52.97.8 with SMTP id dw8mr9494117vdb.31.1343649188473; Mon, 30 Jul 2012 04:53:08 -0700 (PDT) Received: from mail-vc0-f178.google.com (mail-vc0-f178.google.com [209.85.220.178]) by mx.google.com with ESMTPS id l5si2868384vci.141.2012.07.30.04.53.08 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 30 Jul 2012 04:53:08 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.220.178 is neither permitted nor denied by best guess record for domain of ramana.radhakrishnan@linaro.org) client-ip=209.85.220.178; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.220.178 is neither permitted nor denied by best guess record for domain of ramana.radhakrishnan@linaro.org) smtp.mail=ramana.radhakrishnan@linaro.org Received: by vcbf13 with SMTP id f13so5518386vcb.37 for ; Mon, 30 Jul 2012 04:53:08 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.141.203 with SMTP id n11mr10580273vcu.74.1343649188116; Mon, 30 Jul 2012 04:53:08 -0700 (PDT) Received: by 10.58.210.194 with HTTP; Mon, 30 Jul 2012 04:53:07 -0700 (PDT) In-Reply-To: References: Date: Mon, 30 Jul 2012 12:53:07 +0100 Message-ID: Subject: Re: [Patch 0/6] Improve Neon intrinsics a bit From: Ramana Radhakrishnan To: gcc-patches@gcc.gnu.org Cc: Patch Tracking , Richard Earnshaw X-Gm-Message-State: ALoCoQnzYGAVxVFItZ92O+S1C2Oz13FXu4+nmpv1ZrRL7GeEXgk/5i88FMuFf0nRnQDDr+b58m24 On 30 July 2012 12:41, Ramana Radhakrishnan wrote: > Patch 5 - Bug fix that fixes up a set of ICEs because we were always > generating vec_duplicate of DImode values into other DImode values. > Possibly needs backporting to older versions. The recent changes to the vld1_dup intrinsics ended up generating (set reg:DI (vec_duplicate:DI (mem:DI ))). Instead of folding these out it was simpler just to fix this up in the backend. Fixes up the failures in vld1_dups/u64 in the new intrinsics tests. No need for a new test. Ramana 2012-07-27 Ramana Radhakrishnan * config/arm/neon.md (neon_vld1_dupdi): Split out from the other vld1_dup patterns. (neon_vld1_dup VDX): Change to iterate on VD iterator and simplify. (neon_vld1_dup VQ): Cleanup. --- gcc/config/arm/neon.md | 32 ++++++++++++++++---------------- 1 files changed, 16 insertions(+), 16 deletions(-) ) (define_insn_and_split "neon_vld1_dupv2di" diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 7434625..843c907 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -4349,29 +4349,29 @@ ) (define_insn "neon_vld1_dup" - [(set (match_operand:VDX 0 "s_register_operand" "=w") - (vec_duplicate:VDX (match_operand: 1 "neon_struct_operand" "Um")))] + [(set (match_operand:VD 0 "s_register_operand" "=w") + (vec_duplicate:VD (match_operand: 1 "neon_struct_operand" "Um")))] "TARGET_NEON" -{ - if (GET_MODE_NUNITS (mode) > 1) - return "vld1.\t{%P0[]}, %A1"; - else - return "vld1.\t%h0, %A1"; -} - [(set (attr "neon_type") - (if_then_else (gt (const_string "") (const_string "1")) - (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes") - (const_string "neon_vld1_1_2_regs")))] + "vld1.\t{%P0[]}, %A1"; + [(set_attr "neon_type" "neon_vld1_1_2_regs")] +) + +;; This has been split from the others because vld1_dupdi is the same +;; as a DImode move and it is meaningless to vec_duplicate a DImode value into +;; a DImode value. +(define_expand "neon_vld1_dupdi" + [(set (match_operand:DI 0 "s_register_operand" "") + (match_operand:DI 1 "neon_struct_operand" ""))] + "TARGET_NEON" + "" ) (define_insn "neon_vld1_dup" [(set (match_operand:VQ 0 "s_register_operand" "=w") (vec_duplicate:VQ (match_operand: 1 "neon_struct_operand" "Um")))] "TARGET_NEON" -{ - return "vld1.\t{%e0[], %f0[]}, %A1"; -} - [(set_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes")] + "vld1.\t{%e0[], %f0[]}, %A1" + [(set_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes")]