[llvm] r314937 - [MachineBlockPlacement] Make sure PreferredLoopExit is cleared everytime new loop is processed

Bruno Cardoso Lopes via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 5 17:52:02 PDT 2017


This is breaking our internal stage2 bots:

Assertion failed: (L.isLoopExiting(PreferredLoopExit) && "not an
exiting block of current loop"), function buildLoopChains, file
/clang/src/lib/CodeGen/MachineBlockPlacement.cpp, line 2246.

It triggers when stage1 is compiling stage2's BranchFolding.cpp. I
don't have a reproducer I can share at the moment, do you mind If I
revert this until I can provide you a reduced testcase?

Thanks,

On Wed, Oct 4, 2017 at 2:39 PM, Xin Tong via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: trentxintong
> Date: Wed Oct  4 14:39:25 2017
> New Revision: 314937
>
> URL: http://llvm.org/viewvc/llvm-project?rev=314937&view=rev
> Log:
> [MachineBlockPlacement] Make sure PreferredLoopExit is cleared everytime new loop is processed
>
> Summary: Rotate on exit that actually exits the current loop.
>
> Reviewers: davidxl, danielcdh, iteratee, chandlerc
>
> Subscribers: llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D38563
>
> Modified:
>     llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
>
> Modified: llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp?rev=314937&r1=314936&r2=314937&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp Wed Oct  4 14:39:25 2017
> @@ -2233,9 +2233,19 @@ void MachineBlockPlacement::buildLoopCha
>    // If we selected just the header for the loop top, look for a potentially
>    // profitable exit block in the event that rotating the loop can eliminate
>    // branches by placing an exit edge at the bottom.
> +  //
> +  // Loops are processed innermost to uttermost, make sure we clear
> +  // PreferredLoopExit before processing a new loop.
> +  PreferredLoopExit = nullptr;
>    if (!RotateLoopWithProfile && LoopTop == L.getHeader())
>      PreferredLoopExit = findBestLoopExit(L, LoopBlockSet);
>
> +  // Make sure PreferredLoopExit actually exits the current loop.
> +  if (PreferredLoopExit) {
> +    assert(L.isLoopExiting(PreferredLoopExit) &&
> +           "not an exiting block of current loop");
> +  }
> +
>    BlockChain &LoopChain = *BlockToChain[LoopTop];
>
>    // FIXME: This is a really lame way of walking the chains in the loop: we
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc


More information about the llvm-commits mailing list