This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][PR66010] Don't take address of ap unless necessary


On 12-05-15 12:12, Michael Matz wrote:
Hi,

On Fri, 8 May 2015, Tom de Vries wrote:

III.

Using the patch, before inlining we can see the address operator has been
removed in va_arg:
...
f2_1 (struct  * apD.1832)
{
   intD.6 _4;

   # .MEM_3 = VDEF <.MEM_1(D)>
   # USE = anything
   # CLB = anything

   _4 = VA_ARG (ap_2(D), 0B, 0);
   # VUSE <.MEM_3>
   return _4;
}

Have you visually inspected that the address operator stays on
architectures where va_list is e.g. a char pointer

x86_64 -m32:
...
f2 (int i)
{
  charD.2 * ap.0D.1811;
  intD.1 D.1812;
  intD.1 resD.1808;
  charD.2 * apD.1809;

  try
    {
      # USE = anything
      # CLB = anything
      __builtin_va_startD.1021 (&apD.1809, 0);
      ap.0D.1811 = apD.1809;
      # USE = anything
      # CLB = anything
      resD.1808 = f2_1D.1803 (ap.0D.1811);
      # USE = anything
      # CLB = anything
      __builtin_va_endD.1020 (&apD.1809);
      D.1812 = resD.1808;
      return D.1812;
    }
  finally
    {
      apD.1809 = {CLOBBER};
    }
}

f2_1 (char * ap)
{
  intD.1 D.1815;

  # USE = anything
  # CLB = anything
  D.1815 = VA_ARG (&apD.1802, 0B, 1);
  return D.1815;
}
...

Thanks,
- Tom

(i.e. on those where
VA_ARG has the side-effect of modifying ap)?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]