How to avoid constant propagation into functions?
Georg-Johann Lay
avr@gjlay.de
Wed Dec 7 14:41:00 GMT 2016
On 07.12.2016 14:47, Jakub Jelinek wrote:
> 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
>
Are you saying that this is worth being reported as PR?
Johann
More information about the Gcc-help
mailing list