Ignore:
Timestamp:
Jan 13, 2015, 4:01:06 PM (4 years ago)
Author:
nmedfort
Message:

Many use def info changes; removed dependency on boost system library. More work still needed on CSE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/pabloAST.h

    r4415 r4416  
    3232    friend class SymbolGenerator;
    3333    typedef std::unordered_map<std::string, PMDNode *> PMDNodeMap;
     34
    3435public:
     36
     37    using Users = SetVector<PabloAST *>;
     38    using user_iterator = Users::iterator;
     39
    3540    typedef SlabAllocator<4096> Allocator;
    3641    enum class ClassTypeId : unsigned {
     
    6671    }
    6772
     73    inline user_iterator user_begin() const {
     74        return mUsers.begin();
     75    }
     76
     77    inline user_iterator user_end() const {
     78        return mUsers.end();
     79    }
     80
     81    inline Users & users() {
     82        return mUsers;
     83    }
     84
     85    inline const Users & users() const {
     86        return mUsers;
     87    }
     88
     89    void replaceAllUsesWith(PabloAST * expr);
     90
     91    inline Users::size_type getNumUses() const {
     92        return mUsers.size();
     93    }
     94
    6895    void* operator new (std::size_t size) noexcept {
    6996        return mAllocator.allocate(size);
     
    76103
    77104    }
    78     inline void addUser(PabloAST * user) {
     105    inline void addUser(PabloAST * user) {       
    79106        mUsers.insert(user);
    80107    }
     
    85112private:
    86113    const ClassTypeId       mClassTypeId;
    87     SetVector<PabloAST *>   mUsers;
     114    Users                   mUsers;
    88115    PMDNodeMap *            mMetadataMap;
    89116};
     
    99126    friend class If;
    100127    friend class While;
     128    friend class Simplifier;
    101129    friend class PabloBlock;
    102130public:
     
    104132        switch (e->getClassTypeId()) {
    105133            case PabloAST::ClassTypeId::String:
     134            case PabloAST::ClassTypeId::Integer:
     135            case PabloAST::ClassTypeId::Zeroes:
     136            case PabloAST::ClassTypeId::Ones:
     137            case PabloAST::ClassTypeId::Var:
    106138                return false;
    107139            default:
     
    116148    }
    117149
    118     inline PabloAST * replaceUsesOfWith(PabloAST * from, PabloAST * to) {
    119         if (from == to) {
    120             return this;
    121         }
     150    inline void replaceUsesOfWith(PabloAST * from, PabloAST * to) {
    122151        for (unsigned i = 0; i != getNumOperands(); ++i) {
    123152            if (getOperand(i) == from) {
    124                 return setOperand(i, to);
     153                setOperand(i, to);
    125154            }
    126155        }
    127         return this;
    128     }
    129 
    130     PabloAST * getOperand(const unsigned index) const {
     156    }
     157
     158    inline PabloAST * getOperand(const unsigned index) const {
    131159        assert (index < getNumOperands());
    132160        return mOperand[index];
    133161    }
    134162
    135     PabloAST * setOperand(const unsigned index, PabloAST * value);
    136 
    137     unsigned getNumOperands() const {
     163    void setOperand(const unsigned index, PabloAST * value);
     164
     165    inline unsigned getNumOperands() const {
    138166        return mOperand.size();
    139167    }
     
    141169    void insertBefore(Statement * const statement);
    142170    void insertAfter(Statement * const statement);
    143     void removeFromParent();
    144     void replaceWith(Statement * const statement);
     171    Statement * removeFromParent();
     172    Statement * eraseFromParent(const bool recursively = false);
     173    void replaceWith(PabloAST * const expr);
    145174
    146175    inline const String * getName() const {
     
    169198        }
    170199    }
    171 
     200    inline void setName(const String * name) {
     201        mName = name;
     202    }
    172203    virtual ~Statement() = 0;
    173204protected:
     
    397428    }
    398429
    399     Statement * front() const {
     430    inline Statement * front() const {
    400431        return mFirst;
    401432    }
    402433
    403     Statement * back() const {
     434    inline Statement * back() const {
    404435        return mLast;
    405436    }
    406437
    407     void setInsertPoint(Statement * const statement);
    408 
    409     void setInsertPoint(StatementList * const list);
    410 
    411     Statement * getInsertPoint() const {
     438    inline void setInsertPoint(Statement * const statement) {
     439        mInsertionPoint = statement;
     440    }
     441
     442    inline void setInsertPoint(StatementList * const list) {
     443        mInsertionPoint = list->back();
     444    }
     445
     446    inline Statement * getInsertPoint() const {
    412447        return mInsertionPoint;
    413448    }
    414449
    415450    void insert(Statement * const statement);
    416 
    417     void insertAfterLastOperand(Statement * const statement);
    418451
    419452private:
Note: See TracChangeset for help on using the changeset viewer.