source: icGREP/icgrep-devel/icgrep/pablo/boolean.h @ 5400

Last change on this file since 5400 was 5267, checked in by nmedfort, 3 years ago

Code clean-up. Removed Pablo Call, SetIthBit? and Prototype.

File size: 4.0 KB
RevLine 
[5217]1#ifndef BOOLEAN_H
2#define BOOLEAN_H
3
4#include <pablo/pabloAST.h>
5
6namespace pablo {
7
8class And : public Variadic {
9    friend class PabloBlock;
10public:
11    static inline bool classof(const PabloAST * e) {
12        return e->getClassTypeId() == ClassTypeId::And;
13    }
14    static inline bool classof(const void *) {
15        return false;
16    }
17    virtual ~And() { }
18protected:
[5267]19    And(llvm::Type * const type, PabloAST * expr1, PabloAST * expr2, const String * name, Allocator & allocator)
[5230]20    : Variadic(ClassTypeId::And, type, {expr1, expr2}, name, allocator)
[5217]21    {
22
23    }
[5267]24    And(llvm::Type * const type, const unsigned reserved, const String * name, Allocator & allocator)
[5230]25    : Variadic(ClassTypeId::And, type, reserved, name, allocator)
[5217]26    {
27
28    }
29    template<typename iterator>
[5267]30    And(llvm::Type * const type, iterator begin, iterator end, const String * name, Allocator & allocator)
[5230]31    : Variadic(ClassTypeId::And, type, begin, end, name, allocator) {
[5217]32
33    }
34};
35
36class Or : public Variadic {
37    friend class PabloBlock;
38public:
39    static inline bool classof(const PabloAST * e) {
40        return e->getClassTypeId() == ClassTypeId::Or;
41    }
42    static inline bool classof(const void *) {
43        return false;
44    }
45    virtual ~Or() { }
46protected:
[5267]47    Or(llvm::Type * const type, PabloAST * expr1, PabloAST * expr2, const String * name, Allocator & allocator)
[5230]48    : Variadic(ClassTypeId::Or, type, {expr1, expr2}, name, allocator)
[5217]49    {
50
51    }
[5267]52    Or(llvm::Type * const type, const unsigned reserved, const String * name, Allocator & allocator)
[5230]53    : Variadic(ClassTypeId::Or, type, reserved, name, allocator)
[5217]54    {
55
56    }
57    template<typename iterator>
[5267]58    Or(llvm::Type * const type, iterator begin, iterator end, const String * name, Allocator & allocator)
[5230]59    : Variadic(ClassTypeId::Or, type, begin, end, name, allocator) {
[5217]60
61    }
62};
63
64class Xor : public Variadic {
65    friend class PabloBlock;
66public:
67    static inline bool classof(const PabloAST * e) {
68        return e->getClassTypeId() == ClassTypeId::Xor;
69    }
70    static inline bool classof(const void *) {
71        return false;
72    }
73protected:
[5267]74    Xor(llvm::Type * const type, PabloAST * expr1, PabloAST * expr2, const String * name, Allocator & allocator)
[5230]75    : Variadic(ClassTypeId::Xor, type, {expr1, expr2}, name, allocator)
[5217]76    {
77
78    }
[5267]79    Xor(llvm::Type * const type, const unsigned reserved, const String * name, Allocator & allocator)
[5230]80    : Variadic(ClassTypeId::Xor, type, reserved, name, allocator)
[5217]81    {
82
83    }
84    template<typename iterator>
[5267]85    Xor(llvm::Type * const type, iterator begin, iterator end, const String * name, Allocator & allocator)
[5230]86    : Variadic(ClassTypeId::Xor, type, begin, end, name, allocator) {
[5217]87
88    }
89};
90
91class Not : public Statement {
92    friend class PabloBlock;
93public:
94    static inline bool classof(const PabloAST * e) {
95        return e->getClassTypeId() == ClassTypeId::Not;
96    }
97    static inline bool classof(const void *) {
98        return false;
99    }
100    virtual ~Not() {
101    }
102    PabloAST * getExpr() const {
103        return getOperand(0);
104    }
105protected:
[5230]106    Not(PabloAST * expr, const String * name, Allocator & allocator)
107    : Statement(ClassTypeId::Not, expr->getType(), {expr}, name, allocator)
[5217]108    {
109
110    }
111};
112
113class Sel : public Statement {
114    friend class PabloBlock;
115public:
116    static inline bool classof(const PabloAST * e) {
117        return e->getClassTypeId() == ClassTypeId::Sel;
118    }
119    static inline bool classof(const void *) {
120        return false;
121    }
122    virtual ~Sel() {
123    }
124    inline PabloAST * getCondition() const {
125        return getOperand(0);
126    }
127    inline PabloAST * getTrueExpr() const {
128        return getOperand(1);
129    }
130    inline PabloAST * getFalseExpr() const {
131        return getOperand(2);
132    }
133protected:
[5230]134    Sel(PabloAST * condExpr, PabloAST * trueExpr, PabloAST * falseExpr, const String * name, Allocator & allocator)
135    : Statement(ClassTypeId::Sel, trueExpr->getType(), {condExpr, trueExpr, falseExpr}, name, allocator) {
[5217]136
137    }
138};
139
140}
141
142#endif // BOOLEAN_H
Note: See TracBrowser for help on using the repository browser.