From patchwork Thu Aug 31 08:20:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hongyu Wang X-Patchwork-Id: 137248 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c792:0:b0:3f2:4152:657d with SMTP id b18csp98373vqu; Thu, 31 Aug 2023 01:28:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGsTnGcDZrFm0mAMIj574rSH/845AKUnLQKQrD7usXv1ELw40whcfuQSWmli9anA9654ew8 X-Received: by 2002:a05:6512:402a:b0:500:8fcb:e0c9 with SMTP id br42-20020a056512402a00b005008fcbe0c9mr4005316lfb.69.1693470520165; Thu, 31 Aug 2023 01:28:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693470520; cv=none; d=google.com; s=arc-20160816; b=sQetJFkxk9+3uoklS5/nyGiyAwGmieiLjlK6VaUxIcu6M+K0X38YJc0VqoigoZeBiH MMlGRllQ8zOP2Ydec54JtSGKoUpQddTywVjZQX+6WyN4iRThF8tWEdNhrcLk4jAf8cL8 LkHY+c2NbxgfIxe0gUmc4p+HN/vC9diBLB7jJ64GIyX++b6Iu3U+cOxIyLU1iuY0dIla Va9h1bTHpVpWXQW2LxauhiKQYSg0DGrZmp1RHyiYrWwSX0HZgm5Chw12W7QmCFLxFMCk XCboCDT+eFS55Umx+zGCfV87SGVKwQEqGePg6uzAVlNXd2568dnC0l2EerDgi1Rv4stH t48g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=0Bs4NMpzG47PwbA+Ewv++BNXxspakFeW6CAGjh7UxSI=; fh=t6VkRRFhh90/YyDrY4l675lM3BlOpES7S7srbNWOHSE=; b=Lq8olLtK6F4Ej6soFRHaP8jwjom+PpXOgNZaQCTrPqn05ZZyul8gjbWmip2Zz55TFp CAqqVCmA1wVLWEVJMxe68cFrH2LwW3IKbxsbG6JXpRt6536rzuq7F51yIFsEV2IxVew4 lf9nIqJp+WlhXUam3jMhFP+3jjJzCV6k3lXI2hYeB1u7hCfghOuu6+7KV9p8L7MI8Df3 O1A9iHz6Iv0y+WU6fHL2pHS4a6mmIVOnJgY0pkeC0UepD51DLEH2Zl1yb64HpTJO0xtU pwJev0nHPuFOHnSPP2qc96if/2KoQXJjFS2hirSDcaKnSDjDW7aX7n5Ggc8sMjRjDrV+ zTcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vw1qfq9M; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id d15-20020aa7c1cf000000b0052a1dcd8416si711623edp.491.2023.08.31.01.28.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Aug 2023 01:28:40 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vw1qfq9M; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 00F2F388202F for ; Thu, 31 Aug 2023 08:24:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 00F2F388202F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1693470260; bh=0Bs4NMpzG47PwbA+Ewv++BNXxspakFeW6CAGjh7UxSI=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=vw1qfq9MlBL20qEnI9SzO4WYuTJPamAO0hjp0TtfDybVuFFJPJYOPOi80J6oYUtri vC2t0Ze2ZtOz+A/QpHImKKmKIwTN+brAFb69ASQn/PTRMaeIjLBU3KnCn972ro3EWF 7GmMJbEnM98MJCIc1gkiJdPjLjZBRf78yyo8/7BA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by sourceware.org (Postfix) with ESMTPS id 3624F385C41F for ; Thu, 31 Aug 2023 08:21:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3624F385C41F X-IronPort-AV: E=McAfee;i="6600,9927,10818"; a="462236012" X-IronPort-AV: E=Sophos;i="6.02,216,1688454000"; d="scan'208";a="462236012" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2023 01:21:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10818"; a="862939182" X-IronPort-AV: E=Sophos;i="6.02,216,1688454000"; d="scan'208";a="862939182" Received: from shvmail03.sh.intel.com ([10.239.245.20]) by orsmga004.jf.intel.com with ESMTP; 31 Aug 2023 01:20:32 -0700 Received: from shliclel4217.sh.intel.com (shliclel4217.sh.intel.com [10.239.240.127]) by shvmail03.sh.intel.com (Postfix) with ESMTP id A29851005134; Thu, 31 Aug 2023 16:20:24 +0800 (CST) To: gcc-patches@gcc.gnu.org Subject: [PATCH 12/13] [APX_EGPR] Handle legacy insns that only support GPR16 (4/5) Date: Thu, 31 Aug 2023 16:20:23 +0800 Message-Id: <20230831082024.314097-13-hongyu.wang@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230831082024.314097-1-hongyu.wang@intel.com> References: <20230831082024.314097-1-hongyu.wang@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, SPF_HELO_NONE, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Hongyu Wang via Gcc-patches From: Hongyu Wang Reply-To: Hongyu Wang Cc: jakub@redhat.com, hongtao.liu@intel.com, hubicka@ucw.cz Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775732543869382132 X-GMAIL-MSGID: 1775732543869382132 From: Kong Lingling The APX enabled hardware should also be AVX10 enabled, thus for map2/3 insns with evex counterpart, we assume auto promotion to EGPR under APX_F if the insn uses GPR32. So for below insns, we disabled EGPR usage for their sse mnenomics, while allowing egpr generation of their v prefixed mnemonics. insn list: 1. pabsb/pabsw/pabsd 2. pextrb/pextrw/pextrd/pextrq 3. pinsrb/pinsrd/pinsrq 4. pshufb 5. extractps/insertps 6. pmaddubsw 7. pmulhrsw 8. packusdw 9. palignr 10. movntdqa 11. mpsadbw 12. pmuldq/pmulld 13. pmaxsb/pmaxsd, pminsb/pminsd pmaxud/pmaxuw, pminud/pminuw 14. (pmovsxbw/pmovsxbd/pmovsxbq, pmovsxwd/pmovsxwq, pmovsxdq pmovzxbw/pmovzxbd/pmovzxbq, pmovzxwd/pmovzxwq, pmovzxdq) 15. aesdec/aesdeclast, aesenc/aesenclast 16. pclmulqdq 17. gf2p8affineqb/gf2p8affineinvqb/gf2p8mulb gcc/ChangeLog: * config/i386/i386.md (*movhi_internal): Split out non-gpr supported pextrw with mem constraint to avx/noavx alternatives, set Bt and attr gpr32 0 to the noavx alternative. (*mov_internal): Likewise. * config/i386/mmx.md (mmx_pshufbv8qi3): Change "r/m/Bm" to "h/Bt/BT" and set_attr gpr32 0 for noavx alternative. (mmx_pshufbv4qi3): Likewise. (*mmx_pinsrd): Likewise. (*mmx_pinsrb): Likewise. (*pinsrb): Likewise. (mmx_pshufbv8qi3): Likewise. (mmx_pshufbv4qi3): Likewise. (@sse4_1_insertps_): Likewise. (*mmx_pextrw): Split altrenatives and map non-EGPR constraints, attr_gpr32 and attr_isa to noavx mnemonics. (*movv2qi_internal): Likewise. (*pextrw): Likewise. (*mmx_pextrb): Likewise. (*mmx_pextrb_zext): Likewise. (*pextrb): Likewise. (*pextrb_zext): Likewise. (vec_extractv2si_1): Likewise. (vec_extractv2si_1_zext): Likewise. * config/i386/sse.md: (vi128_h_r): New mode attr for pinsr{bw}/pextr{bw} with reg operand. (*abs2): Split altrenatives and %v in mnemonics, map non-EGPR constraints, gpr32 and isa attrs to noavx mnemonics. (*vec_extract): Likewise. (*vec_extract): Likewise for HFBF pattern. (*vec_extract_zext): Likewise. (*vec_extractv4si_1): Likewise. (*vec_extractv4si_zext): Likewise. (*vec_extractv2di_1): Likewise. (*vec_concatv2si_sse4_1): Likewise. (_pinsr): Likewise. (vec_concatv2di): Likewise. (*sse4_1_v2qiv2di2_1): Likewise. (ssse3_avx2>_pshufb3): Change "r/m/Bm" to "h/Bt/BT" and set_attr gpr32 0 for noavx alternative, split %v for avx/noavx alternatives if necessary. (*vec_concatv2sf_sse4_1): Likewise. (*sse4_1_extractps): Likewise. (vec_set_0): Likewise for VI4F_128. (*vec_setv4sf_sse4_1): Likewise. (@sse4_1_insertps): Likewise. (ssse3_pmaddubsw128): Likewise. (*_pmulhrsw3): Likewise. (_packusdw): Likewise. (_palignr): Likewise. (_movntdqa): Likewise. (_mpsadbw): Likewise. (*sse4_1_mulv2siv2di3): Likewise. (*_mul3): Likewise. (*sse4_1_3): Likewise. (*v8hi3): Likewise. (*v16qi3): Likewise. (*sse4_1_v8qiv8hi2_1): Likewise. (*sse4_1_zero_extendv8qiv8hi2_3): Likewise. (*sse4_1_zero_extendv8qiv8hi2_4): Likewise. (*sse4_1_v4qiv4si2_1): Likewise. (*sse4_1_v4hiv4si2_1): Likewise. (*sse4_1_zero_extendv4hiv4si2_3): Likewise. (*sse4_1_zero_extendv4hiv4si2_4): Likewise. (*sse4_1_v2hiv2di2_1): Likewise. (*sse4_1_v2siv2di2_1): Likewise. (*sse4_1_zero_extendv2siv2di2_3): Likewise. (*sse4_1_zero_extendv2siv2di2_4): Likewise. (aesdec): Likewise. (aesdeclast): Likewise. (aesenc): Likewise. (aesenclast): Likewise. (pclmulqdq): Likewise. (vgf2p8affineinvqb_): Likewise. (vgf2p8affineqb_): Likewise. (vgf2p8mulb_): Likewise. --- gcc/config/i386/i386.md | 50 ++++--- gcc/config/i386/mmx.md | 159 ++++++++++++-------- gcc/config/i386/sse.md | 315 ++++++++++++++++++++++++++-------------- 3 files changed, 339 insertions(+), 185 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 4c305e72389..8ec249b268d 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -2868,9 +2868,9 @@ (define_peephole2 (define_insn "*movhi_internal" [(set (match_operand:HI 0 "nonimmediate_operand" - "=r,r,r,m ,*k,*k ,r ,m ,*k ,?r,?*v,*v,*v,*v,m") + "=r,r,r,m ,*k,*k ,r ,m ,*k ,?r,?*v,*v,*v,*v,Bt,m") (match_operand:HI 1 "general_operand" - "r ,n,m,rn,r ,*km,*k,*k,CBC,*v,r ,C ,*v,m ,*v"))] + "r ,n,m,rn,r ,*km,*k,*k,CBC,*v,r ,C ,*v,m ,*x,*v"))] "!(MEM_P (operands[0]) && MEM_P (operands[1])) && ix86_hardreg_mov_ok (operands[0], operands[1])" { @@ -2904,8 +2904,10 @@ (define_insn "*movhi_internal" if (SSE_REG_P (operands[0])) return "%vpinsrw\t{$0, %1, %d0|%d0, %1, 0}"; + else if (!TARGET_AVX) + return "pextrw\t{$0, %1, %0|%0, %1, 0}"; else - return "%vpextrw\t{$0, %1, %0|%0, %1, 0}"; + return "vpextrw\t{$0, %1, %0|%0, %1, 0}"; case TYPE_MSKLOG: if (operands[1] == const0_rtx) @@ -2925,15 +2927,21 @@ (define_insn "*movhi_internal" (cond [(eq_attr "alternative" "9,10,11,12,13") (const_string "sse2") (eq_attr "alternative" "14") - (const_string "sse4") + (const_string "sse4_noavx") + (eq_attr "alternative" "15") + (const_string "avx") ] (const_string "*"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "14") + (const_string "0") + (const_string "1"))) (set (attr "type") (cond [(eq_attr "alternative" "4,5,6,7") (const_string "mskmov") (eq_attr "alternative" "8") (const_string "msklog") - (eq_attr "alternative" "13,14") + (eq_attr "alternative" "13,14,15") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "ssemov") (const_string "sselog1")) @@ -2958,7 +2966,7 @@ (define_insn "*movhi_internal" (set (attr "prefix") (cond [(eq_attr "alternative" "4,5,6,7,8") (const_string "vex") - (eq_attr "alternative" "9,10,11,12,13,14") + (eq_attr "alternative" "9,10,11,12,13,14,15") (const_string "maybe_evex") ] (const_string "orig"))) @@ -2967,7 +2975,7 @@ (define_insn "*movhi_internal" (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") (const_string "SI")) - (eq_attr "alternative" "13,14") + (eq_attr "alternative" "13,14,15") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") (const_string "TI")) @@ -4320,9 +4328,9 @@ (define_mode_attr hfbfconstf (define_insn "*mov_internal" [(set (match_operand:HFBF 0 "nonimmediate_operand" - "=?r,?r,?r,?m,v,v,?r,m,?v,v") + "=?r,?r,?r,?m,v,v,?r,Bt,m,?v,v") (match_operand:HFBF 1 "general_operand" - "r ,F ,m ,r,C,v, v,v,r ,m"))] + "r ,F ,m ,r,C,v, v,v,v,r ,m"))] "!(MEM_P (operands[0]) && MEM_P (operands[1])) && (lra_in_progress || reload_completed @@ -4347,8 +4355,10 @@ (define_insn "*mov_internal" if (SSE_REG_P (operands[0])) return "%vpinsrw\t{$0, %1, %d0|%d0, %1, 0}"; + else if (!TARGET_AVX) + return "pextrw\t{$0, %1, %0|%0, %1, 0}"; else - return "%vpextrw\t{$0, %1, %0|%0, %1, 0}"; + return "vpextrw\t{$0, %1, %0|%0, %1, 0}"; default: if (get_attr_mode (insn) == MODE_SI) @@ -4358,18 +4368,24 @@ (define_insn "*mov_internal" } } [(set (attr "isa") - (cond [(eq_attr "alternative" "4,5,6,8,9") + (cond [(eq_attr "alternative" "4,5,6,9,10") (const_string "sse2") (eq_attr "alternative" "7") - (const_string "sse4") + (const_string "sse4_noavx") + (eq_attr "alternative" "8") + (const_string "avx") ] (const_string "*"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "8") + (const_string "0") + (const_string "1"))) (set (attr "type") (cond [(eq_attr "alternative" "4") (const_string "sselog1") - (eq_attr "alternative" "5,6,8") + (eq_attr "alternative" "5,6,9") (const_string "ssemov") - (eq_attr "alternative" "7,9") + (eq_attr "alternative" "7,8,10") (if_then_else (match_test ("TARGET_AVX512FP16")) (const_string "ssemov") @@ -4389,19 +4405,19 @@ (define_insn "*mov_internal" ] (const_string "imov"))) (set (attr "prefix") - (cond [(eq_attr "alternative" "4,5,6,7,8,9") + (cond [(eq_attr "alternative" "4,5,6,7,8,9,10") (const_string "maybe_vex") ] (const_string "orig"))) (set (attr "mode") (cond [(eq_attr "alternative" "4") (const_string "V4SF") - (eq_attr "alternative" "6,8") + (eq_attr "alternative" "6,9") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") (const_string "SI")) - (eq_attr "alternative" "7,9") + (eq_attr "alternative" "7,8,10") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index ef578222945..63803c89f2b 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -418,9 +418,9 @@ (define_expand "movv2qi" (define_insn "*movv2qi_internal" [(set (match_operand:V2QI 0 "nonimmediate_operand" - "=r,r,r,m ,v,v,v,m,r,v") + "=r,r,r,m ,v,v,v,Bt,m,r,v") (match_operand:V2QI 1 "general_operand" - "r ,C,m,rC,C,v,m,v,v,r"))] + "r ,C,m,rC,C,v,m,x,v,v,r"))] "!(MEM_P (operands[0]) && MEM_P (operands[1]))" { switch (get_attr_type (insn)) @@ -442,8 +442,10 @@ (define_insn "*movv2qi_internal" if (SSE_REG_P (operands[0])) return "%vpinsrw\t{$0, %1, %d0|%d0, %1, 0}"; + else if (!TARGET_AVX) + return "pextrw\t{$0, %1, %0|%0, %1, 0}"; else - return "%vpextrw\t{$0, %1, %0|%0, %1, 0}"; + return "vpextrw\t{$0, %1, %0|%0, %1, 0}"; case TYPE_SSEMOV: return ix86_output_ssemov (insn, operands); @@ -453,20 +455,26 @@ (define_insn "*movv2qi_internal" } } [(set (attr "isa") - (cond [(eq_attr "alternative" "6,8,9") + (cond [(eq_attr "alternative" "6,9,10") (const_string "sse2") (eq_attr "alternative" "7") - (const_string "sse4") + (const_string "sse4_noavx") + (eq_attr "alternative" "8") + (const_string "avx") ] (const_string "*"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "7") + (const_string "0") + (const_string "1"))) (set (attr "type") - (cond [(eq_attr "alternative" "6,7") + (cond [(eq_attr "alternative" "6,7,8") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "ssemov") (const_string "sselog1")) (eq_attr "alternative" "4") (const_string "sselog1") - (eq_attr "alternative" "5,8,9") + (eq_attr "alternative" "5,9,10") (const_string "ssemov") (match_test "optimize_function_for_size_p (cfun)") (const_string "imov") @@ -483,16 +491,16 @@ (define_insn "*movv2qi_internal" ] (const_string "imov"))) (set (attr "prefix") - (cond [(eq_attr "alternative" "4,5,6,7,8,9") + (cond [(eq_attr "alternative" "4,5,6,7,8,9,10") (const_string "maybe_evex") ] (const_string "orig"))) (set (attr "mode") - (cond [(eq_attr "alternative" "6,7") + (cond [(eq_attr "alternative" "6,7,8") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") (const_string "TI")) - (eq_attr "alternative" "8,9") + (eq_attr "alternative" "9,10") (if_then_else (match_test "TARGET_AVX512FP16") (const_string "HI") (const_string "SI")) @@ -526,9 +534,9 @@ (define_insn "*movv2qi_internal" ] (const_string "HI"))) (set (attr "preferred_for_speed") - (cond [(eq_attr "alternative" "8") + (cond [(eq_attr "alternative" "9") (symbol_ref "TARGET_INTER_UNIT_MOVES_FROM_VEC") - (eq_attr "alternative" "9") + (eq_attr "alternative" "10") (symbol_ref "TARGET_INTER_UNIT_MOVES_TO_VEC") ] (symbol_ref "true")))]) @@ -1167,7 +1175,7 @@ (define_expand "vcondv2sf" (define_insn "@sse4_1_insertps_" [(set (match_operand:V2FI 0 "register_operand" "=Yr,*x,v") (unspec:V2FI - [(match_operand:V2FI 2 "nonimmediate_operand" "Yrm,*xm,vm") + [(match_operand:V2FI 2 "nonimmediate_operand" "YrBt,*xBt,vm") (match_operand:V2FI 1 "register_operand" "0,0,v") (match_operand:SI 3 "const_0_to_255_operand")] UNSPEC_INSERTPS))] @@ -1193,6 +1201,7 @@ (define_insn "@sse4_1_insertps_" } } [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sselog") (set_attr "prefix_data16" "1,1,*") (set_attr "prefix_extra" "1") @@ -3952,7 +3961,7 @@ (define_insn "*mmx_pinsrd" [(set (match_operand:V2SI 0 "register_operand" "=x,Yv") (vec_merge:V2SI (vec_duplicate:V2SI - (match_operand:SI 2 "nonimmediate_operand" "rm,rm")) + (match_operand:SI 2 "nonimmediate_operand" "hBt,rm")) (match_operand:V2SI 1 "register_operand" "0,Yv") (match_operand:SI 3 "const_int_operand")))] "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE @@ -3971,6 +3980,7 @@ (define_insn "*mmx_pinsrd" } } [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "prefix_extra" "1") (set_attr "type" "sselog") (set_attr "length_immediate" "1") @@ -4031,7 +4041,7 @@ (define_insn "*mmx_pinsrb" [(set (match_operand:V8QI 0 "register_operand" "=x,YW") (vec_merge:V8QI (vec_duplicate:V8QI - (match_operand:QI 2 "nonimmediate_operand" "rm,rm")) + (match_operand:QI 2 "nonimmediate_operand" "hBt,rm")) (match_operand:V8QI 1 "register_operand" "0,YW") (match_operand:SI 3 "const_int_operand")))] "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE @@ -4057,28 +4067,31 @@ (define_insn "*mmx_pinsrb" } [(set_attr "isa" "noavx,avx") (set_attr "type" "sselog") + (set_attr "gpr32" "0,1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "orig,vex") (set_attr "mode" "TI")]) (define_insn "*mmx_pextrw" - [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,r,m") + [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,r,Bt,m") (vec_select:HI - (match_operand:V4HI 1 "register_operand" "y,YW,YW") + (match_operand:V4HI 1 "register_operand" "y,YW,YW,YW") (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))] "(TARGET_MMX || TARGET_MMX_WITH_SSE) && (TARGET_SSE || TARGET_3DNOW_A)" "@ pextrw\t{%2, %1, %k0|%k0, %1, %2} %vpextrw\t{%2, %1, %k0|%k0, %1, %2} - %vpextrw\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "*,sse2,sse4") - (set_attr "mmx_isa" "native,*,*") - (set_attr "type" "mmxcvt,sselog1,sselog1") + pextrw\t{%2, %1, %0|%0, %1, %2} + vpextrw\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "*,sse2,sse4_noavx,avx") + (set_attr "gpr32" "1,1,0,1") + (set_attr "mmx_isa" "native,*,*,*") + (set_attr "type" "mmxcvt,sselog1,sselog1,sselog1") (set_attr "length_immediate" "1") - (set_attr "prefix" "orig,maybe_vex,maybe_vex") - (set_attr "mode" "DI,TI,TI")]) + (set_attr "prefix" "orig,maybe_vex,maybe_vex,maybe_evex") + (set_attr "mode" "DI,TI,TI,TI")]) (define_insn "*mmx_pextrw_zext" [(set (match_operand:SWI48 0 "register_operand" "=r,r") @@ -4099,29 +4112,36 @@ (define_insn "*mmx_pextrw_zext" (set_attr "mode" "DI,TI")]) (define_insn "*mmx_pextrb" - [(set (match_operand:QI 0 "nonimmediate_operand" "=r,m") + [(set (match_operand:QI 0 "nonimmediate_operand" "=h,Bt,r,m") (vec_select:QI - (match_operand:V8QI 1 "register_operand" "YW,YW") + (match_operand:V8QI 1 "register_operand" "YW,YW,YW,YW") (parallel [(match_operand:SI 2 "const_0_to_7_operand")])))] "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE" "@ - %vpextrb\t{%2, %1, %k0|%k0, %1, %2} - %vpextrb\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "type" "sselog1") + pextrb\t{%2, %1, %k0|%k0, %1, %2} + pextrb\t{%2, %1, %0|%0, %1, %2} + vpextrb\t{%2, %1, %k0|%k0, %1, %2} + vpextrb\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "noavx,noavx,avx,avx") + (set_attr "gpr32" "1,0,1,1") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") (set_attr "mode" "TI")]) (define_insn "*mmx_pextrb_zext" - [(set (match_operand:SWI248 0 "register_operand" "=r") + [(set (match_operand:SWI248 0 "register_operand" "=h,r") (zero_extend:SWI248 (vec_select:QI - (match_operand:V8QI 1 "register_operand" "YW") + (match_operand:V8QI 1 "register_operand" "YW,YW") (parallel [(match_operand:SI 2 "const_0_to_7_operand")]))))] "TARGET_SSE4_1 && TARGET_MMX_WITH_SSE" - "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}" - [(set_attr "type" "sselog1") + "@ + pextrb\t{%2, %1, %k0|%k0, %1, %2} + vpextrb\t{%2, %1, %k0|%k0, %1, %2}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") @@ -4131,13 +4151,14 @@ (define_insn "mmx_pshufbv8qi3" [(set (match_operand:V8QI 0 "register_operand" "=x,Yw") (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "0,Yw") - (match_operand:V16QI 2 "vector_operand" "xBm,Ywm")] + (match_operand:V16QI 2 "vector_operand" "xBT,Ywm")] UNSPEC_PSHUFB))] "TARGET_SSSE3 && TARGET_MMX_WITH_SSE" "@ pshufb\t{%2, %0|%0, %2} vpshufb\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") @@ -4148,13 +4169,14 @@ (define_insn "mmx_pshufbv4qi3" [(set (match_operand:V4QI 0 "register_operand" "=x,Yw") (unspec:V4QI [(match_operand:V4QI 1 "register_operand" "0,Yw") - (match_operand:V16QI 2 "vector_operand" "xBm,Ywm")] + (match_operand:V16QI 2 "vector_operand" "xBT,Ywm")] UNSPEC_PSHUFB))] "TARGET_SSSE3" "@ pshufb\t{%2, %0|%0, %2} vpshufb\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") @@ -4414,29 +4436,31 @@ (define_split ;; Avoid combining registers from different units in a single alternative, ;; see comment above inline_secondary_memory_needed function in i386.cc (define_insn "*vec_extractv2si_1" - [(set (match_operand:SI 0 "nonimmediate_operand" "=y,rm,x,x,y,x,r") + [(set (match_operand:SI 0 "nonimmediate_operand" "=y,hBt,rm,x,x,y,x,r") (vec_select:SI - (match_operand:V2SI 1 "nonimmediate_operand" " 0,x ,x,0,o,o,o") + (match_operand:V2SI 1 "nonimmediate_operand" " 0,x, x ,x,0,o,o,o") (parallel [(const_int 1)])))] "(TARGET_MMX || TARGET_MMX_WITH_SSE) && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ punpckhdq\t%0, %0 - %vpextrd\t{$1, %1, %0|%0, %1, 1} + pextrd\t{$1, %1, %0|%0, %1, 1} + vpextrd\t{$1, %1, %0|%0, %1, 1} %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5} shufps\t{$0xe5, %0, %0|%0, %0, 0xe5} # # #" - [(set_attr "isa" "*,sse4,sse2,noavx,*,*,*") - (set_attr "mmx_isa" "native,*,*,*,native,*,*") - (set_attr "type" "mmxcvt,ssemov,sseshuf1,sseshuf1,mmxmov,ssemov,imov") + [(set_attr "isa" "*,sse4_noavx,avx,sse2,noavx,*,*,*") + (set_attr "gpr32" "1,0,1,1,1,1,1,1") + (set_attr "mmx_isa" "native,*,*,*,*,native,*,*") + (set_attr "type" "mmxcvt,ssemov,ssemov,sseshuf1,sseshuf1,mmxmov,ssemov,imov") (set (attr "length_immediate") - (if_then_else (eq_attr "alternative" "1,2,3") + (if_then_else (eq_attr "alternative" "1,2,3,4") (const_string "1") (const_string "*"))) - (set_attr "prefix" "orig,maybe_vex,maybe_vex,orig,orig,orig,orig") - (set_attr "mode" "DI,TI,TI,V4SF,SI,SI,SI")]) + (set_attr "prefix" "orig,orig,maybe_evex,maybe_vex,orig,orig,orig,orig") + (set_attr "mode" "DI,TI,TI,TI,V4SF,SI,SI,SI")]) (define_split [(set (match_operand:SI 0 "register_operand") @@ -4448,15 +4472,18 @@ (define_split "operands[1] = adjust_address (operands[1], SImode, 4);") (define_insn "*vec_extractv2si_1_zext" - [(set (match_operand:DI 0 "register_operand" "=r") + [(set (match_operand:DI 0 "register_operand" "=h,r") (zero_extend:DI (vec_select:SI - (match_operand:V2SI 1 "register_operand" "x") + (match_operand:V2SI 1 "register_operand" "x,x") (parallel [(const_int 1)]))))] "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_64BIT && TARGET_SSE4_1" - "%vpextrd\t{$1, %1, %k0|%k0, %1, 1}" - [(set_attr "type" "sselog1") + "@ + pextrd\t{$1, %1, %k0|%k0, %1, 1} + vpextrd\t{$1, %1, %k0|%k0, %1, 1}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") @@ -4606,7 +4633,7 @@ (define_insn "*pinsrb" [(set (match_operand:V4QI 0 "register_operand" "=x,YW") (vec_merge:V4QI (vec_duplicate:V4QI - (match_operand:QI 2 "nonimmediate_operand" "rm,rm")) + (match_operand:QI 2 "nonimmediate_operand" "hBt,rm")) (match_operand:V4QI 1 "register_operand" "0,YW") (match_operand:SI 3 "const_int_operand")))] "TARGET_SSE4_1 @@ -4631,6 +4658,7 @@ (define_insn "*pinsrb" } } [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sselog") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") @@ -4638,15 +4666,17 @@ (define_insn "*pinsrb" (set_attr "mode" "TI")]) (define_insn "*pextrw" - [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,m") + [(set (match_operand:HI 0 "register_sse4nonimm_operand" "=r,Bt,m") (vec_select:HI - (match_operand:V2HI 1 "register_operand" "YW,YW") + (match_operand:V2HI 1 "register_operand" "YW,YW,YW") (parallel [(match_operand:SI 2 "const_0_to_1_operand")])))] "TARGET_SSE2" "@ %vpextrw\t{%2, %1, %k0|%k0, %1, %2} - %vpextrw\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "*,sse4") + pextrw\t{%2, %1, %0|%0, %1, %2} + vpextrw\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "*,sse4_noavx,avx") + (set_attr "gpr32" "1,0,1") (set_attr "type" "sselog1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") @@ -4666,29 +4696,36 @@ (define_insn "*pextrw_zext" (set_attr "mode" "TI")]) (define_insn "*pextrb" - [(set (match_operand:QI 0 "nonimmediate_operand" "=r,m") + [(set (match_operand:QI 0 "nonimmediate_operand" "=h,Bt,r,m") (vec_select:QI - (match_operand:V4QI 1 "register_operand" "YW,YW") + (match_operand:V4QI 1 "register_operand" "YW,YW,YW,YW") (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))] "TARGET_SSE4_1" "@ - %vpextrb\t{%2, %1, %k0|%k0, %1, %2} - %vpextrb\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "type" "sselog1") + pextrb\t{%2, %1, %k0|%k0, %1, %2} + pextrb\t{%2, %1, %0|%0, %1, %2} + vpextrb\t{%2, %1, %k0|%k0, %1, %2} + vpextrb\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "noavx,noavx,avx,avx") + (set_attr "gpr32" "1,0,1,1") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") (set_attr "mode" "TI")]) (define_insn "*pextrb_zext" - [(set (match_operand:SWI248 0 "register_operand" "=r") + [(set (match_operand:SWI248 0 "register_operand" "=h,r") (zero_extend:SWI248 (vec_select:QI - (match_operand:V4QI 1 "register_operand" "YW") + (match_operand:V4QI 1 "register_operand" "YW,YW") (parallel [(match_operand:SI 2 "const_0_to_3_operand")]))))] "TARGET_SSE4_1" - "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}" - [(set_attr "type" "sselog1") + "@ + pextrb\t{%2, %1, %k0|%k0, %1, %2} + vpextrb\t{%2, %1, %k0|%k0, %1, %2}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 456713b991a..4913c34ed37 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -10840,7 +10840,7 @@ (define_insn "*vec_concatv2sf_sse4_1" (match_operand:SF 1 "nonimmediate_operand" " 0, 0,Yv, 0,0, v,m, 0 , m") (match_operand:SF 2 "nonimm_or_0_operand" - " Yr,*x,Yv, m,m, m,C,*ym, C")))] + " Yr,*x,Yv, Bt,Bt, m,C,*ym, C")))] "TARGET_SSE4_1 && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ unpcklps\t{%2, %0|%0, %2} @@ -10872,6 +10872,10 @@ (define_insn "*vec_concatv2sf_sse4_1" (if_then_else (eq_attr "alternative" "7,8") (const_string "native") (const_string "*"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "3,4") + (const_string "0") + (const_string "1"))) (set (attr "prefix_data16") (if_then_else (eq_attr "alternative" "3,4") (const_string "1") @@ -10963,7 +10967,7 @@ (define_insn "vec_set_0" (vec_merge:VI4F_128 (vec_duplicate:VI4F_128 (match_operand: 2 "general_operand" - " Yr,*x,v,m,r ,m,x,v,?rm,?rm,?rm,!x,?re,!*fF")) + " Yr,*x,v,m,r ,m,x,v,?hBt,?hBt,?rm,!x,?re,!*fF")) (match_operand:VI4F_128 1 "nonimm_or_0_operand" " C , C,C,C,C ,C,0,v,0 ,0 ,x ,0 ,0 ,0") (const_int 1)))] @@ -11003,6 +11007,10 @@ (define_insn "vec_set_0" (const_string "fmov") ] (const_string "ssemov"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "8,9") + (const_string "0") + (const_string "1"))) (set (attr "prefix_extra") (if_then_else (eq_attr "alternative" "8,9,10") (const_string "1") @@ -11175,7 +11183,7 @@ (define_insn "*vec_setv4sf_sse4_1" [(set (match_operand:V4SF 0 "register_operand" "=Yr,*x,v") (vec_merge:V4SF (vec_duplicate:V4SF - (match_operand:SF 2 "nonimmediate_operand" "Yrm,*xm,vm")) + (match_operand:SF 2 "nonimmediate_operand" "YrBt,*xBt,vm")) (match_operand:V4SF 1 "register_operand" "0,0,v") (match_operand:SI 3 "const_int_operand")))] "TARGET_SSE4_1 @@ -11196,6 +11204,7 @@ (define_insn "*vec_setv4sf_sse4_1" } [(set_attr "isa" "noavx,noavx,avx") (set_attr "type" "sselog") + (set_attr "gpr32" "0,0,1") (set_attr "prefix_data16" "1,1,*") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") @@ -11270,7 +11279,7 @@ (define_insn_and_split "*vec_setv2di_0_zero_extendsi_1" (define_insn "@sse4_1_insertps_" [(set (match_operand:VI4F_128 0 "register_operand" "=Yr,*x,v") (unspec:VI4F_128 - [(match_operand:VI4F_128 2 "nonimmediate_operand" "Yrm,*xm,vm") + [(match_operand:VI4F_128 2 "nonimmediate_operand" "YrBt,*xBt,vm") (match_operand:VI4F_128 1 "register_operand" "0,0,v") (match_operand:SI 3 "const_0_to_255_operand")] UNSPEC_INSERTPS))] @@ -11296,6 +11305,7 @@ (define_insn "@sse4_1_insertps_" } } [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sselog") (set_attr "prefix_data16" "1,1,*") (set_attr "prefix_extra" "1") @@ -11373,7 +11383,7 @@ (define_insn_and_split "*vec_extractv4sf_0" "operands[1] = gen_lowpart (SFmode, operands[1]);") (define_insn_and_split "*sse4_1_extractps" - [(set (match_operand:SF 0 "nonimmediate_operand" "=rm,rm,rm,Yv,Yv") + [(set (match_operand:SF 0 "nonimmediate_operand" "=hBt,hBt,rm,Yv,Yv") (vec_select:SF (match_operand:V4SF 1 "register_operand" "Yr,*x,v,0,v") (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))] @@ -11407,6 +11417,7 @@ (define_insn_and_split "*sse4_1_extractps" DONE; } [(set_attr "isa" "noavx,noavx,avx,noavx,avx") + (set_attr "gpr32" "0,0,1,1,1") (set_attr "type" "sselog,sselog,sselog,*,*") (set_attr "prefix_data16" "1,1,1,*,*") (set_attr "prefix_extra" "1,1,1,*,*") @@ -12271,9 +12282,9 @@ (define_insn_and_split "*vec_extract_0" "operands[1] = gen_lowpart (mode, operands[1]);") (define_insn "*vec_extract" - [(set (match_operand:HFBF 0 "register_sse4nonimm_operand" "=?r,m,x,v") + [(set (match_operand:HFBF 0 "register_sse4nonimm_operand" "=?r,Bt,m,x,v") (vec_select:HFBF - (match_operand: 1 "register_operand" "v,v,0,v") + (match_operand: 1 "register_operand" "v,x,v,0,v") (parallel [(match_operand:SI 2 "const_0_to_7_operand")])))] "TARGET_SSE2" @@ -12283,12 +12294,14 @@ (define_insn "*vec_extract" case 0: return "%vpextrw\t{%2, %1, %k0|%k0, %1, %2}"; case 1: - return "%vpextrw\t{%2, %1, %0|%0, %1, %2}"; - + return "pextrw\t{%2, %1, %0|%0, %1, %2}"; case 2: + return "vpextrw\t{%2, %1, %0|%0, %1, %2}"; + + case 3: operands[2] = GEN_INT (INTVAL (operands[2]) * 2); return "psrldq\t{%2, %0|%0, %2}"; - case 3: + case 4: operands[2] = GEN_INT (INTVAL (operands[2]) * 2); return "vpsrldq\t{%2, %1, %0|%0, %1, %2}"; @@ -12296,8 +12309,9 @@ (define_insn "*vec_extract" gcc_unreachable (); } } - [(set_attr "isa" "*,sse4,noavx,avx") - (set_attr "type" "sselog1,sselog1,sseishft1,sseishft1") + [(set_attr "isa" "*,sse4_noavx,avx,noavx,avx") + (set_attr "gpr32" "1,0,1,1,1") + (set_attr "type" "sselog1,sselog1,sselog1,sseishft1,sseishft1") (set_attr "prefix" "maybe_evex") (set_attr "mode" "TI")]) @@ -15659,7 +15673,7 @@ (define_insn "*sse4_1_mulv2siv2di3" (parallel [(const_int 0) (const_int 2)]))) (sign_extend:V2DI (vec_select:V2SI - (match_operand:V4SI 2 "vector_operand" "YrBm,*xBm,vm") + (match_operand:V4SI 2 "vector_operand" "YrBT,*xBT,vm") (parallel [(const_int 0) (const_int 2)])))))] "TARGET_SSE4_1 && && !(MEM_P (operands[1]) && MEM_P (operands[2]))" @@ -15668,6 +15682,7 @@ (define_insn "*sse4_1_mulv2siv2di3" pmuldq\t{%2, %0|%0, %2} vpmuldq\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sseimul") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,vex") @@ -15905,7 +15920,7 @@ (define_insn "*_mul3" [(set (match_operand:VI4_AVX512F 0 "register_operand" "=Yr,*x,v") (mult:VI4_AVX512F (match_operand:VI4_AVX512F 1 "bcst_vector_operand" "%0,0,v") - (match_operand:VI4_AVX512F 2 "bcst_vector_operand" "YrBm,*xBm,vmBr")))] + (match_operand:VI4_AVX512F 2 "bcst_vector_operand" "YrBT,*xBT,vmBr")))] "TARGET_SSE4_1 && ix86_binary_operator_ok (MULT, mode, operands) && " "@ @@ -15913,6 +15928,7 @@ (define_insn "*_mul3" pmulld\t{%2, %0|%0, %2} vpmulld\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sseimul") (set_attr "prefix_extra" "1") (set_attr "prefix" "") @@ -16717,7 +16733,7 @@ (define_insn "*sse4_1_3" [(set (match_operand:VI14_128 0 "register_operand" "=Yr,*x,") (smaxmin:VI14_128 (match_operand:VI14_128 1 "vector_operand" "%0,0,") - (match_operand:VI14_128 2 "vector_operand" "YrBm,*xBm,m")))] + (match_operand:VI14_128 2 "vector_operand" "YrBT,*xBT,m")))] "TARGET_SSE4_1 && && !(MEM_P (operands[1]) && MEM_P (operands[2]))" @@ -16728,6 +16744,7 @@ (define_insn "*sse4_1_3" [(set_attr "isa" "noavx,noavx,avx") (set_attr "type" "sseiadd") (set_attr "prefix_extra" "1") + (set_attr "gpr32" "0,0,1") (set_attr "prefix" "orig,orig,vex") (set_attr "mode" "TI")]) @@ -16735,13 +16752,14 @@ (define_insn "*v8hi3" [(set (match_operand:V8HI 0 "register_operand" "=x,Yw") (smaxmin:V8HI (match_operand:V8HI 1 "vector_operand" "%0,Yw") - (match_operand:V8HI 2 "vector_operand" "xBm,Ywm")))] + (match_operand:V8HI 2 "vector_operand" "xBT,Ywm")))] "TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ pw\t{%2, %0|%0, %2} vpw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") (set_attr "type" "sseiadd") + (set_attr "gpr32" "0,1") (set_attr "prefix" "orig,vex") (set_attr "mode" "TI")]) @@ -16809,6 +16827,7 @@ (define_insn "*sse4_1_3" vp\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,noavx,avx") (set_attr "type" "sseiadd") + (set_attr "gpr32" "0,0,1") (set_attr "prefix_extra" "1,1,*") (set_attr "prefix" "orig,orig,vex") (set_attr "mode" "TI")]) @@ -16817,12 +16836,13 @@ (define_insn "*v16qi3" [(set (match_operand:V16QI 0 "register_operand" "=x,Yw") (umaxmin:V16QI (match_operand:V16QI 1 "vector_operand" "%0,Yw") - (match_operand:V16QI 2 "vector_operand" "xBm,Ywm")))] + (match_operand:V16QI 2 "vector_operand" "xBT,Ywm")))] "TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ pb\t{%2, %0|%0, %2} vpb\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sseiadd") (set_attr "prefix" "orig,vex") (set_attr "mode" "TI")]) @@ -18813,7 +18833,7 @@ (define_insn "_pinsr" [(set (match_operand:PINSR_MODE 0 "register_operand" "=x,x,x,x,v,v,&x") (vec_merge:PINSR_MODE (vec_duplicate:PINSR_MODE - (match_operand: 2 "nonimmediate_operand" "r,m,r,m,r,m,x")) + (match_operand: 2 "nonimmediate_operand" "h,Bt,r,m,r,m,x")) (match_operand:PINSR_MODE 1 "register_operand" "0,0,x,x,v,v,x") (match_operand:SI 3 "const_int_operand")))] "TARGET_SSE2 @@ -18850,6 +18870,7 @@ (define_insn "_pinsr" } [(set_attr "isa" "noavx,noavx,avx,avx,,,avx2") (set_attr "type" "sselog") + (set_attr "gpr32" "0,0,1,1,1,1,1") (set (attr "prefix_rex") (if_then_else (and (not (match_test "TARGET_AVX")) @@ -20010,17 +20031,23 @@ (define_insn_and_split "*vec_extract_0_mem" operands[4] = gen_lowpart (mode, operands[2]); }) +(define_mode_attr vi128_h_r + [(V16QI "h") (V8HI "r")]) + (define_insn "*vec_extract" - [(set (match_operand: 0 "register_sse4nonimm_operand" "=r,m") + [(set (match_operand: 0 "register_sse4nonimm_operand" "=,r,Bt,m") (vec_select: - (match_operand:PEXTR_MODE12 1 "register_operand" "YW,YW") + (match_operand:PEXTR_MODE12 1 "register_operand" "YW,YW,YW,YW") (parallel [(match_operand:SI 2 "const_0_to__operand")])))] "TARGET_SSE2" "@ - %vpextr\t{%2, %1, %k0|%k0, %1, %2} - %vpextr\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "*,sse4") + pextr\t{%2, %1, %k0|%k0, %1, %2} + vpextr\t{%2, %1, %k0|%k0, %1, %2} + pextr\t{%2, %1, %0|%0, %1, %2} + vpextr\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "sse2_noavx,avx,sse4_noavx,avx") + (set_attr "gpr32" "1,1,0,1") (set_attr "type" "sselog1") (set (attr "prefix_extra") (if_then_else @@ -20028,20 +20055,23 @@ (define_insn "*vec_extract" (const_string "*") (const_string "1"))) (set_attr "length_immediate" "1") - (set_attr "prefix" "maybe_vex,maybe_vex") + (set_attr "prefix" "maybe_vex") (set_attr "mode" "TI")]) (define_insn "*vec_extract_zext" - [(set (match_operand:SWI48 0 "register_operand" "=r") + [(set (match_operand:SWI48 0 "register_operand" "=,r") (zero_extend:SWI48 (vec_select: - (match_operand:PEXTR_MODE12 1 "register_operand" "YW") + (match_operand:PEXTR_MODE12 1 "register_operand" "YW,YW") (parallel [(match_operand:SI 2 "const_0_to__operand")]))))] "TARGET_SSE2" - "%vpextr\t{%2, %1, %k0|%k0, %1, %2}" - [(set_attr "type" "sselog1") + "@ + pextr\t{%2, %1, %k0|%k0, %1, %2} + vpextr\t{%2, %1, %k0|%k0, %1, %2}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sselog1") (set (attr "prefix_extra") (if_then_else (eq (const_string "mode") (const_string "V8HImode")) @@ -20052,15 +20082,18 @@ (define_insn "*vec_extract_zext" (set_attr "mode" "TI")]) (define_insn "*vec_extractv16qi_zext" - [(set (match_operand:HI 0 "register_operand" "=r") + [(set (match_operand:HI 0 "register_operand" "=h,r") (zero_extend:HI (vec_select:QI - (match_operand:V16QI 1 "register_operand" "YW") + (match_operand:V16QI 1 "register_operand" "YW,YW") (parallel [(match_operand:SI 2 "const_0_to_15_operand")]))))] "TARGET_SSE4_1" - "%vpextrb\t{%2, %1, %k0|%k0, %1, %2}" - [(set_attr "type" "sselog1") + "@ + pextrb\t{%2, %1, %k0|%k0, %1, %2} + vpextrb\t{%2, %1, %k0|%k0, %1, %2}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "maybe_vex") @@ -20166,24 +20199,26 @@ (define_split "operands[1] = gen_lowpart (SImode, operands[1]);") (define_insn "*vec_extractv4si" - [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm,Yr,*x,Yw") + [(set (match_operand:SI 0 "nonimmediate_operand" "=hBt,rm,rm,Yr,*x,Yw") (vec_select:SI - (match_operand:V4SI 1 "register_operand" " x, v, 0, 0,Yw") + (match_operand:V4SI 1 "register_operand" "x, x, v, 0, 0, Yw") (parallel [(match_operand:SI 2 "const_0_to_3_operand")])))] "TARGET_SSE4_1" { switch (which_alternative) { case 0: + return "pextrd\t{%2, %1, %0|%0, %1, %2}"; case 1: - return "%vpextrd\t{%2, %1, %0|%0, %1, %2}"; - case 2: + return "vpextrd\t{%2, %1, %0|%0, %1, %2}"; + case 3: + case 4: operands[2] = GEN_INT (INTVAL (operands[2]) * 4); return "psrldq\t{%2, %0|%0, %2}"; - case 4: + case 5: operands[2] = GEN_INT (INTVAL (operands[2]) * 4); return "vpsrldq\t{%2, %1, %0|%0, %1, %2}"; @@ -20191,25 +20226,29 @@ (define_insn "*vec_extractv4si" gcc_unreachable (); } } - [(set_attr "isa" "*,avx512dq,noavx,noavx,avx") - (set_attr "type" "sselog1,sselog1,sseishft1,sseishft1,sseishft1") + [(set_attr "isa" "noavx,avx,avx512dq,noavx,noavx,avx") + (set_attr "type" "sselog1,sselog1,sselog1,sseishft1,sseishft1,sseishft1") + (set_attr "gpr32" "0,1,1,1,1,1") (set (attr "prefix_extra") (if_then_else (eq_attr "alternative" "0,1") (const_string "1") (const_string "*"))) (set_attr "length_immediate" "1") - (set_attr "prefix" "maybe_vex,evex,orig,orig,maybe_vex") + (set_attr "prefix" "orig,vex,evex,orig,orig,maybe_vex") (set_attr "mode" "TI")]) (define_insn "*vec_extractv4si_zext" - [(set (match_operand:DI 0 "register_operand" "=r,r") + [(set (match_operand:DI 0 "register_operand" "=h,r,r") (zero_extend:DI (vec_select:SI - (match_operand:V4SI 1 "register_operand" "x,v") + (match_operand:V4SI 1 "register_operand" "x,x,v") (parallel [(match_operand:SI 2 "const_0_to_3_operand")]))))] "TARGET_64BIT && TARGET_SSE4_1" - "%vpextrd\t{%2, %1, %k0|%k0, %1, %2}" - [(set_attr "isa" "*,avx512dq") + "@ + pextrd\t{%2, %1, %k0|%k0, %1, %2} + vpextrd\t{%2, %1, %k0|%k0, %1, %2} + vpextrd\t{%2, %1, %k0|%k0, %1, %2}" + [(set_attr "isa" "noavx,avx,avx512dq") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") @@ -20239,13 +20278,14 @@ (define_insn_and_split "*vec_extractv4si_zext_mem" }) (define_insn "*vec_extractv2di_1" - [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,rm,m,x,x,Yv,x,v,r") + [(set (match_operand:DI 0 "nonimmediate_operand" "=hBt,rm,rm,m,x,x,Yv,x,v,r") (vec_select:DI - (match_operand:V2DI 1 "nonimmediate_operand" "x ,v ,v,0,x, v,x,o,o") + (match_operand:V2DI 1 "nonimmediate_operand" "x, x ,v ,v,0,x, v,x,o,o") (parallel [(const_int 1)])))] "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ - %vpextrq\t{$1, %1, %0|%0, %1, 1} + pextrq\t{$1, %1, %0|%0, %1, 1} + vpextrq\t{$1, %1, %0|%0, %1, 1} vpextrq\t{$1, %1, %0|%0, %1, 1} %vmovhps\t{%1, %0|%0, %1} psrldq\t{$8, %0|%0, 8} @@ -20256,44 +20296,47 @@ (define_insn "*vec_extractv2di_1" #" [(set (attr "isa") (cond [(eq_attr "alternative" "0") - (const_string "x64_sse4") + (const_string "x64_sse4_noavx") (eq_attr "alternative" "1") + (const_string "x64_avx") + (eq_attr "alternative" "2") (const_string "x64_avx512dq") - (eq_attr "alternative" "3") - (const_string "sse2_noavx") (eq_attr "alternative" "4") - (const_string "avx") + (const_string "sse2_noavx") (eq_attr "alternative" "5") - (const_string "avx512bw") + (const_string "avx") (eq_attr "alternative" "6") - (const_string "noavx") + (const_string "avx512bw") (eq_attr "alternative" "8") + (const_string "noavx") + (eq_attr "alternative" "9") (const_string "x64") ] (const_string "*"))) (set (attr "type") - (cond [(eq_attr "alternative" "2,6,7") + (cond [(eq_attr "alternative" "3,7,8") (const_string "ssemov") - (eq_attr "alternative" "3,4,5") + (eq_attr "alternative" "4,5,6") (const_string "sseishft1") - (eq_attr "alternative" "8") + (eq_attr "alternative" "9") (const_string "imov") ] (const_string "sselog1"))) + (set_attr "gpr32" "0,1,1,1,1,1,1,1,1,1") (set (attr "length_immediate") - (if_then_else (eq_attr "alternative" "0,1,3,4,5") + (if_then_else (eq_attr "alternative" "0,1,2,4,5,6") (const_string "1") (const_string "*"))) (set (attr "prefix_rex") - (if_then_else (eq_attr "alternative" "0,1") + (if_then_else (eq_attr "alternative" "0") (const_string "1") (const_string "*"))) (set (attr "prefix_extra") - (if_then_else (eq_attr "alternative" "0,1") + (if_then_else (eq_attr "alternative" "0") (const_string "1") (const_string "*"))) - (set_attr "prefix" "maybe_vex,evex,maybe_vex,orig,vex,evex,orig,*,*") - (set_attr "mode" "TI,TI,V2SF,TI,TI,TI,V4SF,DI,DI")]) + (set_attr "prefix" "orig,maybe_evex,evex,maybe_vex,orig,vex,evex,orig,*,*") + (set_attr "mode" "TI,TI,TI,V2SF,TI,TI,TI,V4SF,DI,DI")]) (define_split [(set (match_operand: 0 "register_operand") @@ -20411,7 +20454,7 @@ (define_insn "*vec_concatv2si_sse4_1" (match_operand:SI 1 "nonimmediate_operand" " 0, 0, x,Yv, 0, 0,Yv,rm, 0,rm") (match_operand:SI 2 "nonimm_or_0_operand" - " rm,rm,rm,rm,Yr,*x,Yv, C,*ym, C")))] + " hBt,hBt,rm,rm,Yr,*x,Yv, C,*ym, C")))] "TARGET_SSE4_1 && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ pinsrd\t{$1, %2, %0|%0, %2, 1} @@ -20438,6 +20481,10 @@ (define_insn "*vec_concatv2si_sse4_1" (const_string "mmxmov") ] (const_string "sselog"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "0,1") + (const_string "0") + (const_string "1"))) (set (attr "prefix_extra") (if_then_else (eq_attr "alternative" "0,1,2,3") (const_string "1") @@ -20562,7 +20609,7 @@ (define_insn "vec_concatv2di" (match_operand:DI 1 "register_operand" " 0, 0,x ,Yv,0,Yv,0,0,v") (match_operand:DI 2 "nonimmediate_operand" - " rm,rm,rm,rm,x,Yv,x,m,m")))] + " hm,hm,rm,rm,x,Yv,x,m,m")))] "TARGET_SSE" "@ pinsrq\t{$1, %2, %0|%0, %2, 1} @@ -20592,6 +20639,10 @@ (define_insn "vec_concatv2di" (eq_attr "alternative" "0,1,2,3,4,5") (const_string "sselog") (const_string "ssemov"))) + (set (attr "gpr32") + (if_then_else (eq_attr "alternative" "0,1") + (const_string "0") + (const_string "1"))) (set (attr "prefix_rex") (if_then_else (eq_attr "alternative" "0,1,2,3") (const_string "1") @@ -21525,7 +21576,7 @@ (define_insn "ssse3_pmaddubsw128" (const_int 12) (const_int 14)]))) (sign_extend:V8HI (vec_select:V8QI - (match_operand:V16QI 2 "vector_operand" "xBm,Ywm") + (match_operand:V16QI 2 "vector_operand" "xBT,Ywm") (parallel [(const_int 0) (const_int 2) (const_int 4) (const_int 6) (const_int 8) (const_int 10) @@ -21548,6 +21599,7 @@ (define_insn "ssse3_pmaddubsw128" pmaddubsw\t{%2, %0|%0, %2} vpmaddubsw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sseiadd") (set_attr "atom_unit" "simul") (set_attr "prefix_extra" "1") @@ -21666,7 +21718,7 @@ (define_insn "*_pmulhrsw3" (sign_extend: (match_operand:VI2_AVX2_AVX512BW 1 "vector_operand" "%0,")) (sign_extend: - (match_operand:VI2_AVX2_AVX512BW 2 "vector_operand" "xBm,m"))) + (match_operand:VI2_AVX2_AVX512BW 2 "vector_operand" "xBT,m"))) (const_int 14)) (match_operand:VI2_AVX2_AVX512BW 3 "const1_operand")) (const_int 1))))] @@ -21676,6 +21728,7 @@ (define_insn "*_pmulhrsw3" pmulhrsw\t{%2, %0|%0, %2} vpmulhrsw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sseimul") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") @@ -21792,13 +21845,14 @@ (define_insn "_pshufb3" [(set (match_operand:VI1_AVX512 0 "register_operand" "=x,") (unspec:VI1_AVX512 [(match_operand:VI1_AVX512 1 "register_operand" "0,") - (match_operand:VI1_AVX512 2 "vector_operand" "xBm,m")] + (match_operand:VI1_AVX512 2 "vector_operand" "xBT,m")] UNSPEC_PSHUFB))] "TARGET_SSSE3 && && " "@ pshufb\t{%2, %0|%0, %2} vpshufb\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") @@ -21915,7 +21969,7 @@ (define_insn "_palignr" [(set (match_operand:VIMAX_AVX2_AVX512BW 0 "register_operand" "=x,") (unspec:VIMAX_AVX2_AVX512BW [(match_operand:VIMAX_AVX2_AVX512BW 1 "register_operand" "0,") - (match_operand:VIMAX_AVX2_AVX512BW 2 "vector_operand" "xBm,m") + (match_operand:VIMAX_AVX2_AVX512BW 2 "vector_operand" "xBT,m") (match_operand:SI 3 "const_0_to_255_mul_8_operand")] UNSPEC_PALIGNR))] "TARGET_SSSE3" @@ -21933,6 +21987,7 @@ (define_insn "_palignr" } } [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "type" "sseishft") (set_attr "atom_unit" "sishuf") (set_attr "prefix_extra" "1") @@ -22007,6 +22062,7 @@ (define_insn_and_split "ssse3_palignrdi" } [(set_attr "mmx_isa" "native,sse_noavx,avx") (set_attr "type" "sseishft") + (set_attr "gpr32" "0,0,1") (set_attr "atom_unit" "sishuf") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") @@ -22022,12 +22078,16 @@ (define_mode_iterator VI1248_AVX512VL_AVX512BW (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")]) (define_insn "*abs2" - [(set (match_operand:VI1248_AVX512VL_AVX512BW 0 "register_operand" "=") + [(set (match_operand:VI1248_AVX512VL_AVX512BW 0 "register_operand" "=x,") (abs:VI1248_AVX512VL_AVX512BW - (match_operand:VI1248_AVX512VL_AVX512BW 1 "vector_operand" "Bm")))] + (match_operand:VI1248_AVX512VL_AVX512BW 1 "vector_operand" "xBT,Bm")))] "TARGET_SSSE3" - "%vpabs\t{%1, %0|%0, %1}" - [(set_attr "type" "sselog1") + "@ + pabs\t{%1, %0|%0, %1} + vpabs\t{%1, %0|%0, %1}" + [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") + (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "maybe_vex") (set_attr "mode" "")]) @@ -22365,11 +22425,15 @@ (define_mode_attr vi8_sse4_1_avx2_avx512 (define_insn "_movntdqa" [(set (match_operand:VI8_AVX2_AVX512F 0 "register_operand" "=Yr,*x,v") - (unspec:VI8_AVX2_AVX512F [(match_operand:VI8_AVX2_AVX512F 1 "memory_operand" "m,m,m")] + (unspec:VI8_AVX2_AVX512F [(match_operand:VI8_AVX2_AVX512F 1 "memory_operand" "Bt,Bt,m")] UNSPEC_MOVNTDQA))] "TARGET_SSE4_1" - "%vmovntdqa\t{%1, %0|%0, %1}" + "@ + movntdqa\t{%1, %0|%0, %1} + movntdqa\t{%1, %0|%0, %1} + vmovntdqa\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -22388,6 +22452,7 @@ (define_insn "_mpsadbw" mpsadbw\t{%3, %2, %0|%0, %2, %3} vmpsadbw\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sselog1") (set_attr "gpr32" "0") (set_attr "length_immediate" "1") @@ -22401,7 +22466,7 @@ (define_insn "_packusdw" [(set (match_operand:VI2_AVX2_AVX512BW 0 "register_operand" "=Yr,*x,") (unspec:VI2_AVX2_AVX512BW [(match_operand: 1 "register_operand" "0,0,") - (match_operand: 2 "vector_operand" "YrBm,*xBm,m")] + (match_operand: 2 "vector_operand" "YrBT,*xBT,m")] UNSPEC_US_TRUNCATE))] "TARGET_SSE4_1 && && " "@ @@ -22409,6 +22474,7 @@ (define_insn "_packusdw" packusdw\t{%2, %0|%0, %2} vpackusdw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "sselog") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,") @@ -22755,10 +22821,14 @@ (define_insn "sse4_1_v8qiv8hi2" (define_insn "*sse4_1_v8qiv8hi2_1" [(set (match_operand:V8HI 0 "register_operand" "=Yr,*x,Yw") (any_extend:V8HI - (match_operand:V8QI 1 "memory_operand" "m,m,m")))] + (match_operand:V8QI 1 "memory_operand" "Bt,Bt,m")))] "TARGET_SSE4_1 && && " - "%vpmovbw\t{%1, %0|%0, %1}" + "@ + pmovbw\t{%1, %0|%0, %1} + pmovbw\t{%1, %0|%0, %1} + vpmovbw\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -22788,7 +22858,7 @@ (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_3" [(set (match_operand:V16QI 0 "register_operand" "=Yr,*x,Yw") (vec_select:V16QI (vec_concat:V32QI - (match_operand:V16QI 1 "vector_operand" "YrBm,*xBm,Ywm") + (match_operand:V16QI 1 "vector_operand" "YrBT,*xBT,Ywm") (match_operand:V16QI 2 "const0_operand")) (match_parallel 3 "pmovzx_parallel" [(match_operand 4 "const_int_operand")])))] @@ -22813,7 +22883,8 @@ (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_3" DONE; } } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_4" [(set (match_operand:V16QI 0 "register_operand" "=Yr,*x,Yw") @@ -22821,7 +22892,7 @@ (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_4" (vec_concat:V32QI (subreg:V16QI (vec_concat:VI248_128 - (match_operand: 1 "vector_operand" "YrBm,*xBm,Ywm") + (match_operand: 1 "vector_operand" "YrBT,*xBT,Ywm") (match_operand: 2 "const0_operand")) 0) (match_operand:V16QI 3 "const0_operand")) (match_parallel 4 "pmovzx_parallel" @@ -22848,7 +22919,8 @@ (define_insn_and_split "*sse4_1_zero_extendv8qiv8hi2_4" } operands[1] = lowpart_subreg (V16QImode, operands[1], mode); } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_expand "v8qiv8hi2" [(set (match_operand:V8HI 0 "register_operand") @@ -22967,10 +23039,11 @@ (define_insn "sse4_1_v4qiv4si2" (define_insn "*sse4_1_v4qiv4si2_1" [(set (match_operand:V4SI 0 "register_operand" "=Yr,*x,v") (any_extend:V4SI - (match_operand:V4QI 1 "memory_operand" "m,m,m")))] + (match_operand:V4QI 1 "memory_operand" "Bt,Bt,m")))] "TARGET_SSE4_1 && " "%vpmovbd\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -23139,10 +23212,14 @@ (define_insn "sse4_1_v4hiv4si2" (define_insn "*sse4_1_v4hiv4si2_1" [(set (match_operand:V4SI 0 "register_operand" "=Yr,*x,v") (any_extend:V4SI - (match_operand:V4HI 1 "memory_operand" "m,m,m")))] + (match_operand:V4HI 1 "memory_operand" "Bt,Bt,m")))] "TARGET_SSE4_1 && " - "%vpmovwd\t{%1, %0|%0, %1}" + "@ + pmovwd\t{%1, %0|%0, %1} + pmovwd\t{%1, %0|%0, %1} + vpmovwd\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -23191,7 +23268,7 @@ (define_insn_and_split "*sse4_1_zero_extendv4hiv4si2_3" [(set (match_operand:V8HI 0 "register_operand" "=Yr,*x,v") (vec_select:V8HI (vec_concat:V16HI - (match_operand:V8HI 1 "vector_operand" "YrBm,*xBm,vm") + (match_operand:V8HI 1 "vector_operand" "YrBT,*xBT,vm") (match_operand:V8HI 2 "const0_operand")) (match_parallel 3 "pmovzx_parallel" [(match_operand 4 "const_int_operand")])))] @@ -23214,7 +23291,8 @@ (define_insn_and_split "*sse4_1_zero_extendv4hiv4si2_3" DONE; } } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_insn_and_split "*sse4_1_zero_extendv4hiv4si2_4" [(set (match_operand:V8HI 0 "register_operand" "=Yr,*x,v") @@ -23222,7 +23300,7 @@ (define_insn_and_split "*sse4_1_zero_extendv4hiv4si2_4" (vec_concat:V16HI (subreg:V8HI (vec_concat:VI148_128 - (match_operand: 1 "vector_operand" "YrBm,*xBm,vm") + (match_operand: 1 "vector_operand" "YrBT,*xBT,vm") (match_operand: 2 "const0_operand")) 0) (match_operand:V8HI 3 "const0_operand")) (match_parallel 4 "pmovzx_parallel" @@ -23247,7 +23325,8 @@ (define_insn_and_split "*sse4_1_zero_extendv4hiv4si2_4" } operands[1] = lowpart_subreg (V8HImode, operands[1], mode); } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_insn "avx512f_v8qiv8di2" [(set (match_operand:V8DI 0 "register_operand" "=v") @@ -23385,12 +23464,16 @@ (define_insn "sse4_1_v2qiv2di2" (set_attr "mode" "TI")]) (define_insn "*sse4_1_v2qiv2di2_1" - [(set (match_operand:V2DI 0 "register_operand" "=v") + [(set (match_operand:V2DI 0 "register_operand" "=x,v") (any_extend:V2DI - (match_operand:V2QI 1 "memory_operand" "m")))] + (match_operand:V2QI 1 "memory_operand" "Bt,m")))] "TARGET_SSE4_1 && " - "%vpmovbq\t{%1, %0|%0, %1}" - [(set_attr "type" "ssemov") + "@ + pmovbq\t{%1, %0|%0, %1} + vpmovbq\t{%1, %0|%0, %1}" + [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") + (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "maybe_evex") (set_attr "mode" "TI")]) @@ -23524,10 +23607,14 @@ (define_insn "sse4_1_v2hiv2di2" (define_insn "*sse4_1_v2hiv2di2_1" [(set (match_operand:V2DI 0 "register_operand" "=Yr,*x,v") (any_extend:V2DI - (match_operand:V2HI 1 "memory_operand" "m,m,m")))] + (match_operand:V2HI 1 "memory_operand" "Bt,Bt,m")))] "TARGET_SSE4_1 && " - "%vpmovwq\t{%1, %0|%0, %1}" + "@ + pmovwq\t{%1, %0|%0, %1} + pmovwq\t{%1, %0|%0, %1} + vpmovwq\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -23689,10 +23776,14 @@ (define_insn "sse4_1_v2siv2di2" (define_insn "*sse4_1_v2siv2di2_1" [(set (match_operand:V2DI 0 "register_operand" "=Yr,*x,v") (any_extend:V2DI - (match_operand:V2SI 1 "memory_operand" "m,m,m")))] + (match_operand:V2SI 1 "memory_operand" "Bt,Bt,m")))] "TARGET_SSE4_1 && " - "%vpmovdq\t{%1, %0|%0, %1}" + "@ + pmovdq\t{%1, %0|%0, %1} + pmovdq\t{%1, %0|%0, %1} + vpmovdq\t{%1, %0|%0, %1}" [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1") (set_attr "type" "ssemov") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,orig,maybe_evex") @@ -23719,7 +23810,7 @@ (define_insn_and_split "*sse4_1_zero_extendv2siv2di2_3" [(set (match_operand:V4SI 0 "register_operand" "=Yr,*x,v") (vec_select:V4SI (vec_concat:V8SI - (match_operand:V4SI 1 "vector_operand" "YrBm,*xBm,vm") + (match_operand:V4SI 1 "vector_operand" "YrBT,*xBT,vm") (match_operand:V4SI 2 "const0_operand")) (match_parallel 3 "pmovzx_parallel" [(match_operand 4 "const_int_operand")])))] @@ -23740,14 +23831,15 @@ (define_insn_and_split "*sse4_1_zero_extendv2siv2di2_3" DONE; } } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_insn_and_split "*sse4_1_zero_extendv2siv2di2_4" [(set (match_operand:V4SI 0 "register_operand" "=Yr,*x,v") (vec_select:V4SI (vec_concat:V8SI (vec_concat:V4SI - (match_operand:V2SI 1 "vector_operand" "YrBm, *xBm, vm") + (match_operand:V2SI 1 "vector_operand" "YrBT, *xBT, vm") (match_operand:V2SI 2 "const0_operand")) (match_operand:V4SI 3 "const0_operand")) (match_parallel 4 "pmovzx_parallel" @@ -23769,7 +23861,8 @@ (define_insn_and_split "*sse4_1_zero_extendv2siv2di2_4" } operands[1] = lowpart_subreg (V4SImode, operands[1], V2SImode); } - [(set_attr "isa" "noavx,noavx,avx")]) + [(set_attr "isa" "noavx,noavx,avx") + (set_attr "gpr32" "0,0,1")]) (define_expand "v2siv2di2" [(set (match_operand:V2DI 0 "register_operand") @@ -25960,7 +26053,7 @@ (define_insn "xop_vpermil23" (define_insn "aesenc" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xBm,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xBT,xm,vm")] UNSPEC_AESENC))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ @@ -25969,6 +26062,7 @@ (define_insn "aesenc" vaesenc\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,aes,avx512vl") (set_attr "type" "sselog1") + (set_attr "gpr32" "0,1,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,vex,evex") (set_attr "btver2_decode" "double,double,double") @@ -25977,7 +26071,7 @@ (define_insn "aesenc" (define_insn "aesenclast" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xBm,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xBT,xm,vm")] UNSPEC_AESENCLAST))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ @@ -25986,6 +26080,7 @@ (define_insn "aesenclast" vaesenclast\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,aes,avx512vl") (set_attr "type" "sselog1") + (set_attr "gpr32" "0,1,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,vex,evex") (set_attr "btver2_decode" "double,double,double") @@ -25994,7 +26089,7 @@ (define_insn "aesenclast" (define_insn "aesdec" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xBm,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xBT,xm,vm")] UNSPEC_AESDEC))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ @@ -26003,6 +26098,7 @@ (define_insn "aesdec" vaesdec\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,aes,avx512vl") (set_attr "type" "sselog1") + (set_attr "gpr32" "0,1,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,vex,evex") (set_attr "btver2_decode" "double,double,double") @@ -26011,7 +26107,7 @@ (define_insn "aesdec" (define_insn "aesdeclast" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xBm,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xBT,xm,vm")] UNSPEC_AESDECLAST))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ @@ -26019,6 +26115,7 @@ (define_insn "aesdeclast" vaesdeclast\t{%2, %1, %0|%0, %1, %2} vaesdeclast\t{%2, %1, %0|%0, %1, %2}" [(set_attr "isa" "noavx,aes,avx512vl") + (set_attr "gpr32" "0,1,1") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,vex,evex") @@ -26054,7 +26151,7 @@ (define_insn "aeskeygenassist" (define_insn "pclmulqdq" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xBm,xm,vm") + (match_operand:V2DI 2 "vector_operand" "xBT,xm,vm") (match_operand:SI 3 "const_0_to_255_operand")] UNSPEC_PCLMUL))] "TARGET_PCLMUL" @@ -26064,6 +26161,7 @@ (define_insn "pclmulqdq" vpclmulqdq\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "isa" "noavx,avx,vpclmulqdqvl") (set_attr "type" "sselog1") + (set_attr "gpr32" "0,1,1") (set_attr "prefix_extra" "1") (set_attr "length_immediate" "1") (set_attr "prefix" "orig,vex,evex") @@ -29395,7 +29493,7 @@ (define_insn "vgf2p8affineinvqb_" [(set (match_operand:VI1_AVX512F 0 "register_operand" "=x,v") (unspec:VI1_AVX512F [(match_operand:VI1_AVX512F 1 "register_operand" "0,v") - (match_operand:VI1_AVX512F 2 "vector_operand" "xBm,vm") + (match_operand:VI1_AVX512F 2 "vector_operand" "xBT,vm") (match_operand 3 "const_0_to_255_operand")] UNSPEC_GF2P8AFFINEINV))] "TARGET_GFNI" @@ -29403,6 +29501,7 @@ (define_insn "vgf2p8affineinvqb_" gf2p8affineinvqb\t{%3, %2, %0| %0, %2, %3} vgf2p8affineinvqb\t{%3, %2, %1, %0| %0, %1, %2, %3}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") (set_attr "mode" "")]) @@ -29411,7 +29510,7 @@ (define_insn "vgf2p8affineqb_" [(set (match_operand:VI1_AVX512F 0 "register_operand" "=x,v") (unspec:VI1_AVX512F [(match_operand:VI1_AVX512F 1 "register_operand" "0,v") - (match_operand:VI1_AVX512F 2 "vector_operand" "xBm,vm") + (match_operand:VI1_AVX512F 2 "vector_operand" "xBT,vm") (match_operand 3 "const_0_to_255_operand")] UNSPEC_GF2P8AFFINE))] "TARGET_GFNI" @@ -29419,6 +29518,7 @@ (define_insn "vgf2p8affineqb_" gf2p8affineqb\t{%3, %2, %0| %0, %2, %3} vgf2p8affineqb\t{%3, %2, %1, %0| %0, %1, %2, %3}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") (set_attr "mode" "")]) @@ -29427,13 +29527,14 @@ (define_insn "vgf2p8mulb_" [(set (match_operand:VI1_AVX512F 0 "register_operand" "=x,v") (unspec:VI1_AVX512F [(match_operand:VI1_AVX512F 1 "register_operand" "%0,v") - (match_operand:VI1_AVX512F 2 "vector_operand" "xBm,vm")] + (match_operand:VI1_AVX512F 2 "vector_operand" "xBT,vm")] UNSPEC_GF2P8MUL))] "TARGET_GFNI" "@ gf2p8mulb\t{%2, %0| %0, %2} vgf2p8mulb\t{%2, %1, %0| %0, %1, %2}" [(set_attr "isa" "noavx,avx") + (set_attr "gpr32" "0,1") (set_attr "prefix_extra" "1") (set_attr "prefix" "orig,maybe_evex") (set_attr "mode" "")])