source: icGREP/icgrep-devel/icgrep/pablo/pe_next.h @ 4410

Last change on this file since 4410 was 4410, checked in by nmedfort, 5 years ago

Changes to support 3-operand form for all instructions. CSE disabled but partially redundant now.

File size: 1.4 KB
Line 
1#ifndef PE_NEXT_H
2#define PE_NEXT_H
3
4#include <pablo/pabloAST.h>
5#include <pablo/ps_assign.h>
6#include <pablo/symbol_generator.h>
7#include <array>
8
9namespace pablo {
10
11class Assign;
12
13class Next : public Statement {
14    friend class PabloBlock;
15public:
16    static inline bool classof(const PabloAST * e) {
17        return e->getClassTypeId() == ClassTypeId::Next;
18    }
19    static inline bool classof(const void *) {
20        return false;
21    }
22    virtual PabloAST * getOperand(const unsigned index) const {
23        assert (index < 2);
24        return mExprs[index];
25    }
26    virtual unsigned getNumOperands() const {
27        return 2;
28    }
29    virtual void setOperand(const unsigned index, PabloAST * value) {
30        assert (index < 2);
31        assert (index == 0 || isa<Assign>(value));
32        mExprs[index] = value;
33    }
34    inline const Assign * getInitial() const {
35        return cast<const Assign>(mExprs[0]);
36    }
37    inline const String * getName() const {
38        return getInitial()->getName();
39    }
40    inline PabloAST * getExpr() const {
41        return mExprs[1];
42    }
43protected:
44    Next(PabloAST * initial, PabloAST * expr, PabloBlock * parent)
45    : Statement(ClassTypeId::Next, cast<Assign>(initial)->getName(), parent)
46    , mExprs({{cast<Assign>(initial), expr}}) {
47        initial->addUser(this);
48        expr->addUser(this);
49    }
50private:
51    std::array<PabloAST*, 2>  mExprs;
52};
53
54}
55
56
57#endif // PE_NEXT_H
Note: See TracBrowser for help on using the repository browser.