On Wed, Dec 07, 2016 at 04:12:48PM +0300, Alexander Monakov wrote:
> [adding gcc@ for the compiler-testsuite-related discussion, please drop either
> gcc@ or gcc-help@ from Cc: as appropriate in replies]
>
> On Wed, 7 Dec 2016, Segher Boessenkool wrote:
> > > For example, this might have impact on writing test for GCC:
> > >
> > > When I am writing a test with noinline + noclone then my
> > > expectation is that no such propagation happens, because
> > > otherwise a test might turn trivial...
> >
> > The usual ways to prevent that are to add some volatile, or an
> > asm("" : "+g"(some_var)); etc.
>
> No, that doesn't sound right. As far as I can tell from looking that the GCC
> testsuite, the prevailing way is actually the noinline+noclone combo, not the
> per-argument asms or volatiles.
>
> This behavior is new in gcc-7 due to new IPA-VRP functionality. So
> -fno-ipa-vrp
> gets the old behavior. I think from the testsuite perspective the situation
> got
> a bit worse due to this, as now in existing testcases stuff can get propagated
> where the testcase used noinline+noclone to suppress propagation. This means
> that some testcases may get weaker and no longer test what they were supposed
> to. And writing new testcases gets less convenient too.
>
> However, this actually demonstrates how the noinline+noclone was not
> future-proof, and in a way backfired now. Should there be, ideally, a single
> 'noipa' attribute encompassing noinline, noclone, -fno-ipa-vrp, -fno-ipa-ra
> and
> all future transforms using inter-procedural knowledge?
Or just disable IPA-VRP into functions with noclone attribute, consider
IPA-VRP as kind of virtual cloning.
Jakub