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

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

Fixed PabloBuilder? and intergrated it into CC Compiler.

File size: 2.4 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    Next * createNext(Assign * assign, PabloAST * expr);
52
53    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2);
54
55    PabloAST * createNot(PabloAST * expr);
56
57    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2);
58
59    PabloAST * createXor(PabloAST * expr1, PabloAST * expr2);
60
61    PabloAST * createMatchStar(PabloAST * marker, PabloAST * charclass);
62
63    PabloAST * createScanThru(PabloAST * from, PabloAST * thru);
64
65    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr);
66
67    inline If * createIf(PabloAST * condition, std::initializer_list<Assign *> definedVars, PabloBlock & body) {
68        return mPb.createIf(condition, std::move(definedVars), body);
69    }
70
71    inline If * createIf(PabloAST * condition, std::vector<Assign *> definedVars, PabloBlock & body) {
72        return mPb.createIf(condition, std::move(definedVars), body);
73    }
74
75    inline While * createWhile(PabloAST * condition, PabloBlock & body) {
76        return mPb.createWhile(condition, body);
77    }
78
79private:
80
81    PabloBlock &        mPb;
82    ExpressionTable     mExprTable;
83};
84
85
86}
87
88
89#endif // BUILDER_HPP
Note: See TracBrowser for help on using the repository browser.