[Bug tree-optimization/66010] Missed optimization after inlining va_list parameter

vries at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon May 4 22:08:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66010

vries at gcc dot gnu.org changed:

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

--- Comment #1 from vries at gcc dot gnu.org ---
Before pass_stdarg, we observe in f1 that va_start and va_arg use the same
argument:
...
  # .MEM_2 = VDEF <.MEM_1(D)>
  # USE = nonlocal escaped
  # CLB = nonlocal escaped { D.1836 } (escaped)
  __builtin_va_startD.1030 (&apD.1836, 0);

  # .MEM_3 = VDEF <.MEM_2>
  # USE = nonlocal null { D.1836 } (escaped)
  # CLB = nonlocal null { D.1836 } (escaped)
  res_4 = VA_ARG (&apD.1836, 0B);
...

Before pass_stdarg, we observe in f2 that va_start and va_arg do not use the
same argument:
...
  # .MEM_2 = VDEF <.MEM_1(D)>
  # USE = nonlocal escaped
  # CLB = nonlocal escaped { D.1844 } (escaped)
  __builtin_va_startD.1030 (&apD.1844, 0);

  # .MEM_3 = VDEF <.MEM_2>
  apD.1859 = &apD.1844;

  # .MEM_7 = VDEF <.MEM_3>
  # USE = nonlocal null { D.1844 D.1859 } (escaped)
  # CLB = nonlocal null { D.1844 D.1859 } (escaped)
  _6 = VA_ARG (&apD.1859, 0B);
...

And in the pass_stdarg dump, for f2 we see why the va_list escapes:
...
va_list escapes in # .MEM_3 = VDEF <.MEM_2>
apD.1859 = &apD.1844;
...



More information about the Gcc-bugs mailing list