[llvm] r373045 - [LoopInfo] Remove duplicates in ExitBlocks to reduce the compile time of
Wei Mi via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 26 22:43:31 PDT 2019
Author: wmi
Date: Thu Sep 26 22:43:31 2019
New Revision: 373045
URL: http://llvm.org/viewvc/llvm-project?rev=373045&view=rev
Log:
[LoopInfo] Remove duplicates in ExitBlocks to reduce the compile time of
hasDedicatedExits.
For the compile time problem described in https://reviews.llvm.org/D67359,
turns out the root cause is there are many duplicates in ExitBlocks so
the algorithm complexity of hasDedicatedExits gets very high. If we remove
the duplicates, the compile time issue is gone.
Thanks to Philip Reames for raising a good question and it leads me to
find the root cause.
Differential Revision: https://reviews.llvm.org/D68107
Modified:
llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h
Modified: llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h?rev=373045&r1=373044&r2=373045&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h Thu Sep 26 22:43:31 2019
@@ -85,9 +85,9 @@ template <class BlockT, class LoopT>
bool LoopBase<BlockT, LoopT>::hasDedicatedExits() const {
// Each predecessor of each exit block of a normal loop is contained
// within the loop.
- SmallVector<BlockT *, 4> ExitBlocks;
- getExitBlocks(ExitBlocks);
- for (BlockT *EB : ExitBlocks)
+ SmallVector<BlockT *, 4> UniqueExitBlocks;
+ getUniqueExitBlocks(UniqueExitBlocks);
+ for (BlockT *EB : UniqueExitBlocks)
for (BlockT *Predecessor : children<Inverse<BlockT *>>(EB))
if (!contains(Predecessor))
return false;
More information about the llvm-commits
mailing list