Ignore:
Timestamp:
Aug 7, 2015, 3:16:32 PM (4 years ago)
Author:
cameron
Message:

add Pablo count operation - not yet functional

Location:
icGREP/icgrep-devel/icgrep/pablo
Files:
7 edited

Legend:

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

    r4717 r4718  
    201201}
    202202
    203 
    204 
    205 }
     203PabloAST * PabloBuilder::createCount(PabloAST * expr) {
     204    MAKE_UNARY(createCount, PabloAST::ClassTypeId::Count, expr);
     205    return result;
     206}
     207
     208PabloAST * PabloBuilder::createCount(PabloAST * expr, const std::string prefix) {
     209    MAKE_UNARY(createCount, PabloAST::ClassTypeId::Count, expr, prefix);
     210    return result;
     211}
     212
     213}
  • icGREP/icgrep-devel/icgrep/pablo/builder.hpp

    r4717 r4718  
    115115    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, const std::string prefix);
    116116   
     117    PabloAST * createCount(PabloAST * expr);
     118   
     119    PabloAST * createCount(PabloAST * expr, const std::string prefix);
     120   
    117121    /// Mod64 approximate function wrappers.
    118122   
  • icGREP/icgrep-devel/icgrep/pablo/codegenstate.cpp

    r4717 r4718  
    139139}
    140140
    141 
     141PabloAST * PabloBlock::createCount(PabloAST * expr) {
     142    assert (expr);
     143    return insertAtInsertionPoint(new Count(expr, makeName("count_")));
     144}
     145
     146PabloAST * PabloBlock::createCount(PabloAST * expr, const std::string prefix) {
     147    assert (expr);
     148    return insertAtInsertionPoint(new Count(expr, makeName(prefix, false)));
     149}
     150
     151   
    142152/// BINARY CREATE FUNCTIONS
    143153
  • icGREP/icgrep-devel/icgrep/pablo/codegenstate.h

    r4717 r4718  
    2525#include <pablo/pe_xor.h>
    2626#include <pablo/pe_zeroes.h>
     27#include <pablo/pe_count.h>
    2728#include <pablo/ps_assign.h>
    2829#include <pablo/ps_if.h>
     
    130131    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, const std::string prefix);
    131132
     133    PabloAST * createCount(PabloAST * expr);
     134   
     135    PabloAST * createCount(PabloAST * expr, const std::string prefix);
     136   
    132137    If * createIf(PabloAST * condition, const std::initializer_list<Assign *> definedVars, PabloBlock & body);
    133138
  • icGREP/icgrep-devel/icgrep/pablo/expression_map.hpp

    r4717 r4718  
    260260            case PabloAST::ClassTypeId::Var:
    261261            case PabloAST::ClassTypeId::Not:
     262            case PabloAST::ClassTypeId::Count:
    262263                return mUnary.findOrAdd(stmt, stmt->getClassTypeId(), stmt->getOperand(0));
    263264            case PabloAST::ClassTypeId::And:
  • icGREP/icgrep-devel/icgrep/pablo/pabloAST.h

    r4717 r4718  
    6666        , Mod64ScanThru
    6767        , Mod64MatchStar
     68        // Statistics operations
     69        , Count
    6870        // Variable assignments
    6971        , Assign
  • icGREP/icgrep-devel/icgrep/pablo/printer_pablos.cpp

    r4683 r4718  
    157157        strm << ")";
    158158    }
     159    else if (const Mod64Advance * adv = dyn_cast<const Mod64Advance>(stmt)) {
     160        print(adv, strm);
     161        strm << " = pablo.Mod64Advance(";
     162        print(adv->getExpr(), strm);
     163        strm << ", " << std::to_string(adv->getAdvanceAmount()) << ")";
     164    }
     165    else if (const Mod64MatchStar * mstar = dyn_cast<const Mod64MatchStar>(stmt)) {
     166        print(mstar, strm);
     167        strm << " = pablo.Mod64MatchStar(";
     168        print(mstar->getMarker(), strm);
     169        strm << ", ";
     170        print(mstar->getCharClass(), strm);
     171        strm << ")";
     172    }
     173    else if (const Mod64ScanThru * sthru = dyn_cast<const Mod64ScanThru>(stmt)) {
     174        print(sthru, strm);
     175        strm << " = pablo.Mod64ScanThru(";
     176        print(sthru->getScanFrom(), strm);
     177        strm << ", ";
     178        print(sthru->getScanThru(), strm);
     179        strm << ")";
     180    }
     181    else if (const Count * pablo_not = dyn_cast<const Count>(stmt)) {
     182        print(pablo_not, strm);
     183        strm << " = pablo.Count(";
     184        print(pablo_not->getExpr(), strm);
     185        strm << ")";
     186    }
    159187    else {
    160188        strm << indent << "**UNKNOWN Pablo Statement type **" << "\n";
Note: See TracChangeset for help on using the changeset viewer.