> On Jun 8, 2018, at 6:16 PM, Jim Wilson <j...@sifive.com> wrote:
> 
> On Fri, Jun 8, 2018 at 1:12 PM, Paul Koning <paulkon...@comcast.net> wrote:
>> Thanks.  I saw those sections and interpreted them as support for signal 
>> processor style fast hardware loops.  If they can be adapted for dbra type 
>> looping, great.  I'll give that a try.
> 
> The rs6000 port uses it for bdnz (branch decrement not zero) for
> instance, which is similar to the m68k dbra.
> 
>> Meanwhile, yes, it looks like there is a documentation bug.  I can clean 
>> that up.  It's more than a few lines, but does that qualify for an "obvious" 
>> change?
> 
> I think the obvious rule should only apply to trivial patches, and
> this will require some non-trivial changes to fix the looping pattern
> section.  Just deleting the decrement_and_branch_until_zero named
> pattern section looks trivial.  It looks like the REG_NONNEG section
> should  mention the doloop_end pattern instead of
> decrement_and_branch_until_zero, since I think the same rule applies
> that they only get generated if the doloop_end pattern exists.

It appears that doloop_end doesn't get a REG_NONNEG pattern.  I just added 
doloop_end to my target and I don't see any such note in the RTL dumps.

By the way, the documentation makes it clear that the register used in the 
doloop isn't available as an "induction variable".  I wonder if there is a way 
to make that restriction go away, since my target -- and I suspect several 
others as well -- use a general register for the loop control.  So as far as 
the target is concerned the loop control register is definitely available.  I 
understand the original restriction for machines like DSPs that loop using 
special-purpose loop registers, but that isn't a universal limitation.

        paul


Reply via email to