Ignore:
Timestamp:
Jan 10, 2015, 3:14:51 PM (4 years ago)
Author:
nmedfort
Message:

More work on usedef info.

File:
1 edited

Legend:

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

    r4414 r4415  
    2020#include <pablo/pe_scanthru.h>
    2121#include <pablo/pe_sel.h>
     22#include <pablo/pe_integer.h>
    2223#include <pablo/pe_string.h>
    2324#include <pablo/pe_var.h>
     
    6667    Call * createCall(const std::string name);
    6768
     69    Call * createCall(String * name);
     70
    6871    Assign * createAssign(const std::string prefix, PabloAST * expr, const int outputIndex = -1)  {
    6972        // Note: we cannot just use the findOrMake method to obtain this; an Assign node cannot be considered
     
    7174        // before the Next node. Should we create a "Constant" flag for this?
    7275        Assign * assign = new Assign(expr, outputIndex, mSymbolGenerator->make(prefix), this);
    73         push_back(assign);
     76        insert(assign);
    7477        return assign;
    7578    }
    7679
     80    Assign * createImmutableAssign(const std::string prefix, PabloAST * expr, const int outputIndex = -1);
     81
    7782    Var * createVar(const std::string name);
     83
     84    Var * createVar(String * name);
    7885
    7986    PabloAST * createVar(const PabloAST * const) {
     
    109116    inline If * createIf(PabloAST * condition, std::vector<Assign *> && definedVars, PabloBlock & body) {
    110117        If * statement = new If(condition, std::move(definedVars), body, this);
    111         push_back(statement);
     118        insert(statement);
    112119        return statement;
    113120    }
     
    115122    inline While * createWhile(PabloAST * cond, PabloBlock & body) {
    116123        While * statement = new While(cond, body, this);
    117         push_back(statement);
     124        insert(statement);
    118125        return statement;
    119126    }
     127
     128    PabloAST * setOperandOf(Statement * inst, const unsigned index, PabloAST * value);
    120129
    121130    template<typename... Args>
     
    152161            Functor mf;
    153162            PabloAST * const expr = mf(std::forward<Args>(args)..., std::forward<Params>(params)...);
     163            mMap.insert(std::make_pair(std::move(key), expr));
     164            return expr;
     165        }
     166
     167        template <class Functor, typename... Params>
     168        inline PabloAST * findOrAdd(const PabloAST::ClassTypeId type, Args... args, PabloAST * expr) {
     169            Key key = std::make_tuple(type, args...);
     170            PabloAST * const f = find(key);
     171            if (f) {
     172                return f;
     173            }
    154174            mMap.insert(std::make_pair(std::move(key), expr));
    155175            return expr;
     
    233253
    234254    template<typename Type>
    235     inline Type appendIfNew(std::pair<Type, bool> retVal) {
     255    inline Type insertIfNew(std::pair<Type, bool> retVal) {
    236256        if (std::get<1>(retVal)) {
    237             push_back(cast<Statement>(std::get<0>(retVal)));
     257            insert(cast<Statement>(std::get<0>(retVal)));
    238258        }
    239259        return std::get<0>(retVal);
Note: See TracChangeset for help on using the changeset viewer.