On Tue, Jul 19, 2016 at 10:00 AM, Richard Biener
<richard.guent...@gmail.com> wrote:
> On Mon, Jul 18, 2016 at 5:36 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
>> On Mon, Jul 18, 2016 at 4:28 PM, NightStrike <nightstr...@gmail.com> wrote:
>>> On Mon, Jul 18, 2016 at 3:55 AM, Bin.Cheng <amker.ch...@gmail.com> wrote:
>>>> On Sat, Jul 16, 2016 at 6:28 PM, NightStrike <nightstr...@gmail.com> wrote:
>>>>> On Fri, Jul 15, 2016 at 1:07 PM, Bin Cheng <bin.ch...@arm.com> wrote:
>>>>>> Hi,
>>>>>> This patch removes support for -funsafe-loop-optimizations, as well as 
>>>>>> -Wunsafe-loop-optimizations.  By its name, this option does unsafe 
>>>>>> optimizations by assuming all loops must terminate and doesn't wrap.  
>>>>>> Unfortunately, it's not as useful as expected because:
>>>>>> 1) Simply assuming loop must terminate isn't enough.  What we really 
>>>>>> want is to analyze scalar evolution and loop niter bound under such 
>>>>>> assumptions.  This option does nothing in this aspect.
>>>>>> 2) IIRC, this option generates bogus code for some common programs, 
>>>>>> that's why it's disabled by default even at Ofast level.
>>>>>>
>>>>>> After I sent patches handling possible infinite loops in both 
>>>>>> (scev/niter) analyzer and vectorizer, it's a natural step to remove such 
>>>>>> options in GCC.  This patch does so by deleting code for 
>>>>>> -funsafe-loop-optimizations, as well as -Wunsafe-loop-optimizations.  It 
>>>>>> also deletes the two now useless tests, while the option interface is 
>>>>>> preserved for backward compatibility purpose.
>>>>>
>>>>> There are a number of bugs opened against those options, including one
>>>>> that I just opened rather recently:
>>>>>
>>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71769
>>>>>
>>>>> but some go back far, in this case 9 years:
>>>>>
>>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34114
>>>>>
>>>>> If you are going to remove the options, you should address open bugs
>>>>> related to those options.
>>>> Hi,
>>>> Thanks for pointing me to these PRs, I will have a look at them.
>>>
>>> I only highlighted two PRs, I was suggesting that you look for all of them.
>>>
>>>> IMHO, the old one reports weakness in loop niter analyzer, the issue
>>>> exists whether I remove unsafe-loop-optimization or not.  The new one
>>>> is a little bit trickier, I will put some comments on PR, and again,
>>>> the issue (if it is) is in niter analyzer which has nothing to do with
>>>> the option really.
>>>
>>> Well, one thing to note is that the warning is an easy way to get a
>>> notice of a possible missed optimization (and I have many more
>>> occurrences of it in a particular code base that I use).  If the
>>> warning is highlighted potential issues that aren't due to the -f
>>> option but are issues nonetheless, and we remove the warning, then how
>>> should I go about finding these missed opportunities in the future?
>>> Is there a different mechanism that does the same thing?
>> Hmm, good point, I will iterate the patch to see if I can only remove
>> -funsafe-loop-optimizations, while keep -Wunsafe-loop-optimizations.
>
> Of course the naming of -Wunsafe-loop-optimizations is misleading then.
> Maybe provide an alias -Wmissed-loop-optimizations and re-word it to
> say "disable _some_ loop optimizations" as I hope more loop optimizations
> get aware of "assumptions" and deal with them.

In which case a way to "re-introduce" -funsafe-loop-optimizations would be to
add a #pragma that can be used to annotate loops to tell GCC of various
properties like that it terminates without IV wrapping.

Richard.

> Richard.
>
>> Thanks,
>> bin

Reply via email to