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. Honza