source: icGREP/icgrep-devel/icgrep/pablo/passes/factorizedfg.h @ 4899

Last change on this file since 4899 was 4899, checked in by nmedfort, 4 years ago

Work on lowering + minor bug fixes.

File size: 2.0 KB
RevLine 
[4885]1#ifndef FACTORIZEDFG_H
2#define FACTORIZEDFG_H
3
4#include <boost/container/flat_map.hpp>
5#include <vector>
6
7namespace pablo {
8
9class PabloFunction;
10class PabloBlock;
11class Variadic;
[4890]12class Not;
[4885]13class Statement;
14class PabloAST;
15
16class FactorizeDFG {
17    using ScopeDepth = boost::container::flat_map<const PabloBlock *, unsigned>;
[4899]18    using ScopeSet = std::vector<PabloBlock *>;
19    using ASTVector = std::vector<PabloAST *>;
20    struct OrderingMap {
21        unsigned of(const PabloAST * const expr) const {
22            auto f = mMap.find(expr);
23            if (f == mMap.end()) {
24                return mParent ? mParent->of(expr) : 0;
25            }
26            return f->second;
27        }
28        inline void enumerate(const PabloAST * const expr) {
29            mMap.emplace(expr, ++mOrderingCount);
30        }
31        OrderingMap() :  mParent(nullptr), mOrderingCount(0) {}
32        OrderingMap(OrderingMap * const parent) :  mParent(parent), mOrderingCount(parent->mOrderingCount) {}
33        ~OrderingMap() { if (mParent) { mParent->mOrderingCount = mOrderingCount; } }
34    private:
35        OrderingMap * const mParent;
36        unsigned mOrderingCount;
37        boost::container::flat_map<const PabloAST *, unsigned> mMap;
38    };
39
[4885]40public:
41    static void transform(PabloFunction & function);
42protected:   
[4899]43    void enumerateScopeDepth(const PabloFunction & function);
44    void enumerateScopeDepth(const PabloBlock * const block, const unsigned depth);
45    void cse(PabloBlock * const block);
46    void cse(Variadic * const var);
47    PabloBlock * chooseInsertionScope(const ASTVector & users);
48    void findInsertionPoint(const ASTVector & operands, PabloBlock * const scope);
49    void lower(PabloFunction & function);
50//    void lower(PabloBlock * const block, OrderingMap & parent);
51//    PabloAST * lower(Variadic * const var, PabloBlock * block, OrderingMap & order);
52    void lower(PabloBlock * const block);
53    Statement * lower(Variadic * const var, PabloBlock * block);
[4885]54    FactorizeDFG() = default;
55private:
56    ScopeDepth  mScopeDepth;
57};
58
59}
60
61#endif // FACTORIZEDFG_H
Note: See TracBrowser for help on using the repository browser.