Ignore:
Timestamp:
Nov 18, 2016, 1:46:55 PM (3 years ago)
Author:
nmedfort
Message:

Merged PabloFunction? and PabloKernel? classes. Updated projects where necessary.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/codegenstate.h

    r5202 r5217  
    1010#include <pablo/pabloAST.h>
    1111#include <pablo/symbol_generator.h>
     12#include <pablo/boolean.h>
     13#include <pablo/arithmetic.h>
     14#include <pablo/branch.h>
     15
    1216#include <pablo/pe_advance.h>
    1317#include <pablo/pe_lookahead.h>
    14 #include <pablo/pe_and.h>
    15 #include <pablo/pe_call.h>
    1618#include <pablo/pe_matchstar.h>
    17 #include <pablo/pe_not.h>
    18 #include <pablo/pe_ones.h>
    19 #include <pablo/pe_or.h>
    2019#include <pablo/pe_scanthru.h>
    21 #include <pablo/pe_sel.h>
    2220#include <pablo/pe_infile.h>
     21
     22#include <pablo/pe_count.h>
     23
    2324#include <pablo/pe_integer.h>
    2425#include <pablo/pe_string.h>
     26#include <pablo/pe_zeroes.h>
     27#include <pablo/pe_ones.h>
     28
    2529#include <pablo/pe_var.h>
    26 #include <pablo/pe_xor.h>
    27 #include <pablo/pe_zeroes.h>
    28 #include <pablo/pe_count.h>
    2930#include <pablo/ps_assign.h>
    30 #include <pablo/branch.h>
    31 #include <pablo/function.h>
     31
     32#include <pablo/pe_call.h>
     33
     34#include <pablo/pablo_kernel.h>
     35
    3236#include <llvm/ADT/ArrayRef.h>
    3337#include <stdexcept>
    3438
    3539namespace pablo {
     40
     41class PabloKernel;
    3642
    3743class PabloBlock : public PabloAST, public StatementList {
     
    5460    }
    5561
    56     inline static PabloBlock * Create(PabloFunction & parent) noexcept {
    57         return new PabloBlock(&parent);
     62    inline static PabloBlock * Create(PabloKernel * const parent) noexcept {
     63        return new PabloBlock(parent);
    5864    }
    5965
     
    146152    AtEOF * createAtEOF(PabloAST * expr, String * const name);
    147153
    148     Extract * createExtract(PabloAST * array, const Integer::Type index) {
     154    Extract * createExtract(PabloAST * array, const int64_t index) {
    149155        return createExtract(array, getInteger(index), nullptr);
    150156    }
     
    158164    }
    159165
    160     Extract * createExtract(PabloAST * array, const Integer::Type index, const std::string & prefix) {
     166    Extract * createExtract(PabloAST * array, const int64_t index, const std::string & prefix) {
    161167        return createExtract(array, getInteger(index), makeName(prefix));
    162168    }
     
    214220    Xor * createXor(Type * const type, const unsigned reserved, String * const name);
    215221
     222    Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr) {
     223        return createSel(condition, trueExpr, falseExpr, nullptr);
     224    }
     225
     226    Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, const std::string & prefix) {
     227        return createSel(condition, trueExpr, falseExpr, makeName(prefix));
     228    }
     229
     230    Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, String * const name);
     231
     232    Add * createAdd(PabloAST * expr1, PabloAST * expr2) {
     233        return createAdd(expr1, expr2, nullptr);
     234    }
     235
     236    Add * createAdd(PabloAST * expr1, PabloAST * expr2, const std::string & prefix) {
     237        return createAdd(expr1, expr2, makeName(prefix));
     238    }
     239
     240    Add * createAdd(PabloAST * expr1, PabloAST * expr2, String * const name);
     241
     242    Subtract * createSubtract(PabloAST * expr1, PabloAST * expr2) {
     243        return createSubtract(expr1, expr2, nullptr);
     244    }
     245
     246    Subtract * createSubtract(PabloAST * expr1, PabloAST * expr2, const std::string & prefix) {
     247        return createSubtract(expr1, expr2, makeName(prefix));
     248    }
     249
     250    Subtract * createSubtract(PabloAST * expr1, PabloAST * expr2, String * const name);
     251
    216252    MatchStar * createMatchStar(PabloAST * marker, PabloAST * charclass) {
    217253        return createMatchStar(marker, charclass, nullptr);
     
    234270    ScanThru * createScanThru(PabloAST * from, PabloAST * thru, String * const name);
    235271
    236     Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr) {
    237         return createSel(condition, trueExpr, falseExpr, nullptr);
    238     }
    239 
    240     Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, const std::string & prefix) {
    241         return createSel(condition, trueExpr, falseExpr, makeName(prefix));
    242     }
    243 
    244     Sel * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, String * const name);
    245    
    246272    If * createIf(PabloAST * condition, PabloBlock * body);
    247273
     
    252278    }
    253279
    254     inline PabloFunction * getParent() const {
     280    inline PabloKernel * getParent() const {
    255281        return mParent;
    256     }
    257 
    258     void setParent(PabloFunction * const parent) {
    259         mParent = parent;
    260282    }
    261283
     
    278300    }
    279301
    280     inline String * getName(const std::string name) const {
    281         return getSymbolTable()->get(name);
     302    inline String * getName(const std::string & name) const {
     303        return mParent->getName(name);
    282304    }
    283305
    284306    inline String * makeName(const std::string & prefix) const {
    285         return getSymbolTable()->make(prefix);
    286     }
    287 
    288     inline Integer * getInteger(Integer::Type value) const {
    289         return getSymbolTable()->getInteger(value);
    290     }
    291 
    292     SymbolGenerator * getSymbolTable() const {
    293         return mParent->getSymbolTable();
    294     }
    295 
    296     virtual ~PabloBlock();
     307        return mParent->makeName(prefix);
     308    }
     309
     310    inline Integer * getInteger(const int64_t value) const {
     311        return mParent->getInteger(value);
     312    }
     313
     314    virtual ~PabloBlock() {}
    297315
    298316protected:
    299317
    300     explicit PabloBlock(PabloFunction * parent) noexcept;
     318    explicit PabloBlock(PabloKernel * const parent) noexcept
     319    : PabloAST(PabloAST::ClassTypeId::Block, nullptr, nullptr)
     320    , mParent(parent)
     321    , mBranch(nullptr)
     322    , mScopeIndex(0) {
     323
     324    }
    301325
    302326    template<typename Type>
     
    313337
    314338private:       
    315     PabloFunction *                                     mParent;
    316     Branch *                                            mBranch;
    317     unsigned                                            mScopeIndex;
     339    PabloKernel * const         mParent;
     340    Branch *                    mBranch;
     341    unsigned                    mScopeIndex;
    318342};
    319343
Note: See TracChangeset for help on using the changeset viewer.