source: icGREP/icgrep-devel/icgrep/pablo/pe_phi.h @ 5792

Last change on this file since 5792 was 5371, checked in by nmedfort, 2 years ago

Bug fix for long advance

File size: 1.2 KB
Line 
1#ifndef PE_PHI_H
2#define PE_PHI_H
3
4#include <pablo/pabloAST.h>
5
6namespace pablo {
7
8class Phi : public PabloAST {
9    friend class PabloBlock;
10public:
11    static inline bool classof(const PabloAST * e) {
12        return e->getClassTypeId() == ClassTypeId::Phi;
13    }
14    static inline bool classof(const void *) {
15        return false;
16    }
17    virtual ~Phi(){
18    }
19    void addIncomingValue(PabloAST * const value) {
20        assert (getType() == value->getType());
21        for (unsigned i = 0; i < getNumIncomingValues(); ++i) {
22            if (LLVM_UNLIKELY(getIncomingValue(i) == value)) {
23                return;
24            }
25        }
26        assert (mNumIncomingValues < 2);
27        mIncomingValue[mNumIncomingValues++] = value;
28    }
29    PabloAST * getIncomingValue(const unsigned i) const {
30        assert (i < mNumIncomingValues);
31        return mIncomingValue[i];
32    }
33    unsigned getNumIncomingValues() const {
34        return mNumIncomingValues;
35    }
36protected:
37    Phi(llvm::Type * type, Allocator & allocator)
38    : PabloAST(ClassTypeId::Phi, type, allocator)
39    , mNumIncomingValues(0) {
40
41    }
42private:
43    unsigned   mNumIncomingValues;
44    PabloAST * mIncomingValue[2];
45};
46
47}
48
49#endif
Note: See TracBrowser for help on using the repository browser.