From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4133 invoked by alias); 21 Oct 2010 14:41:10 -0000 Received: (qmail 4041 invoked by uid 22791); 21 Oct 2010 14:41:08 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,TW_LB X-Spam-Check-By: sourceware.org Received: from mail-iw0-f175.google.com (HELO mail-iw0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 21 Oct 2010 14:41:03 +0000 Received: by iwn35 with SMTP id 35so2255659iwn.20 for ; Thu, 21 Oct 2010 07:41:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.231.36.130 with SMTP id t2mr1028217ibd.108.1287672061290; Thu, 21 Oct 2010 07:41:01 -0700 (PDT) Received: by 10.231.144.197 with HTTP; Thu, 21 Oct 2010 07:41:01 -0700 (PDT) In-Reply-To: <7FB04A5C213E9943A72EE127DB74F0ADA691645C5F@SJEXCHCCR02.corp.ad.broadcom.com> References: <7FB04A5C213E9943A72EE127DB74F0ADA691645C5F@SJEXCHCCR02.corp.ad.broadcom.com> Date: Thu, 21 Oct 2010 16:25:00 -0000 Message-ID: Subject: Re: [PATCH] PR45834: make restrict qualifier work for char pointer type. From: Richard Guenther To: Bingfeng Mei Cc: "gcc-patches@gcc.gnu.org" , "zsojka@seznam.cz" , "eres@il.ibm.com" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes 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 X-SW-Source: 2010-10/txt/msg01844.txt.bz2 On Thu, Oct 21, 2010 at 4:26 PM, Bingfeng Mei wrote: > Hi, > > This patch fixes bug PR45834. In alias.c, a check for QImode prevents lat= er > alias analysis based on restrict qualifier for char pointer type. > This check is based on ancient code (at least 1997), and other modern > way has been implemented for dealing that (MEM_ALIAS_SET =3D=3D 0) > according to Richard. > > Bootstrapped and tested for x86_64-unknown-linux-gnu. > > Before the patch =A0powerpc-elf-gcc -O2 tst.c -S > > void foo (char * __restrict a, char *__restrict b, char * __restrict c) > { > =A0*a =3D *b; > =A0*(a+1) =3D *c; > } > foo: > =A0 =A0 =A0 =A0lbz 0,0(4) > =A0 =A0 =A0 =A0stb 0,0(3) > =A0 =A0 =A0 =A0lbz 0,0(5) > =A0 =A0 =A0 =A0stb 0,1(3) > =A0 =A0 =A0 =A0blr > > After the patch > foo: > =A0 =A0 =A0 =A0lbz 0,0(4) > =A0 =A0 =A0 =A0lbz 9,0(5) > =A0 =A0 =A0 =A0stb 0,0(3) > =A0 =A0 =A0 =A0stb 9,1(3) > =A0 =A0 =A0 =A0blr > > Not sure how to add it into testsuite though. > > Cheers, > Bingfeng Mei > > 2010-10-21 =A0Bingfeng Mei =A0 > =A0 =A0 =A0 =A0* alias.c (true_dependence_1): Remove check for QImode, > =A0 =A0 =A0 =A0which prevents accurate alias info of char pointer type > =A0 =A0 =A0 =A0with restrict qualifier. The check is handled by > =A0 =A0 =A0 =A0better and more modern method now. > =A0 =A0 =A0 =A0(may_alias_p): Ditto. Just say * alias.c (true_dependence_1): Remove obsolete check for QImode. Ok with that change. Richard. > Index: alias.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- alias.c =A0 =A0 (revision 165637) > +++ alias.c =A0 =A0 (working copy) > @@ -2459,7 +2459,7 @@ true_dependence_1 (const_rtx mem, enum m > > =A0 /* We cannot use aliases_everything_p to test MEM, since we must look > =A0 =A0 =A0at MEM_ADDR, rather than XEXP (mem, 0). =A0*/ > - =A0if (mem_mode =3D=3D QImode || GET_CODE (mem_addr) =3D=3D AND) > + =A0if (GET_CODE (mem_addr) =3D=3D AND) > =A0 =A0 return 1; > > =A0 /* ??? In true_dependence we also allow BLKmode to alias anything. = =A0Why > @@ -2655,7 +2655,7 @@ may_alias_p (const_rtx mem, const_rtx x) > > =A0 /* We cannot use aliases_everything_p to test MEM, since we must look > =A0 =A0 =A0at MEM_ADDR, rather than XEXP (mem, 0). =A0*/ > - =A0if (GET_MODE (mem) =3D=3D QImode || GET_CODE (mem_addr) =3D=3D AND) > + =A0if (GET_CODE (mem_addr) =3D=3D AND) > =A0 =A0 return 1; > > =A0 if (fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr, > > > >