Ignore:
Timestamp:
Sep 23, 2016, 4:12:41 PM (3 years ago)
Author:
nmedfort
Message:

Initial work for incorporating Types into Pablo AST.

File:
1 edited

Legend:

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

    r5063 r5160  
    33
    44#include <pablo/pabloAST.h>
     5#include <pablo/symbol_generator.h>
    56#include <pablo/pe_var.h>
    67#include <pablo/ps_assign.h>
    78#include <pablo/pe_count.h>
    8 #include <pablo/symbol_generator.h>
     9#include <pablo/pe_zeroes.h>
     10#include <pablo/pe_ones.h>
    911
    1012namespace pablo {
    11 
    12 class Var;
    13 class Assign;
    14 class PabloBlock;
    15 class String;
    1613
    1714class Prototype : public PabloAST {
     
    5956class PabloFunction : public Prototype {
    6057    friend class PabloBlock;
    61     using ParamAllocator = Allocator::rebind<Var *>::other;
    62     using ResultAllocator = Allocator::rebind<Assign *>::other;
     58    using Allocator = SlabAllocator<PabloAST *>;
    6359public:
    6460
     
    9995    Var * getParameter(const unsigned index) {
    10096        if (LLVM_LIKELY(index < getNumOfParameters()))
    101             return mParameters[index];
     97            return cast<Var>(mParameters[index]);
    10298        else throwInvalidParameterIndex(index);
    10399    }
     
    105101    const Var * getParameter(const unsigned index) const {
    106102        if (LLVM_LIKELY(index < getNumOfParameters()))
    107             return mParameters[index];
     103            return cast<Var>(mParameters[index]);
    108104        else throwInvalidParameterIndex(index);
    109105    }
     
    117113    Assign * getResult(const unsigned index) {
    118114        if (LLVM_LIKELY(index < getNumOfResults()))
    119             return mResults[index];
     115            return cast<Assign>(mResults[index]);
    120116        else throwInvalidResultIndex(index);
    121117    }
     
    123119    const Assign * getResult(const unsigned index) const {
    124120        if (LLVM_LIKELY(index < getNumOfResults()))
    125             return mResults[index];
     121            return cast<Assign>(mResults[index]);
    126122        else throwInvalidResultIndex(index);
    127123    }
     
    148144    }
    149145
     146    Zeroes * getNullValue(const PabloType * const type);
     147
     148    Ones * getAllOnesValue(const PabloType * const type);
     149
    150150    void operator delete (void*);
    151151
    152152    virtual ~PabloFunction() { }
     153
     154    inline SymbolGenerator * getSymbolTable() const {
     155        return mSymbolTable;
     156    }
    153157
    154158protected:
     
    160164    PabloFunction(std::string && name, const unsigned numOfParameters, const unsigned numOfResults);
    161165private:
    162     SymbolGenerator *   mSymbolTable;
    163     PabloBlock *        mEntryBlock;
    164     Var ** const        mParameters;
    165     Assign ** const     mResults;
     166    SymbolGenerator *                           mSymbolTable;
     167    const PabloType *                           mBitStreamType;
     168    PabloBlock *                                mEntryBlock;
     169    std::vector<PabloAST *, Allocator>          mParameters;
     170    std::vector<PabloAST *, Allocator>          mResults;
     171    std::vector<PabloAST *, Allocator>          mConstants;
    166172};
    167173
Note: See TracChangeset for help on using the changeset viewer.