From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe2a.google.com (mail-vs1-xe2a.google.com [IPv6:2607:f8b0:4864:20::e2a]) by sourceware.org (Postfix) with ESMTPS id A43893857C4C for ; Tue, 5 Jan 2021 10:25:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A43893857C4C Received: by mail-vs1-xe2a.google.com with SMTP id r24so16062984vsg.10 for ; Tue, 05 Jan 2021 02:25:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cYmjuTQl556JB1Wp9yEyxiFXyDRRwX1Vf2gFXO9aJkU=; b=lJoGkUaBvufUz0kzpEJ8CTkkaXr+MONnLZBpvzeljwfzdMPNB2PWPS58hHp8WIEhY3 bNJ1AoBAmQy6LkoHBxMM/bRkSd5rQGual9PWCAkCQfiiaOt2yDIx4WwERly/17KldqbB +mlnMQiDpT1EOzK2YdZEJ/P4h6l2fAdMflHEkJKPJD/mJeH4c6O3CkfA9g+xL/lWOIbv 3OOJVXeH1ySQ9qCwNtnTvxMxK7EpA0gs6mxAHc85sVchxYCFlZycvuTQe3YQ5kpTu1eD yeslTvtMPI77Y26FSwtitI2UocZvDoQOjlDDtjSHmhYbd5zvVEU0N4ZCoySTxzyRO6DR kR2Q== X-Gm-Message-State: AOAM532fsTXMJLbiRW22qKpiyN98+d6zhxsnFMH+jr9a2yji7si1CMNS k/nWOXZGYqx204Yps4o7hlhRYdd43ggt1CZIleM= X-Google-Smtp-Source: ABdhPJzr7HCiwTwuKWwofwxVXSLHjnEe3dInLTE+kwzkzJRzen7qA4t4F5j3de8qIEq3L0BVOr029opisZxjwX7utxQ= X-Received: by 2002:a67:fa47:: with SMTP id j7mr45776808vsq.6.1609842355259; Tue, 05 Jan 2021 02:25:55 -0800 (PST) MIME-Version: 1.0 References: <20210104084920.GK3788@tucnak> In-Reply-To: From: Hongtao Liu Date: Tue, 5 Jan 2021 18:28:30 +0800 Message-ID: Subject: Re: [PATCH]i386: Optimize pmovskb on zero_extend of subreg HI of the result [PR98461] To: Uros Bizjak Cc: Jakub Jelinek , GCC Patches , Kirill Yukhin Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jan 2021 10:25:57 -0000 On Tue, Jan 5, 2021 at 3:20 PM Uros Bizjak wrote: > > On Tue, Jan 5, 2021 at 8:04 AM Uros Bizjak wrote: > > > > > > +(define_split > > > + [(set (match_operand:SI 0 "register_operand") > > > + (zero_extend:SI > > > + (not:HI > > > + (subreg:HI > > > + (unspec:SI > > > + [(match_operand:V16QI 1 "register_operand")] > > > + UNSPEC_MOVMSK) 0))))] > > > + "TARGET_SSE2" > > > + [(set (match_dup 2) > > > + (unspec:SI [(match_dup 1)] UNSPEC_MOVMSK)) > > > + (set (match_dup 0) > > > + (match_dup 3))] > > > > Just write: > > > > (set (match_dup 0) > > (xor:SI (match_dup 2)(const_int 65535)) > Yes, changed. > BTW: This could be a universal combine splitter to simplify > > unsigned int foo (unsigned short z) > { > return (unsigned short)~z; > } > > Trying 7 -> 8: > 7: r87:HI=~r88:SI#0 > REG_DEAD r88:SI > 8: r86:SI=zero_extend(r87:HI) > REG_DEAD r87:HI > Failed to match this instruction: > (set (reg:SI 86) > (zero_extend:SI (not:HI (subreg:HI (reg:SI 88) 0)))) > > But combine does not "split" to one insns. Yes, according to PSabi, the top half of the register is not necessarily 0, so if you add the splitter, it just changes from notl + movzwl to xor + movzwl, which doesn't look better? > > Uros. -- BR, Hongtao