On Mon, Aug 23, 2021 at 2:02 PM Jan Hubicka <hubi...@ucw.cz> wrote: > > Hi, > > > > Why does it "punish" -fno-ipa-pta? It merely "punishes" modref of > > no longer claiming that we do not alter the instruction stream pointed > > to by a->foo, sth that shouldn't be very common. > > For example > struct a { > void (*foo)(); > void *bar; > } > fn(struct a *a) > { > a->foo(); > } > > With Maritn's patch we will drop EAF flags of A to NODIRECTESCAPE since > we will think its derefernece is is used in all posible ways. > > With my patch we get NOT_RETURNED | NOESCAPE. > Still we will make PTA to think that whatever is pointed to by bar may > be clobbered and this seems unnecessary. > > I have to look into ipa-pta how it haldnes the "instruction stream > clobbering". I was not aware it does something smart about indirect > calls.
It actually isn't "smart" but it simply makes indirect calls exactly the same as direct calls so if you have (*ESCAPED) (a, b, c); then it magically appears as a function call to all IPA PTA handled functions that escaped. So some handling is needed for correctness and yes, it's fancier than simply assuming all address-taken functions have unknown incoming parameters. Richard. > > Honza