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

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

Multiplexing bug fix and some CC changes.

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    inline Var * createVar(const std::string name) {
23        return mPb.createVar(name);
24    }
25
26    inline Var * createVar(String * const name) {
27        return mPb.createVar(name);
28    }
29
30    inline Var * createVar(PabloAST * const name) {
31        return mPb.createVar(name);
32    }
33
34    inline Call * createCall(const std::string name) {
35        return createCall(mPb.getName(name));
36    }
37
38    Call * createCall(String * name);
39
40    Assign * createAssign(const std::string && prefix, PabloAST * expr, const int outputIndex = -1) {
41        return mPb.createAssign(std::move(prefix), expr, outputIndex);
42    }
43
44    inline PabloAST * createAdvance(PabloAST * expr, const Integer::integer_t shiftAmount) {
45        if (shiftAmount == 0) {
46            return expr;
47        }
48        return createAdvance(expr, mPb.getInteger(shiftAmount));
49    }
50
51    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount);
52
53    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount, const std::string prefix);
54
55    Next * createNext(Assign * assign, PabloAST * expr);
56
57    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2);
58
59    PabloAST * createNot(PabloAST * expr);
60
61    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2);
62
63    PabloAST * createXor(PabloAST * expr1, PabloAST * expr2);
64
65    PabloAST * createMatchStar(PabloAST * marker, PabloAST * charclass);
66
67    PabloAST * createScanThru(PabloAST * from, PabloAST * thru);
68
69    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr);
70
71    inline If * createIf(PabloAST * condition, std::initializer_list<Assign *> definedVars, PabloBlock & body) {
72        return mPb.createIf(condition, std::move(definedVars), body);
73    }
74
75    inline If * createIf(PabloAST * condition, std::vector<Assign *> definedVars, PabloBlock & body) {
76        return mPb.createIf(condition, std::move(definedVars), body);
77    }
78
79    inline While * createWhile(PabloAST * condition, PabloBlock & body) {
80        return mPb.createWhile(condition, body);
81    }
82
83    inline Statement * front() const {
84        return mPb.front();
85    }
86
87    inline Statement * back() const {
88        return mPb.back();
89    }
90
91    inline void setInsertPoint(Statement * const statement) {
92        mPb.setInsertPoint(statement);
93    }
94
95    inline void setInsertPoint(StatementList * const list) {
96        mPb.setInsertPoint(list);
97    }
98
99    inline Statement * getInsertPoint() const {
100        return mPb.getInsertPoint();
101    }
102
103private:
104
105    PabloBlock &        mPb;
106    ExpressionTable     mExprTable;
107};
108
109
110}
111
112
113#endif // BUILDER_HPP
Note: See TracBrowser for help on using the repository browser.