source: icGREP/icgrep-devel/icgrep/pablo/builder.hpp @ 4603

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

Temporary check-in

File size: 2.9 KB
Line 
1#ifndef BUILDER_HPP
2#define BUILDER_HPP
3
4#include "codegenstate.h"
5#include "expression_map.hpp"
6
7namespace pablo {
8
9class PabloBuilder {
10public:
11
12    PabloBuilder(PabloBlock & pb) : mPb(pb) {}
13
14    inline Zeroes * createZeroes() const {
15        return mPb.createZeroes();
16    }
17
18    inline Ones * createOnes() const {
19        return mPb.createOnes();
20    }
21
22    Var * createVar(const std::string name) {
23        return createVar(mPb.getName(name));
24    }
25
26    Var * createVar(String * name);
27
28    PabloAST * createVar(const PabloAST * const) {
29        throw std::runtime_error("Var objects should only refer to external Vars (i.e., input basis bit streams). Use Assign objects directly.");
30    }
31
32    inline Call * createCall(const std::string name) {
33        return createCall(mPb.getName(name));
34    }
35
36    Call * createCall(String * name);
37
38    Assign * createAssign(const std::string prefix, PabloAST * expr, const int outputIndex = -1) {
39        return mPb.createAssign(prefix, expr, outputIndex);
40    }
41
42    inline PabloAST * createAdvance(PabloAST * expr, const Integer::integer_t shiftAmount) {
43        if (shiftAmount == 0) {
44            return expr;
45        }
46        return createAdvance(expr, mPb.getInteger(shiftAmount));
47    }
48
49    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount);
50
51    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount, const std::string prefix);
52
53    Next * createNext(Assign * assign, PabloAST * expr);
54
55    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2);
56
57    PabloAST * createNot(PabloAST * expr);
58
59    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2);
60
61    PabloAST * createXor(PabloAST * expr1, PabloAST * expr2);
62
63    PabloAST * createMatchStar(PabloAST * marker, PabloAST * charclass);
64
65    PabloAST * createScanThru(PabloAST * from, PabloAST * thru);
66
67    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr);
68
69    inline If * createIf(PabloAST * condition, std::initializer_list<Assign *> definedVars, PabloBlock & body) {
70        return mPb.createIf(condition, std::move(definedVars), body);
71    }
72
73    inline If * createIf(PabloAST * condition, std::vector<Assign *> definedVars, PabloBlock & body) {
74        return mPb.createIf(condition, std::move(definedVars), body);
75    }
76
77    inline While * createWhile(PabloAST * condition, PabloBlock & body) {
78        return mPb.createWhile(condition, body);
79    }
80
81    inline Statement * front() const {
82        return mPb.front();
83    }
84
85    inline Statement * back() const {
86        return mPb.back();
87    }
88
89    inline void setInsertPoint(Statement * const statement) {
90        mPb.setInsertPoint(statement);
91    }
92
93    inline void setInsertPoint(StatementList * const list) {
94        mPb.setInsertPoint(list);
95    }
96
97    inline Statement * getInsertPoint() const {
98        return mPb.getInsertPoint();
99    }
100
101private:
102
103    PabloBlock &        mPb;
104    ExpressionTable     mExprTable;
105};
106
107
108}
109
110
111#endif // BUILDER_HPP
Note: See TracBrowser for help on using the repository browser.