[llvm-dev] canonical form loops

Michael Kruse via llvm-dev llvm-dev at lists.llvm.org
Sat Mar 28 02:32:50 PDT 2020

The topic came up before, e.g. https://reviews.llvm.org/D60565#1484984

> Some canonicalization passes are designed for this. In particular, IndVarSimplify used to make canonical loops (i.e. start at zero, increment by one). r133502 introduced -disable-iv-rewrite to rely more on ScalarEvolution instead of "opcode/pattern matching" (cite from the commit message). -enable-iv-rewrite=false was made the default in r139579 after finding that it slows down many benchmarks. It was completely removed in r153260.

The general approach in LLVM is to rely on SCEV for analyzing loops
instead of custom handling. As a consequence, any loop structure that
is recognized by SCEV will (/should) not profit from rewriting.


Am Do., 26. März 2020 um 15:56 Uhr schrieb Sjoerd Meijer via llvm-dev
<llvm-dev at lists.llvm.org>:
> Hello,
> Quick question to see if I haven't missed anything: I would like convert counting down loops, i.e. loops with a constant -1 step value, to counting up loops, because the vectoriser is able to better deal with these loops (see e.g. D76838 that I was discussing today with Ayal). It looks like LoopSimplifyCFG and IndVarSimplify don't do this. So was just curious if I haven't missed anything here or in another pass I haven't yet considered. I was perhaps also expecting this to be the canonical form of loops, but couldn't find any evidence of that in [1] or in source-code.
> The obvious follow-up question is if there would be any objections to adding this to e.g. LoopSimplifyCFG, and adding LoopSimplifyCFG to the optimisation pipeline just before the vectoriser.
> Cheers,
> Sjoerd.
> [1] https://llvm.org/docs/LoopTerminology.html
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

More information about the llvm-dev mailing list