From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113790 invoked by alias); 2 May 2018 08:02:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 113773 invoked by uid 89); 2 May 2018 08:02:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 02 May 2018 08:02:10 +0000 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 50FC785A04; Wed, 2 May 2018 08:02:09 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.36.118.110]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CE5245FCCF; Wed, 2 May 2018 08:02:08 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.15.2/8.15.2) with ESMTP id w42826k3020769; Wed, 2 May 2018 10:02:06 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.15.2/8.15.2/Submit) id w42825fc020768; Wed, 2 May 2018 10:02:05 +0200 Date: Wed, 02 May 2018 08:02:00 -0000 From: Jakub Jelinek To: Uros Bizjak Cc: "gcc-patches@gcc.gnu.org" Subject: Re: [PATCH] Fix the x86 *_doubleword_mask* patterns (PR target/85582) Message-ID: <20180502080205.GS8577@tucnak> Reply-To: Jakub Jelinek References: <20180502074246.GR8577@tucnak> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.2 (2017-12-15) X-IsSubscribed: yes X-SW-Source: 2018-05/txt/msg00071.txt.bz2 On Wed, May 02, 2018 at 09:50:07AM +0200, Uros Bizjak wrote: > > 2018-05-02 Jakub Jelinek > > > > PR target/85582 > > * config/i386/i386.md (*ashl3_doubleword_mask, > > *ashl3_doubleword_mask_1, *3_doubleword_mask, > > *3_doubleword_mask_1): If and[sq]i3 is needed, don't > > clobber operands[2], instead use a new pseudo. Formatting fixes. > > > > * gcc.c-torture/execute/pr85582-1.c: New test. > > * gcc.c-torture/execute/pr85582-2.c: New test. > > O. Thanks, committed. BTW, thinking about these some more, isn't INTVAL (operands[3]) <= ( * BITS_PER_UNIT) - 1 incorrect? Say for being 4 this is INTVAL (operands[3]) <= 31 so it will accept & 0 to & 31 (that is correct), or e.g. & -2 (that is incorrect). Isn't the right guarding condition that (INTVAL (operands[3]) & ( * BITS_PER_UNIT)) == 0 i.e. that we have guarantee the shift count doesn't have the topmost relevant bit set and we can ignore bits above it (UB)? And for the decision if we should use a masking or not perhaps if ((INTVAL (operands[3]) & (( * BITS_PER_UNIT) - 1)) != ( * BITS_PER_UNIT) - 1) , again ignoring bits we don't care about. > > --- gcc/config/i386/i386.md.jj 2018-05-01 12:18:15.566832552 +0200 > > +++ gcc/config/i386/i386.md 2018-05-01 13:09:36.635164943 +0200 > > @@ -10366,7 +10366,7 @@ (define_insn_and_split "*ashl3_doub > > (match_operand:SI 2 "register_operand" "c") > > (match_operand:SI 3 "const_int_operand")) 0))) > > (clobber (reg:CC FLAGS_REG))] > > - "INTVAL (operands[3]) <= ( * BITS_PER_UNIT)-1 > > + "INTVAL (operands[3]) <= ( * BITS_PER_UNIT) - 1 > > && can_create_pseudo_p ()" > > "#" > > "&& 1" > > @@ -10385,8 +10385,12 @@ (define_insn_and_split "*ashl3_doub > > > > operands[8] = GEN_INT ( * BITS_PER_UNIT); > > > > - if (INTVAL (operands[3]) < ( * BITS_PER_UNIT)-1) > > - emit_insn (gen_andsi3 (operands[2], operands[2], operands[3])); > > + if (INTVAL (operands[3]) < ( * BITS_PER_UNIT) - 1) > > + { > > + rtx tem = gen_reg_rtx (SImode); > > + emit_insn (gen_andsi3 (tem, operands[2], operands[3])); > > + operands[2] = tem; > > + } > > > > operands[2] = gen_lowpart (QImode, operands[2]); > > Jakub