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

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


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

vries at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Missed optimization after   |[6 Regression] Missed
                   |inlining va_list parameter  |optimization after inlining
                   |                            |va_list parameter

--- Comment #3 from vries at gcc dot gnu.org ---
Before postponing expansion of va_arg to pass_stdarg, we had at pass_stdarg:
...
f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units.

Pass statistics:
----------------

f2 (intD.6 iD.1840)
{
  struct  apD.1844[1];
  unsigned intD.9 _6;
  voidD.41 * _7;
  sizetype _8;
  voidD.41 * addr.1_9;
  unsigned intD.9 _10;
  voidD.41 * _11;
  voidD.41 * _12;
  voidD.41 * addr.1_13;
  intD.6 _14;

;;   basic block 2, loop depth 0, count 0, freq 10000, maybe hot
;;    prev block 0, next block 3, flags: (NEW, REACHABLE)
;;    pred:       ENTRY [100.0%]  (FALLTHRU,EXECUTABLE)
  # .MEM_2 = VDEF <.MEM_1(D)>
  # USE = nonlocal escaped
  # CLB = nonlocal escaped { D.1844 }
  __builtin_va_startD.1030 (&apD.1844, 0);
  # VUSE <.MEM_2>
  _6 = MEM[(struct  *)&apD.1844].gp_offsetD.2;
...

Already after early inline, we have the desired:
...
  # .MEM_2 = VDEF <.MEM_1(D)>
  # USE = anything
  # CLB = anything
  __builtin_va_startD.1030 (&apD.1844, 0);

  # VUSE <.MEM_2>
  _8 = MEM[(struct  *)&apD.1844].gp_offsetD.2;
...

So, this is a regression.



More information about the Gcc-bugs mailing list