Re: How to avoid constant propagation into functions?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux