From patchwork Mon Jun 25 20:39:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 167236 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 9996FB6FB7 for ; Tue, 26 Jun 2012 06:41:04 +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=1341261664; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:From:To:Subject:Date:Message-Id:In-Reply-To:References: Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:Sender:Delivered-To; bh=yDjgJQs0Qp0gEjApfVRJ K44r2SE=; b=AHwx3gPVrnhMRATNaMxFEvVmn4TSXRGdq902wMD1UMJKEq9S7zGt ZdrIjdYzGaAYc/MUYkicfWnEn6ocOy83TqbHiicYEh8a3Up6xaD7qRwjD4z1reSc TzTeCoUePzqbb3Awag7fpGjjZUEgxCqflrbTrnORV1/n8PTNuoPT7Js= 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:Received:From:To:Subject:Date:Message-Id:In-Reply-To:References:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=JR6rpDe4su/9+NuSW9MDxMV/klkUTYdMZPO145F4S1PM9H4g40zNXkgrXSQ+uh yQ7QTVwxo72IT6IVQO9/9bTmmLH9KX5Qy4Z7w1MI+ACIIDNKkRWMsSXalFY1RHND KovitGF04IG7ewe88JsRNPKvq4BwrzvEZj5AS2tKnhPrE=; Received: (qmail 20716 invoked by alias); 25 Jun 2012 20:40:33 -0000 Received: (qmail 20578 invoked by uid 22791); 25 Jun 2012 20:40:31 -0000 X-SWARE-Spam-Status: No, hits=-3.7 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, KHOP_RCVD_TRUST, KHOP_THREADED, RCVD_IN_DNSWL_LOW, RCVD_IN_HOSTKARMA_YE, SARE_HTML_INV_TAG X-Spam-Check-By: sourceware.org Received: from mail-pz0-f47.google.com (HELO mail-pz0-f47.google.com) (209.85.210.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 25 Jun 2012 20:40:11 +0000 Received: by dalh21 with SMTP id h21so5843258dal.20 for ; Mon, 25 Jun 2012 13:40:11 -0700 (PDT) Received: by 10.68.241.8 with SMTP id we8mr43555473pbc.130.1340656811469; Mon, 25 Jun 2012 13:40:11 -0700 (PDT) Received: from pebble.twiddle.home.comcast.net (c-98-248-101-18.hsd1.ca.comcast.net. [98.248.101.18]) by mx.google.com with ESMTPS id rs4sm9524396pbc.0.2012.06.25.13.40.09 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 25 Jun 2012 13:40:10 -0700 (PDT) From: Richard Henderson To: gcc-patches@gcc.gnu.org Subject: [PATCH 4/4] i386: Delete sse sdot_prod; add sdot_prodv4si for xop Date: Mon, 25 Jun 2012 13:39:58 -0700 Message-Id: <1340656798-18033-5-git-send-email-rth@redhat.com> In-Reply-To: <1340656798-18033-1-git-send-email-rth@redhat.com> References: <1340656798-18033-1-git-send-email-rth@redhat.com> 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 Now that we support mult_even/odd hooks, the vectorizer can generate the exact same code for plain sse dot_prod by itself, as well as other reductions other than plus. --- gcc/ChangeLog | 6 +++++ gcc/config/i386/sse.md | 62 +++++++----------------------------------------- 2 files changed, 14 insertions(+), 54 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f63f523..4dc93af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2012-06-25 Richard Henderson + * config/i386/sse.md (sse2_sse4_1): Remove code attr. + (dot_prodv4si, dot_prodv8si): Remove + (sdot_prodv4si): New; handle only XOP. + +2012-06-25 Richard Henderson + * config/i386/i386-builtin-types.def (V4UDI, V8USI): New. (V2UDI_FUNC_V4USI_V4USI): New. (V4UDI_FUNC_V8USI_V8USI): New. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 45d3a9c..4b51415 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -5737,64 +5737,18 @@ DONE; }) -(define_code_attr sse2_sse4_1 - [(zero_extend "sse2") (sign_extend "sse4_1")]) - -(define_expand "dot_prodv4si" +;; Normally we use widen_mul_even/odd, but combine can't quite get it all +;; back together when madd is available. +(define_expand "sdot_prodv4si" [(match_operand:V2DI 0 "register_operand") - (any_extend:V2DI (match_operand:V4SI 1 "register_operand")) + (match_operand:V4SI 1 "register_operand") (match_operand:V4SI 2 "register_operand") (match_operand:V2DI 3 "register_operand")] - " == ZERO_EXTEND ? TARGET_SSE2 : TARGET_SSE4_1" -{ - rtx t1, t2, t3, t4; - - t1 = gen_reg_rtx (V2DImode); - emit_insn (gen__mulv2siv2di3 (t1, operands[1], operands[2])); - emit_insn (gen_addv2di3 (t1, t1, operands[3])); - - t2 = gen_reg_rtx (V4SImode); - t3 = gen_reg_rtx (V4SImode); - emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t2), - gen_lowpart (V1TImode, operands[1]), - GEN_INT (32))); - emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t3), - gen_lowpart (V1TImode, operands[2]), - GEN_INT (32))); - - t4 = gen_reg_rtx (V2DImode); - emit_insn (gen__mulv2siv2di3 (t4, t2, t3)); - - emit_insn (gen_addv2di3 (operands[0], t1, t4)); - DONE; -}) - -(define_expand "dot_prodv8si" - [(match_operand:V4DI 0 "register_operand") - (any_extend:V4DI (match_operand:V8SI 1 "register_operand")) - (match_operand:V8SI 2 "register_operand") - (match_operand:V4DI 3 "register_operand")] - "TARGET_AVX2" + "TARGET_XOP" { - rtx t1, t2, t3, t4; - - t1 = gen_reg_rtx (V4DImode); - emit_insn (gen_avx2_mulv4siv4di3 (t1, operands[1], operands[2])); - emit_insn (gen_addv4di3 (t1, t1, operands[3])); - - t2 = gen_reg_rtx (V8SImode); - t3 = gen_reg_rtx (V8SImode); - emit_insn (gen_avx2_lshrv2ti3 (gen_lowpart (V2TImode, t2), - gen_lowpart (V2TImode, operands[1]), - GEN_INT (32))); - emit_insn (gen_avx2_lshrv2ti3 (gen_lowpart (V2TImode, t3), - gen_lowpart (V2TImode, operands[2]), - GEN_INT (32))); - - t4 = gen_reg_rtx (V4DImode); - emit_insn (gen_avx2_mulv4siv4di3 (t4, t2, t3)); - - emit_insn (gen_addv4di3 (operands[0], t1, t4)); + rtx t = gen_reg_rtx (V2DImode); + emit_insn (gen_xop_pmacsdqh (t, operands[1], operands[2], operands[3])); + emit_insn (gen_xop_pmacsdql (operands[0], operands[1], operands[2], t)); DONE; })