@@ -1632,29 +1632,6 @@ BlockFrequencyInfoImplBase::Scaled64 BlockFrequencyInfoImpl<BT>::discrepancy(
16321632}
16331633#endif
16341634
1635- // / \note This should be a lambda, but that crashes GCC 4.7.
1636- namespace bfi_detail {
1637-
1638- template <class BT > struct BlockEdgesAdder {
1639- using BlockT = BT;
1640- using LoopData = BlockFrequencyInfoImplBase::LoopData;
1641- using Successor = GraphTraits<const BlockT *>;
1642-
1643- const BlockFrequencyInfoImpl<BT> &BFI;
1644-
1645- explicit BlockEdgesAdder (const BlockFrequencyInfoImpl<BT> &BFI)
1646- : BFI(BFI) {}
1647-
1648- void operator ()(IrreducibleGraph &G, IrreducibleGraph::IrrNode &Irr,
1649- const LoopData *OuterLoop) {
1650- const BlockT *BB = BFI.RPOT [Irr.Node .Index ];
1651- for (const auto *Succ : children<const BlockT *>(BB))
1652- G.addEdge (Irr, BFI.getNode (Succ), OuterLoop);
1653- }
1654- };
1655-
1656- } // end namespace bfi_detail
1657-
16581635template <class BT >
16591636void BlockFrequencyInfoImpl<BT>::computeIrreducibleMass(
16601637 LoopData *OuterLoop, std::list<LoopData>::iterator Insert) {
@@ -1665,9 +1642,12 @@ void BlockFrequencyInfoImpl<BT>::computeIrreducibleMass(
16651642
16661643 using namespace bfi_detail ;
16671644
1668- // Ideally, addBlockEdges() would be declared here as a lambda, but that
1669- // crashes GCC 4.7.
1670- BlockEdgesAdder<BT> addBlockEdges (*this );
1645+ auto addBlockEdges = [&](IrreducibleGraph &G, IrreducibleGraph::IrrNode &Irr,
1646+ const LoopData *OuterLoop) {
1647+ const BlockT *BB = RPOT[Irr.Node .Index ];
1648+ for (const auto *Succ : children<const BlockT *>(BB))
1649+ G.addEdge (Irr, getNode (Succ), OuterLoop);
1650+ };
16711651 IrreducibleGraph G (*this , OuterLoop, addBlockEdges);
16721652
16731653 for (auto &L : analyzeIrreducible (G, OuterLoop, Insert))
0 commit comments