| Index: src/IceLoopAnalyzer.h
|
| diff --git a/src/IceLoopAnalyzer.h b/src/IceLoopAnalyzer.h
|
| index eaaad9862045b3a420e0ba2fb724f75e611b8751..a8924bb4b7e6ad9ee17069c83876d5c5c401d242 100644
|
| --- a/src/IceLoopAnalyzer.h
|
| +++ b/src/IceLoopAnalyzer.h
|
| @@ -36,12 +36,13 @@ public:
|
| /// This only computes the loop nest depth within the function and does not
|
| /// take into account whether the function was called from within a loop.
|
| // TODO(ascull): this currently uses a extension of Tarjan's algorithm with
|
| - // is bounded linear. ncbray suggests another algorithm which is linear in
|
| + // is bounded linear. ncbray suggests another algorithm whichis linear in
|
| // practice but not bounded linear. I think it also finds dominators.
|
| // http://lenx.100871.net/papers/loop-SAS.pdf
|
| - void computeLoopNestDepth();
|
| + CfgUnorderedMap<SizeT, CfgVector<SizeT>> getLoopInfo() { return Loops; }
|
|
|
| private:
|
| + void computeLoopNestDepth();
|
| using IndexT = uint32_t;
|
| static constexpr IndexT UndefinedIndex = 0;
|
| static constexpr IndexT FirstDefinedIndex = 1;
|
| @@ -80,6 +81,8 @@ private:
|
| void incrementLoopNestDepth();
|
| bool hasSelfEdge() const;
|
|
|
| + CfgNode *getNode() { return BB; }
|
| +
|
| private:
|
| CfgNode *BB;
|
| NodeList::const_iterator Succ;
|
| @@ -110,6 +113,8 @@ private:
|
| /// The number of nodes which have been marked deleted. This is used to track
|
| /// when the iteration should end.
|
| LoopNodePtrList::size_type NumDeletedNodes = 0;
|
| + /// Detailed loop information
|
| + CfgUnorderedMap<SizeT, CfgVector<SizeT>> Loops;
|
| };
|
|
|
| } // end of namespace Ice
|
|
|