Ignore:
Timestamp:
Jan 29, 2018, 1:08:42 PM (19 months ago)
Author:
cameron
Message:

Unify Parabix CC compiler and Direct CC compiler with a common superclass

Location:
icGREP/icgrep-devel/icgrep/cc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/cc/cc_compiler.cpp

    r5843 r5847  
    2121
    2222namespace cc {
    23 
    24 CC_Compiler::CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet)
    25 : mBuilder(kernel->getEntryScope())
     23    CC_Compiler::CC_Compiler(pablo::PabloKernel * kernel)
     24    : mBuilder(kernel->getEntryScope()) {
     25    }
     26   
     27
     28Parabix_CC_Compiler::Parabix_CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet)
     29: CC_Compiler(kernel)
    2630, mEncodingBits(basisBitSet.size())
    2731, mBasisBit(basisBitSet) {
     
    2933}
    3034
    31 PabloAST * CC_Compiler::compileCC(const std::string & canonicalName, const CC *cc, PabloBlock & block) {
     35PabloAST * Parabix_CC_Compiler::compileCC(const std::string & canonicalName, const CC *cc, PabloBlock & block) {
    3236    PabloAST * const var = charset_expr(cc, block);
    3337    if (LLVM_LIKELY(isa<Statement>(var))) {
     
    3741}
    3842
    39 PabloAST * CC_Compiler::compileCC(const std::string & canonicalName, const CC *cc, PabloBuilder & builder) {
     43PabloAST * Parabix_CC_Compiler::compileCC(const std::string & canonicalName, const CC *cc, PabloBuilder & builder) {
    4044    PabloAST * const var = charset_expr(cc, builder);
    4145    if (LLVM_LIKELY(isa<Statement>(var))) {
     
    4650   
    4751template<typename PabloBlockOrBuilder>
    48 PabloAST * CC_Compiler::charset_expr(const CC * cc, PabloBlockOrBuilder & pb) {
     52PabloAST * Parabix_CC_Compiler::charset_expr(const CC * cc, PabloBlockOrBuilder & pb) {
    4953    if (cc->empty()) {
    5054        return pb.createZeroes();
     
    9094
    9195template<typename PabloBlockOrBuilder>
    92 PabloAST * CC_Compiler::bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb) {
     96PabloAST * Parabix_CC_Compiler::bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb) {
    9397    if (LLVM_UNLIKELY(selected_bits == 0)) {
    9498        return pb.createOnes();
     
    129133
    130134template<typename PabloBlockOrBuilder>
    131 inline PabloAST * CC_Compiler::char_test_expr(const codepoint_t ch, PabloBlockOrBuilder &pb) {
     135inline PabloAST * Parabix_CC_Compiler::char_test_expr(const codepoint_t ch, PabloBlockOrBuilder &pb) {
    132136    return bit_pattern_expr(ch, mEncodingMask, pb);
    133137}
    134138
    135139template<typename PabloBlockOrBuilder>
    136 PabloAST * CC_Compiler::make_range(const codepoint_t n1, const codepoint_t n2, PabloBlockOrBuilder & pb) {
     140PabloAST * Parabix_CC_Compiler::make_range(const codepoint_t n1, const codepoint_t n2, PabloBlockOrBuilder & pb) {
    137141    codepoint_t diff_count = 0;
    138142
     
    160164
    161165template<typename PabloBlockOrBuilder>
    162 PabloAST * CC_Compiler::GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder &pb) {
     166PabloAST * Parabix_CC_Compiler::GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder &pb) {
    163167    if (N == 0) {
    164168        return pb.createOnes(); //Return a true literal.
     
    197201
    198202template<typename PabloBlockOrBuilder>
    199 PabloAST * CC_Compiler::LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb) {
     203PabloAST * Parabix_CC_Compiler::LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb) {
    200204    /*
    201205      If an N-bit pattern is all ones, then it is always true that any n-bit value is LE this pattern.
     
    210214
    211215template<typename PabloBlockOrBuilder>
    212 inline PabloAST * CC_Compiler::char_or_range_expr(const codepoint_t lo, const codepoint_t hi, PabloBlockOrBuilder &pb) {
     216inline PabloAST * Parabix_CC_Compiler::char_or_range_expr(const codepoint_t lo, const codepoint_t hi, PabloBlockOrBuilder &pb) {
    213217    if (lo == hi) {
    214218        return char_test_expr(lo, pb);
     
    219223}
    220224
    221 inline PabloAST * CC_Compiler::getBasisVar(const unsigned i) const {
     225inline PabloAST * Parabix_CC_Compiler::getBasisVar(const unsigned i) const {
    222226    assert (i < mEncodingBits);
    223227    const unsigned index = mEncodingBits - i - 1; assert (index < mEncodingBits);
     
    262266    return ccStrm;
    263267}
     268   
     269Direct_CC_Compiler::Direct_CC_Compiler(pablo::PabloKernel * kernel, pablo::PabloAST * codeUnitStream)
     270: CC_Compiler(kernel)
     271, mCodeUnitStream(codeUnitStream) {
     272}
     273
     274pablo::PabloAST * Direct_CC_Compiler::compileCC(const std::string & name, const re::CC *cc, pablo::PabloBlock & block) {
     275    PabloBuilder pb(&block);
     276    return compileCC(name, cc, pb);
     277}
     278
     279pablo::PabloAST * Direct_CC_Compiler::compileCC(const std::string & name, const re::CC *cc, pablo::PabloBuilder & b) {
     280    return compileCCfromCodeUnitStream(cc, mCodeUnitStream, b);
     281}
     282
    264283} // end of namespace cc
  • icGREP/icgrep-devel/icgrep/cc/cc_compiler.h

    r5843 r5847  
    1616namespace cc {
    1717
    18 class CC_Compiler{
    19     friend class ParabixCharacterClassKernelBuilder;
     18class CC_Compiler {
    2019public:
    2120   
    22     CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet);
     21    virtual pablo::PabloAST * compileCC(const re::CC *cc) = 0;
    2322   
    24     pablo::PabloAST * compileCC(const re::CC *cc);
     23    virtual pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) = 0;
     24   
     25    virtual pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) = 0;
     26   
     27    virtual pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block) = 0;
     28   
     29    virtual pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder) = 0;
    2530
    26     pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
     31protected:
     32    CC_Compiler(pablo::PabloKernel * kernel);
     33    pablo::PabloBuilder             mBuilder;
     34};
     35   
     36   
     37class Parabix_CC_Compiler : public CC_Compiler {
     38public:
     39   
     40    Parabix_CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet);
     41   
     42    pablo::PabloAST * compileCC(const re::CC *cc) override;
     43   
     44    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) override;
     45   
     46    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) override;
     47   
     48    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBlock & block) override;
    2749
    28     pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
    29 
    30     pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block);
    31 
    32     pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
     50    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBuilder & builder) override;
    3351
    3452private:
     
    4967    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
    5068private:   
    51     pablo::PabloBuilder             mBuilder;
    5269    const unsigned                  mEncodingBits;
    5370    std::vector<pablo::PabloAST *>  mBasisBit;
     
    5572};
    5673
    57 inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
     74    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc) {
     75        return compileCC(cc, mBuilder);
     76    }
     77   
     78    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
     79        return compileCC(cc->canonicalName(), cc, block);
     80    }
     81   
     82    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
     83        return compileCC(cc->canonicalName(), cc, builder);
     84    }
     85   
     86   
     87
     88class Direct_CC_Compiler : public CC_Compiler {
     89public:
     90   
     91    Direct_CC_Compiler(pablo::PabloKernel * kernel, pablo::PabloAST * codeUnitStream);
     92   
     93    pablo::PabloAST * compileCC(const re::CC *cc) override;
     94   
     95    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) override;
     96   
     97    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) override;
     98   
     99    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBlock & block) override;
     100   
     101    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBuilder & builder) override;
     102       
     103private:
     104    pablo::PabloAST *               mCodeUnitStream;
     105};
     106
     107   
     108inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc) {
    58109    return compileCC(cc, mBuilder);
    59110}
    60111
    61 inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
    62     return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, block);
     112inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
     113    return compileCC(cc->canonicalName(), cc, block);
    63114}
    64115
    65 inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
    66     return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, builder);
     116inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
     117    return compileCC(cc->canonicalName(), cc, builder);
    67118}
     119
     120
    68121
    69122pablo::PabloAST * compileCCfromCodeUnitStream(const re::CC *cc, pablo::PabloAST * codeUnitStream, pablo::PabloBuilder & pb);
Note: See TracChangeset for help on using the changeset viewer.