> On Jul 12, 2018, at 12:55 PM, Jeff Law <l...@redhat.com> wrote:
> 
> On 07/11/2018 06:20 PM, Paul Koning wrote:
>> This patch removes the obsolete documentation for 
>> decrement_and_branch_until_zero.  It also adds detail to the description for 
>> doloop_end.  In particular, it describes the required form of the 
>> conditional branch part of the pattern.
>> 
>> Ok for trunk?
>> 
>>      paul
>> 
>> ChangeLog:
>> 
>> 2018-07-11  Paul Koning  <n...@arrl.net>
>> 
>>      * doc/rtl.texi (REG_NONNEG): Remove decrement and branch until
>>      zero reference, add doloop_end instead.
>>      * doc/md.texi (decrement_and_branch_until_zero): Remove.
>>      (Looping patterns): Remove decrement_and_branch_until_zero.  Add
>>      detail for doloop_end.
> OK.  I wonder if we can eliminate REG_NONNEG at this point.  I'm not
> sure if it's really being used anymore.  I see a reference in the old
> m68k dbra pattern, but that pattern could well be dead at this point.

The original reasoning is that you'd need the note if you have a machine 
instruction that does a loop until negative, and you want to confirm that the 
input is a valid loop count (not negative -- otherwise you'd loop once rather 
than zero times).  If you have a loop instruction that works this way, that 
still matters.  If someone wants to convert m68000 to use doloop_end, for 
example.  Or likewise for vax, which has an unnamed looping pattern that could 
be used but obviously isn't at the moment (since it's unnamed).

Then again... does the code that generates this insn do the checking, i.e., 
avoid generating doloop_end unless it can confirm that the register is 
nonnegative?  It doesn't seem to, at least not the code in "doloop_modify" that 
actually inserts the regnote.  But how can that be valid?  doloop_end by 
definition loops at least once.  If you pass it a negative count, the loop is 
run once for "ge" comparisons, and MAXUINT + count times for insns that use the 
"ne" condition (i.e., all the current ones).  So one would assume that's not 
possible, i.e., you couldn't come through there unless REG_NONNEG is guaranteed 
true.

Currently the only doloop_end insns I can find all have the "ne" comparison so 
the regnote isn't generated.  I'd like to leave this question separate from the 
doc cleanup.  If we want to remove the note, that's easy enough, and the doc 
change would be pretty obvious as well.

So is this patch OK to commit?

        paul

Reply via email to