[Bug ipa/108226] __restrict on inlined function parameters does not function as expected

2023-02-17 Thread jamborm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226

--- Comment #2 from Martin Jambor  ---
(In reply to Richard Biener from comment #1)
> 
> so somehow the restrict qualification pessimizes IPA-CP?!  Martin?
> 

Well, funny thing.  Without restrict, IPA-CP sees (from release_ssa dump):

void Func3 (char * p1, int * p2)
{
   [local count: 1073741824]:
  *p1_3(D) = 123;
  *p2_2(D) = 1;
  Func1 (p1_3(D), p2_2(D));
  return;
}

But with restrict in Func2 parameters, Func3 becomes:

void Func3 (char * p1, int * p2)
{
   [local count: 1073741824]:
  *p2_2(D) = 1;
  *p1_4(D) = 123;
  Func1 (p1_4(D), p2_2(D));
  return;
}

And the different ordering of the two stores is the problem, even when
p1 is not a char pointer, because we dont't trust the types of the
actual/formal parameters for TBAA (we would need to know in what types
they are read in Func1).

[Bug ipa/108226] __restrict on inlined function parameters does not function as expected

2023-01-09 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226

Richard Biener  changed:

   What|Removed |Added

 CC||jamborm at gcc dot gnu.org
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
  Component|tree-optimization   |ipa
   Last reconfirmed||2023-01-09

--- Comment #1 from Richard Biener  ---
For the first case it's the order of inlining - we first inline Func2 into
Func3 early and only then inline Func1 at IPA time which fails to put the Func1
accesses under __restrict.

For the second case it's with __restrict:

> ./cc1 -quiet t.c -O2 -fopt-info -fdump-tree-all
t.c:27:3: optimized:  Inlining Func2/2 into Func3/3.
t.c:22:3: optimized:  Inlined Func1.isra/5 into Func3/3 which now has time
12.50 and size 21, net change of -7.

vs without

> ./cc1 -quiet t.c -O2 -fopt-info -fdump-tree-all
t.c:27:3: optimized:  Inlining Func2/2 into Func3/3.
t.c:22:3: optimized:  Inlined Func1.constprop.isra/6 into Func3/3 which now has
time 4.375000 and size 7, net change of -21.

so somehow the restrict qualification pessimizes IPA-CP?!  Martin?

Note with restrict it's again the first issue.  -fno-early-inlining helps
there.