Ignore:
Timestamp:
Jan 13, 2018, 11:57:43 AM (15 months ago)
Author:
nmedfort
Message:

Pablo support for byte comparisions; LineFeed? kernel processes byte streams directly. Some clean up of PabloBuilder? functionality.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/builder.hpp

    r5709 r5828  
    1313    template<typename T>
    1414    struct not_null {
    15         inline not_null(T const value) : _value(value) { assert(_value); }
    16         inline not_null(std::nullptr_t) = delete;
    17         inline not_null(unsigned) = delete;
     15        not_null(T const value) : _value(value) { assert(_value); }
     16        not_null(std::nullptr_t) = delete;
     17        not_null(unsigned) = delete;
    1818        operator T() const { return _value; }
    1919        T operator-> () const { return _value; }
     
    5050    using const_iterator = PabloBlock::const_iterator;
    5151
    52     inline static PabloBuilder Create(PabloBlock * block) noexcept {
     52    static PabloBuilder Create(PabloBlock * block) noexcept {
    5353        return PabloBuilder(block);
    5454    }
    5555
    56     inline static PabloBuilder Create(PabloBuilder & builder) noexcept {
     56    static PabloBuilder Create(PabloBuilder & builder) noexcept {
    5757        return PabloBuilder(PabloBlock::Create(builder.getPabloBlock()->getParent()), builder);
    5858    }
    5959
    60     inline Zeroes * createZeroes(llvm::Type * const type = nullptr) {
     60    Zeroes * createZeroes(llvm::Type * const type = nullptr) {
    6161        return mPb->createZeroes(type);
    6262    }
    6363
    64     inline Ones * createOnes(llvm::Type * const type = nullptr) {
     64    Ones * createOnes(llvm::Type * const type = nullptr) {
    6565        return mPb->createOnes(type);
    6666    }
    6767
    68     inline Var * createVar(const llvm::StringRef & name, llvm::Type * const type = nullptr) {
     68    Var * createVar(const llvm::StringRef & name, llvm::Type * const type = nullptr) {
    6969        return createVar(makeName(name), type);
    7070    }
    7171
    72     inline Var * createVar(const llvm::StringRef & name, PabloAST * value) {
    73         Var * var = createVar(name, value->getType());
     72    Var * createVar(const llvm::StringRef & name, PabloAST * value) {
     73        Var * const var = createVar(name, value->getType());
    7474        createAssign(var, value);
    7575        return var;
    7676    }
    7777
    78     inline Var * createVar(String * const name, llvm::Type * const type = nullptr) {
     78    Var * createVar(String * const name, llvm::Type * const type = nullptr) {
    7979        return mPb->createVar(name, type);
    8080    }
    8181
    82     Extract * createExtract(PabloAST * value, not_null<PabloAST *> index);
    83 
    84     inline Extract * createExtract(PabloAST * value, const int64_t index) {
    85         return createExtract(value, getInteger(index));
    86     }
    87 
    88     Extract * createExtract(PabloAST * value, not_null<PabloAST *> index, const llvm::StringRef & prefix);
    89 
    90     inline Extract * createExtract(PabloAST * value, const int64_t index, const llvm::StringRef & prefix) {
    91         return createExtract(value, getInteger(index), prefix);
    92     }
    93 
    94     inline PabloAST * createAdvance(PabloAST * expr, const int64_t shiftAmount) {
     82    Extract * createExtract(Var * const array, not_null<Integer *> index);
     83
     84    Extract * createExtract(Var * const array, const int64_t index) {
     85        return createExtract(array, getInteger(index));
     86    }
     87
     88    Var * createExtract(Var * const array, not_null<Integer *> index, const llvm::StringRef & name) {
     89        return createVar(name, createExtract(array, index));
     90    }
     91
     92    Var * createExtract(Var * const array, const int64_t index, const llvm::StringRef & name) {
     93        return createVar(name, createExtract(array, index));
     94    }
     95
     96    PabloAST * createAdvance(PabloAST * expr, const int64_t shiftAmount) {
     97        if (shiftAmount == 0) {
     98            return expr;
     99        }
    95100        return createAdvance(expr, mPb->getInteger(shiftAmount));
    96101    }
    97102
    98     PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount);
    99 
    100     inline PabloAST * createAdvance(PabloAST * expr, const int64_t shiftAmount, const llvm::StringRef & prefix) {
     103    PabloAST * createAdvance(PabloAST * expr, not_null<Integer *> shiftAmount);
     104
     105    PabloAST * createAdvance(PabloAST * expr, const int64_t shiftAmount, const llvm::StringRef & prefix) {
     106        if (shiftAmount == 0) {
     107            return expr;
     108        }
    101109        return createAdvance(expr, mPb->getInteger(shiftAmount), prefix);
    102110    }
    103111
    104     PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount, const llvm::StringRef & prefix);
    105 
    106     inline PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, const int64_t shiftAmount) {
     112    PabloAST * createAdvance(PabloAST * expr, not_null<Integer *> shiftAmount, const llvm::StringRef & prefix);
     113
     114    PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, const int64_t shiftAmount) {
     115        if (shiftAmount == 0) {
     116            return expr;
     117        }
    107118        return createIndexedAdvance(expr, indexStream, mPb->getInteger(shiftAmount));
    108119    }
    109120   
    110     PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, PabloAST * shiftAmount);
    111    
    112     inline PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, const int64_t shiftAmount, const llvm::StringRef & prefix) {
     121    PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, not_null<Integer *> shiftAmount);
     122   
     123    PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, const int64_t shiftAmount, const llvm::StringRef & prefix) {
     124        if (shiftAmount == 0) {
     125            return expr;
     126        }
    113127        return createIndexedAdvance(expr, indexStream, mPb->getInteger(shiftAmount), prefix);
    114128    }
    115129   
    116     PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, PabloAST * shiftAmount, const llvm::StringRef & prefix);
    117    
    118     inline PabloAST * createLookahead(PabloAST * expr, const int64_t shiftAmount) {
     130    PabloAST * createIndexedAdvance(PabloAST * expr, PabloAST * indexStream, not_null<Integer *> shiftAmount, const llvm::StringRef & prefix);
     131   
     132    PabloAST * createLookahead(PabloAST * expr, const int64_t shiftAmount) {
    119133        if (shiftAmount == 0) {
    120134            return expr;
     
    123137    }
    124138
    125     PabloAST * createLookahead(PabloAST * expr, PabloAST * shiftAmount);
    126 
    127     inline PabloAST * createLookahead(PabloAST * expr, const int64_t shiftAmount, const llvm::StringRef & prefix) {
     139    PabloAST * createLookahead(PabloAST * expr, not_null<Integer *> shiftAmount);
     140
     141    PabloAST * createLookahead(PabloAST * expr, const int64_t shiftAmount, const llvm::StringRef & prefix) {
    128142        if (shiftAmount == 0) {
    129143            return expr;
     
    132146    }
    133147
    134     PabloAST * createLookahead(PabloAST * expr, PabloAST * shiftAmount, const llvm::StringRef & prefix);
    135 
    136     PabloAST * createAssign(PabloAST * const variable, PabloAST * const value);
     148    PabloAST * createLookahead(PabloAST * expr, not_null<Integer *> shiftAmount, const llvm::StringRef & prefix);
     149
     150    Assign * createAssign(PabloAST * const variable, PabloAST * const value){
     151        return mPb->createAssign(variable, value);
     152    }
    137153
    138154    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2);
     
    144160    PabloAST * createNot(PabloAST * expr, const llvm::StringRef & prefix);
    145161
     162    PabloAST * createRepeat(const int64_t fieldWidth, const int64_t value) {
     163        return createRepeat(mPb->getInteger(fieldWidth), mPb->getInteger(value));
     164    }
     165
     166    PabloAST * createRepeat(const int64_t fieldWidth, PabloAST * value) {
     167        return createRepeat(mPb->getInteger(fieldWidth), value);
     168    }
     169
     170    PabloAST * createRepeat(not_null<Integer *> fieldWidth, PabloAST * value);
     171
     172    PabloAST * createRepeat(const int64_t fieldWidth, PabloAST * value, const llvm::StringRef & prefix) {
     173        return createRepeat(mPb->getInteger(fieldWidth), value, prefix);
     174    }
     175
     176    PabloAST * createRepeat(const int64_t fieldWidth, const int64_t value, const llvm::StringRef & prefix) {
     177        return createRepeat(mPb->getInteger(fieldWidth), mPb->getInteger(value), prefix);
     178    }
     179
     180    PabloAST * createRepeat(not_null<Integer *> fieldWidth, PabloAST * value, const llvm::StringRef & prefix);
     181
    146182    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2);
    147183
     
    194230    PabloAST * createLessThan(PabloAST * expr1, PabloAST * expr2);
    195231
    196     inline If * createIf(PabloAST * condition, PabloBlock * body) {
     232    PabloAST * createEquals(PabloAST * expr1, PabloAST * expr2);
     233
     234    If * createIf(PabloAST * condition, PabloBlock * body) {
    197235        return mPb->createIf(condition, body);
    198236    }
    199237
    200     inline If * createIf(PabloAST * condition, PabloBuilder & builder) {
     238    If * createIf(PabloAST * condition, PabloBuilder & builder) {
    201239        return mPb->createIf(condition, builder.mPb);
    202240    }
    203241
    204     inline While * createWhile(PabloAST * condition, PabloBlock * body) {
     242    While * createWhile(PabloAST * condition, PabloBlock * body) {
    205243        return mPb->createWhile(condition, body);
    206244    }
    207245
    208     inline While * createWhile(PabloAST * condition, PabloBuilder & builder) {
     246    While * createWhile(PabloAST * condition, PabloBuilder & builder) {
    209247        return mPb->createWhile(condition, builder.mPb);
    210248    }
     
    236274    }
    237275
    238     inline Statement * front() const {
     276    Statement * front() const {
    239277        return mPb->front();
    240278    }
    241279
    242     inline Statement * back() const {
     280    Statement * back() const {
    243281        return mPb->back();
    244282    }
    245283
    246     inline Statement * getInsertPoint() const {
     284    Statement * getInsertPoint() const {
    247285        return mPb->getInsertPoint();
    248286    }
    249287
    250     inline PabloBlock * getPabloBlock() const {
     288    PabloBlock * getPabloBlock() const {
    251289        return mPb;
    252290    }
    253291
    254     inline PabloBuilder * getParent() const {
     292    PabloBuilder * getParent() const {
    255293        return mParent;
    256294    }
    257295
    258     inline String * makeName(const llvm::StringRef & prefix) const {
     296    String * makeName(const llvm::StringRef & prefix) const {
    259297        return mPb->makeName(prefix);
    260298    }
    261299
    262     inline Integer * getInteger(const uint64_t value) const {
     300    Integer * getInteger(const uint64_t value) const {
    263301        return mPb->getInteger(value);
    264302    }
    265303
    266     inline void print(llvm::raw_ostream & O, const bool expandNested = true) const {
     304    void print(llvm::raw_ostream & O, const bool expandNested = true) const {
    267305        mPb->print(O, expandNested);
    268306    }
Note: See TracChangeset for help on using the changeset viewer.