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

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

More Pablo IR manipulation functionality; finished use analysis optimizer (requires boost). Removed remaining LLVM optimization passes.

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