[llvm-dev] LoopSimplify pass prevents loop unrolling
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Fri Jun 30 11:54:04 PDT 2017
On 6/30/2017 11:38 AM, Balaram Makam wrote:
> Thanks Eli,
> I was looking at this code which keeps track of loop headers but is
> checking if the destination of branch is a loop header sufficient?
> This prevents merging empty preheaders into the loop headers as well.
There isn't really any reason to collapse preheaders anyway;
LoopSimplify will recreate them, and they don't really block other
optimizations as far as I know.
> Is that reasonable approach or do we need to skip only if the original
> unconditional branch was a backedge and folding this branch might
> result in additional backedges? I made a quick hack to find the
> function backedges and skip simplifycfg to merge the latch block into
> the loop header when it results in an additional backedge. Although it
> solves my purpose I am not sure if this the right approach, as finding
> the backedges looks expensive.
Well, not that expensive to calculate if you cache it, but probably
tricky to keep the cache up-to-date, yes.
> I also found a regression with this patch where a huge switch
> statement with multiple empty blocks have been skipped from merging
> resulting in bad code. Instead, should loopsimplify try to unify
> multiple exit blocks and collapse multiple backedges whenever possible
> instead of splitting it out into a nested loop?
I'm not sure I follow the issue here. Could you give an example?
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev