Changeset 4603 for icGREP/icgrep-devel


Ignore:
Timestamp:
Jun 12, 2015, 3:11:10 PM (4 years ago)
Author:
nmedfort
Message:

Temporary check-in

Location:
icGREP/icgrep-devel/icgrep
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/cc/cc_namemap.hpp

    r4602 r4603  
    77#include "re/re_name.h"
    88#include "re/re_cc.h"
    9 #include <pablo/expression_map.hpp>
    109
    1110namespace re {
  • icGREP/icgrep-devel/icgrep/pablo/builder.cpp

    r4602 r4603  
    2828PabloAST * result = mExprTable.findBinaryOrCall(std::move(functor), TYPE, ARGS)
    2929
     30#define MAKE_NAMED_BINARY(NAME, TYPE, ARGS...) \
     31struct __##NAME { \
     32    inline PabloAST * operator()(PabloAST * arg1, PabloAST * arg2, const std::string name) { \
     33        return mPb.NAME(arg1, arg2, name); \
     34    } \
     35    inline __##NAME(PabloBlock & pb) : mPb(pb) {} \
     36private: \
     37    PabloBlock & mPb; \
     38}; \
     39__##NAME functor(mPb); \
     40PabloAST * result = mExprTable.findBinaryOrCall(std::move(functor), TYPE, ARGS)
     41
    3042#define MAKE_TERNARY(NAME, TYPE, ARGS...) \
    3143struct __##NAME { \
     
    4860PabloAST * PabloBuilder::createAdvance(PabloAST * expr, PabloAST * shiftAmount) {
    4961    MAKE_BINARY(createAdvance, PabloAST::ClassTypeId::Advance, expr, shiftAmount);
     62    return result;
     63}
     64
     65PabloAST * PabloBuilder::createAdvance(PabloAST * expr, PabloAST * shiftAmount, const std::string prefix) {
     66    MAKE_NAMED_BINARY(createAdvance, PabloAST::ClassTypeId::Advance, expr, shiftAmount, prefix);
    5067    return result;
    5168}
  • icGREP/icgrep-devel/icgrep/pablo/builder.hpp

    r4602 r4603  
    4949    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount);
    5050
     51    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount, const std::string prefix);
     52
    5153    Next * createNext(Assign * assign, PabloAST * expr);
    5254
     
    7779    }
    7880
     81    inline Statement * front() const {
     82        return mPb.front();
     83    }
     84
     85    inline Statement * back() const {
     86        return mPb.back();
     87    }
     88
     89    inline void setInsertPoint(Statement * const statement) {
     90        mPb.setInsertPoint(statement);
     91    }
     92
     93    inline void setInsertPoint(StatementList * const list) {
     94        mPb.setInsertPoint(list);
     95    }
     96
     97    inline Statement * getInsertPoint() const {
     98        return mPb.getInsertPoint();
     99    }
     100
    79101private:
    80102
  • icGREP/icgrep-devel/icgrep/pablo/optimizers/pablo_automultiplexing.cpp

    r4601 r4603  
    66#include <unordered_set>
    77#include <boost/container/flat_set.hpp>
    8 #include <unordered_map>
    98#include <boost/numeric/ublas/matrix.hpp>
    109#include <boost/circular_buffer.hpp>
    1110#include <include/simd-lib/builtins.hpp>
    12 #include <pablo/expression_map.hpp>
    13 //#include <boost/function.hpp>
    14 //#include <boost/graph/connected_components.hpp>
    15 //#include <boost/graph/filtered_graph.hpp>
     11#include <pablo/builder.hpp>
    1612#include <boost/range/iterator_range.hpp>
    1713#include <cudd.h>
     
    10131009            }
    10141010
    1015             PabloBlock * const pb = V[0]->getParent();
    1016             assert (pb);
     1011            PabloBlock * const block = V[0]->getParent();
     1012            assert (block);
    10171013
    10181014            // Sanity test to make sure every advance is in the same scope.
     
    10211017                assert (I[i - 1] < I[i]);
    10221018                assert (V[i - 1] != V[i]);
    1023                 assert (V[i]->getParent() == pb);
     1019                assert (V[i]->getParent() == block);
    10241020            }
    10251021            #endif
     1022
     1023            PabloBuilder pb(*block);
    10261024
    10271025            /// Perform n-to-m Multiplexing
     
    10311029
    10321030                std::ostringstream prefix;
    1033 
    10341031                prefix << "mux" << n << "to" << m;
    10351032                for (size_t i = 1; i <= n; ++i) {
     
    10521049                    PabloAST * a2 = Q.front(); Q.pop_front(); assert (a2);
    10531050                    assert (!Q.full());
    1054                     pb->setInsertPoint(choose(a2, a1, adv));
    1055                     Q.push_back(pb->createOr(a1, a2));
     1051                    pb.setInsertPoint(choose(a2, a1, adv));
     1052                    Q.push_back(pb.createOr(a1, a2));
    10561053                }
    10571054                assert (Q.size() == 1);
    10581055
    10591056                PabloAST * mux = Q.front(); Q.pop_front(); assert (mux);
    1060                 muxed[j] = pb->createAdvance(mux, adv->getOperand(1), prefix.str());
     1057                muxed[j] = pb.createAdvance(mux, adv->getOperand(1), prefix.str());
    10611058            }
    10621059
     
    10681065                Advance * const adv = V[i - 1];
    10691066
    1070                 pb->setInsertPoint(adv);
    1071 
     1067                pb.setInsertPoint(adv);
    10721068                assert (Q.empty());
    10731069                for (size_t j = 0; j != m; ++j) {
     
    10841080                        PabloAST * a2 = Q.front(); Q.pop_front(); assert (a2);
    10851081                        assert (!Q.full());
    1086                         Q.push_back(pb->createOr(a1, a2));
     1082                        Q.push_back(pb.createOr(a1, a2));
    10871083                    }
    10881084                    assert (Q.size() == 1);
    1089                     neg = pb->createNot(Q.front()); Q.pop_front(); assert (neg);
     1085                    neg = pb.createNot(Q.front()); Q.pop_front(); assert (neg);
    10901086                }
    10911087
     
    11051101                    PabloAST * a2 = Q.front(); Q.pop_front(); assert (a2);
    11061102                    assert (!Q.full());
    1107                     Q.push_back(pb->createAnd(a1, a2));
     1103                    Q.push_back(pb.createAnd(a1, a2));
    11081104                }
    11091105
     
    11121108                PabloAST * demux = Q.front(); Q.pop_front(); assert (demux);
    11131109                if (LLVM_LIKELY(neg != nullptr)) {
    1114                     demux = pb->createAnd(demux, neg);
     1110                    demux = pb.createAnd(demux, neg);
    11151111                }
    11161112                V[i - 1]->replaceWith(demux, true, true);
Note: See TracChangeset for help on using the changeset viewer.