------- Comment #5 from rguenth at gcc dot gnu dot org  2010-05-05 14:24 -------
Ah, we have

  __builtin_va_start (&ap, 0);
  ap.1_1 = ap;
  D.2000_2 = ap.1_1 + -4;
  D.2001_3 = (long unsigned int) D.2000_2;
  D.2002_4 = D.2001_3 & -4;
  ap.2_5 = (void *) D.2002_4;

From

      /* Copied from va-pa.h, but we probably don't need to align to
         word size, since we generate and preserve that invariant.  */
      u = size_int (size > 4 ? -8 : -4);
      t = fold_convert (sizetype, t);
      t = build2 (BIT_AND_EXPR, sizetype, t, u);
      t = fold_convert (valist_type, t);

and the conversion to integer makes PTA drop out and consider
ap.2_5 point to anything and thus we _do_ let stuff escape through it.
In fact this causes everything to escape anywhere.

Thus it's a missed optimization for targets doing this kind of
re-alignment.

But maybe it's not necessary anyway as the comment in pa.c suggests?


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43958

Reply via email to