@@ -1632,29 +1632,6 @@ BlockFrequencyInfoImplBase::Scaled64 BlockFrequencyInfoImpl<BT>::discrepancy(
1632
1632
}
1633
1633
#endif
1634
1634
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
-
1658
1635
template <class BT >
1659
1636
void BlockFrequencyInfoImpl<BT>::computeIrreducibleMass(
1660
1637
LoopData *OuterLoop, std::list<LoopData>::iterator Insert) {
@@ -1665,9 +1642,12 @@ void BlockFrequencyInfoImpl<BT>::computeIrreducibleMass(
1665
1642
1666
1643
using namespace bfi_detail ;
1667
1644
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
+ };
1671
1651
IrreducibleGraph G (*this , OuterLoop, addBlockEdges);
1672
1652
1673
1653
for (auto &L : analyzeIrreducible (G, OuterLoop, Insert))
0 commit comments