Ignore:
Timestamp:
Jan 10, 2015, 10:27:13 AM (4 years ago)
Author:
nmedfort
Message:

Minor changes towards maintaining UseDef? information.

File:
1 edited

Legend:

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

    r4410 r4414  
    2525class PabloAST {
    2626    friend class PMDNode;
    27     friend class Advance;
    28     friend class And;
    29     friend class Assign;
    30     friend class Call;
     27    friend class Statement;
     28    friend class Var;
    3129    friend class If;
    32     friend class MatchStar;
    33     friend class Next;
    34     friend class Not;
    35     friend class Ones;
    36     friend class Or;
    37     friend class ScanThru;
    38     friend class Sel;
    39     friend class String;
    40     friend class Var;
    4130    friend class While;
    42     friend class Xor;
    43     friend class Zeroes;
    4431    friend class PabloBlock;
    4532    friend class SymbolGenerator;
     
    9481        mUsers.remove(user);
    9582    }
    96     // virtual void removeUsageFromDefs() = 0;
    9783    static Allocator        mAllocator;
    9884private:
     
    130116
    131117    inline void replaceUsesOfWith(PabloAST * from, PabloAST * to) {
    132         if (from == to) {
     118        if (LLVM_UNLIKELY(from == to)) {
    133119            return;
    134120        }
     
    140126    }
    141127
    142     virtual PabloAST * getOperand(const unsigned index) const = 0;
    143 
    144     virtual unsigned getNumOperands() const = 0;
    145 
    146     virtual void setOperand(const unsigned index, PabloAST * value) = 0;
     128    PabloAST * getOperand(const unsigned index) const {
     129        assert (index < getNumOperands());
     130        return mOperand[index];
     131    }
     132
     133    unsigned getNumOperands() const {
     134        return mOperand.size();
     135    }
     136
     137    void setOperand(const unsigned index, PabloAST * value) {
     138        assert (index < getNumOperands());
     139        mOperand[index] = value;
     140    }
    147141
    148142    void insertBefore(Statement * const statement);
     
    164158    }
    165159protected:
    166     Statement(const ClassTypeId id, const String * name, PabloBlock * parent)
     160    Statement(const ClassTypeId id, std::vector<PabloAST *> && operands, const String * name, PabloBlock * parent)
    167161    : PabloAST(id)
    168162    , mName(name)
     
    170164    , mPrev(nullptr)
    171165    , mParent(parent)
     166    , mOperand(std::move(operands))
    172167    {
    173 
     168        for (PabloAST * op : mOperand) {
     169            op->addUser(this);
     170        }
    174171    }
    175172    virtual ~Statement() = 0;
    176173protected:
    177     const String * mName;
    178     Statement * mNext;
    179     Statement * mPrev;
    180     PabloBlock * mParent;
     174    const String *              mName;
     175    Statement *                 mNext;
     176    Statement *                 mPrev;
     177    PabloBlock *                mParent;
     178    std::vector<PabloAST *>     mOperand;
     179
    181180};
    182181
Note: See TracChangeset for help on using the changeset viewer.