On Tue, 19 Nov 2013, Jan Hubicka wrote:

> Hi,
> this patch fixes two issues with memcpy testcase - silences warning and 
> updates
> the template as suggested by Uros in the PR.  The testcase still fails on 
> i386.
> This is because we end up with:
> ;; Function t (t, funcdef_no=0, decl_uid=1763, symbol_order=2)
> 
> t (unsigned int c)
> {
>   void * b.0_4;
>   void * a.1_5;
> 
>   <bb 2>:
>   if (c_2(D) <= 9)
>     goto <bb 3>;
>   else
>     goto <bb 4>;
> 
>   <bb 3>:
>   b.0_4 = b;
>   a.1_5 = a;
>   memcpy (a.1_5, b.0_4, c_2(D));
> 
>   <bb 4>:
>   return;
> 
> }
> and we have no useful value range on c_2 because assert_expr was removed,
> while in 64bit version there is a cast in bb 3 that preserves the info.
> Solving this is an independent (and I guess not terribly easy) problem.

Hmm, I thought Jakub fixed this already (with the checking whether
there are any uses of c_2(D) before the conditional)?  Or is this
a different case?

Richard.

> Regtested x86_64-linux, will commit it shortly.
> 
> Index: ChangeLog
> ===================================================================
> --- ChangeLog (revision 204984)
> +++ ChangeLog (working copy)
> @@ -1,3 +1,10 @@
> +2013-11-18  Jan Hubicka  <j...@suse.cz>
> +         Uros Bizjak  <ubiz...@gmail.com>
> +
> +     PR middle-end/59175
> +     * gcc.target/i386/memcpy-2.c: Fix template;
> +     add +1 so the testcase passes at 32bit.
> +
>  2013-11-18  Dominique d'Humieres  <domi...@lps.ens.fr>
>  
>       * c-c++-common/cilk-plus/PS/reduction-3.c: Use stdlib.h.
> Index: gcc.target/i386/memcpy-2.c
> ===================================================================
> --- gcc.target/i386/memcpy-2.c        (revision 204984)
> +++ gcc.target/i386/memcpy-2.c        (working copy)
> @@ -1,11 +1,11 @@
>  /* { dg-do compile } */
>  /* { dg-options "-O2" } */
> -/* Memcpy should be inlined because block size is known.  */
> -/* { dg-final { scan-assembler-not "memcpy" } } */
>  void *a;
>  void *b;
>  t(unsigned int c)
>  {
>    if (c<10)
> -    memcpy (a,b,c);
> +    __builtin_memcpy (a,b,c+1);
>  }
> +/* Memcpy should be inlined because block size is known.  */
> +/* { dg-final { scan-assembler-not "(jmp|call)\[\\t \]*memcpy" } } */
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer

Reply via email to