From patchwork Mon Jul 30 11:43:00 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ramana Radhakrishnan X-Patchwork-Id: 174001 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 887552C0087 for ; Mon, 30 Jul 2012 21:43:19 +1000 (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=1344253399; h=Comment: DomainKey-Signature:Received:Received:Received:Received: MIME-Version:Received:Received:Date:Message-ID:Subject:From:To: Cc:Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:Sender:Delivered-To; bh=FgXDRH8 VcTgiIwPmgD9vmhTfJRA=; b=dX0GqPtc1JfW1Ha1GJj87tQhOwx2fnTyM6aShE2 wUYH8dl70R4fTNkgONjaJONyjf8FxRu4mecithSj+XSr/PVsyNxvhgY5OfPU+tKz 3Auw29XvJ36JJRW7zWtRa+pQO75gHsQ2UOhEn5XJ7JtCdsyF509qWqgILlJ9hEoH h59I= 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:X-Google-DKIM-Signature:MIME-Version:Received:Received:Date:Message-ID:Subject:From:To:Cc:Content-Type:X-Gm-Message-State:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=LD+xuee3IrgWNWNN023HJMfpRFeLWqhh6QNJ1ai2Jao5NcGr4Wudfy8MgNu00Z gUY7Nnvi4ZLrA80CLDFMRo5c88ugj9hsO3U9Oo/Q9mOxd7H5Yvo7v9Wkk02Wk4MK yWEdLVF7JtCsmD/m42zuA4ZjufpLuOkIgg7QFzOO3HIEU=; Received: (qmail 5936 invoked by alias); 30 Jul 2012 11:43:15 -0000 Received: (qmail 5926 invoked by uid 22791); 30 Jul 2012 11:43:14 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, RCVD_IN_DNSWL_LOW, RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-vc0-f175.google.com (HELO mail-vc0-f175.google.com) (209.85.220.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 30 Jul 2012 11:43:01 +0000 Received: by vcbfy27 with SMTP id fy27so4640518vcb.20 for ; Mon, 30 Jul 2012 04:43:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type :x-gm-message-state; bh=vd9b6vUuYS/9CEMPcVn7l/kWq/iNZIP3HbLwLdB/59I=; b=M9h3C6KlYKolTrU8jLNEhTAdXsb0KZ59cFvfLbEDwZ9cqLElvwu8q5g44dDC7ZyCST AC9iNslCVAssUk65+VT/eXe2gURqBKMFpP/nj1gNNv+p4eHppwrAV9nSx3aGJkbtUx+I RB28rDk1jVMs/PHdwxmSoFYgisl12UibgUCVOQKpaVF18TI7uUwNaeVj5d3TSA3HhG2U HDxReVtWJoBTlAzDMDwmN3ldKESjncu2pFyXT7IiGEykuyTKBEjMGJkyrf7K/wL4IAmb QgPWLIIZR5xJFWDfyZQ18/ryZ31NTlNX914UhfCJG6UqnYRZXqgWxzV4sJ92yLN75cHD XKhw== MIME-Version: 1.0 Received: by 10.52.95.203 with SMTP id dm11mr9371059vdb.70.1343648580795; Mon, 30 Jul 2012 04:43:00 -0700 (PDT) Received: by 10.58.210.194 with HTTP; Mon, 30 Jul 2012 04:43:00 -0700 (PDT) Date: Mon, 30 Jul 2012 12:43:00 +0100 Message-ID: Subject: [Patch ARM 1/6] Canonicalize neon_vaba and neon_vabal patterns. From: Ramana Radhakrishnan To: gcc-patches@gcc.gnu.org Cc: Patch Tracking , Richard Earnshaw X-Gm-Message-State: ALoCoQkoAMRbtA8+ysuvsWkk85SVupAWYhw/Xa8lOSjsjYjfKMqJX82BWHZl9WJRherYxMWUWpGG 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 > Patch 1 fixes up the vaba and vabal patterns to use a canonical RTL > form with the first operand to the plus being the more complex one. This patch canonicalizes the instruction patterns for the vaba and vabal intrinsics so that the more complex operand to plus is the first operand. This prevents needless splitting in combine. For reference, this was found by the new test in gcc.target/neon/vaba*.c and gcc.target/neon/vabal*.c from patch #4. Ok ? regards, Ramana 2012-07-27 Ramana Radhakrishnan * config/arm/neon.md (neon_vaba): Change to define_expand. (neon_vabal): Likewise. (neon_vaba_internal): New internal pattern. (neon_vabal_internal): New internal pattern. --- gcc/config/arm/neon.md | 61 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 46 insertions(+), 15 deletions(-) + "TARGET_NEON" + "vabal.%T3%#\t%q0, %P1, %P2" [(set_attr "neon_type" "neon_vaba")] ) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 7142c98..1ffbb7d 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -2335,29 +2335,60 @@ [(set_attr "neon_type" "neon_int_5")] ) -(define_insn "neon_vaba" +(define_expand "neon_vaba" + [(match_operand:VDQIW 0 "s_register_operand" "") + (match_operand:VDQIW 1 "s_register_operand" "") + (match_operand:VDQIW 2 "s_register_operand" "") + (match_operand:VDQIW 3 "s_register_operand" "") + (match_operand:SI 4 "immediate_operand" "")] + "TARGET_NEON" + "{ + emit_insn (gen_neon_vaba_internal (operands[0], operands[2], + operands[3], operands[4], + operands[1])); + DONE; + }" +) + +(define_insn "neon_vaba_internal" [(set (match_operand:VDQIW 0 "s_register_operand" "=w") - (plus:VDQIW (match_operand:VDQIW 1 "s_register_operand" "0") - (unspec:VDQIW [(match_operand:VDQIW 2 "s_register_operand" "w") - (match_operand:VDQIW 3 "s_register_operand" "w") - (match_operand:SI 4 "immediate_operand" "i")] - UNSPEC_VABD)))] + (plus:VDQIW (unspec:VDQIW + [(match_operand:VDQIW 1 "s_register_operand" "w") + (match_operand:VDQIW 2 "s_register_operand" "w") + (match_operand:SI 3 "immediate_operand" "i")] UNSPEC_VABD) + (match_operand:VDQIW 4 "s_register_operand" "0")))] "TARGET_NEON" - "vaba.%T4%#\t%0, %2, %3" + "vaba.%T3%#\t%0, %1, %2" [(set (attr "neon_type") (if_then_else (match_test "") (const_string "neon_vaba") (const_string "neon_vaba_qqq")))] ) -(define_insn "neon_vabal" +(define_expand "neon_vabal" + [(match_operand: 0 "s_register_operand" "") + (match_operand: 1 "s_register_operand" "") + (match_operand:VW 2 "s_register_operand" "") + (match_operand:VW 3 "s_register_operand" "") + (match_operand:SI 4 "immediate_operand" "")] + "TARGET_NEON" + "{ + emit_insn (gen_neon_vabal_internal (operands[0], operands[2], + operands[3], operands[4], + operands[1])); + DONE; + }" +) + +(define_insn "neon_vabal_internal" [(set (match_operand: 0 "s_register_operand" "=w") - (plus: (match_operand: 1 "s_register_operand" "0") - (unspec: [(match_operand:VW 2 "s_register_operand" "w") - (match_operand:VW 3 "s_register_operand" "w") - (match_operand:SI 4 "immediate_operand" "i")] - UNSPEC_VABDL)))] - "TARGET_NEON" - "vabal.%T4%#\t%q0, %P2, %P3" + (plus: (unspec: + [(match_operand:VW 1 "s_register_operand" "w") + (match_operand:VW 2 "s_register_operand" "w") + (match_operand:SI 3 "immediate_operand" "i")] + UNSPEC_VABDL) + (match_operand: 4 "s_register_operand" "0")))]