[patch] PR 48837

Jeff Law law@redhat.com
Fri May 6 15:19:00 GMT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 05/06/11 04:44, Zdenek Dvorak wrote:
> Hi,
> 
> when accumulator transformation is performed on a function like
> 
> foo(a)
> {
>   if (a > 0)
>     return 1 + foo (a - 1)
> 
>   return bla();
> }
> 
> this becomes
> 
> foo(a)
> {
>   int tmp = 0;
> 
>   while (a > 0)
>     tm = 1 + tmp;
> 
>   return tmp + bla();
> }
> 
> Before, bla was a tail-call, but after the optimization, it is not (since an addition
> has to be performed after the result of bla is known).  However, we used to mark bla
> as tail-call, leading to a misscompilation later.  Fixed by not marking tail-calls
> when the transformation is performed.  Bootstrapped and regtested on i686.
> 
> Zdenek
> 
> 	PR tree-optimization/48837
> 	* tree-tailcall.c (tree_optimize_tail_calls_1): Do not mark tailcalls
> 	when accumulator transformation is performed.
> 
> 	* gcc.dg/pr48837.c: New testcase.
OK.

Thanks,
jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJNxA66AAoJEBRtltQi2kC7yysIAKZYUpU9JlyH2XwvvVslq8C1
CJ7E/akRDsBoYBS+syNsLMwkbGG0WoaFJzOd7vUmIknAHEusF6OasczsN8PD9aEB
i8xJNTZm2yxhrVZh8m/KBX96r80RwzpAhr9L1WAspiS/xpw12lRoJoh3XeKXYXWw
Z0aBL4ljCgLj6GKEyy7FbGHx0gEqaa1x7EDM1kJGCgZPAFJalJPozBiiriYL9/Th
gHqLXZ0HUhXNGql5M2S+lfZG2d30Rj1KBXDrU8EOXedHRjxb+U9+WLGsUHZtkcTI
j3//n6bjTr/YmyTe43voG3Rn6z6k0g2Eb8gF8UMvDbaSJlH9+xb6SuWLS8+mEhY=
=luE9
-----END PGP SIGNATURE-----



More information about the Gcc-patches mailing list