source: icGREP/icgrep-devel/icgrep/cc/cc_compiler.h @ 4415

Last change on this file since 4415 was 4410, checked in by nmedfort, 4 years ago

Changes to support 3-operand form for all instructions. CSE disabled but partially redundant now.

File size: 2.0 KB
Line 
1/*
2 *  Copyright (c) 2014 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 *  icgrep is a trademark of International Characters.
5 */
6
7#ifndef CC_COMPILER_H
8#define CC_COMPILER_H
9
10#include "utf_encoding.h"
11#include <pablo/codegenstate.h>
12#include <pablo/pabloAST.h>
13#include <re/re_cc.h>
14#include <unordered_map>
15#include <string>
16#include <iostream>
17
18namespace cc {
19
20class CC_NameMap;
21
22class CC_Compiler{
23    typedef std::vector<std::pair<const re::CC*, pablo::Assign*>> ConstraintVector;
24public:
25
26    CC_Compiler(pablo::PabloBlock & cg, const Encoding encoding, const bool annotateVariableConstraints = false, const std::string basis_pattern = "basis");
27
28    std::vector<pablo::Var *> getBasisBits(const CC_NameMap & nameMap);
29
30    pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBlock & pb);
31
32    pablo::Assign * compileCC(const re::CC *cc);
33
34    void compileByteClasses(re::RE * re);
35
36private:
37    pablo::Var * getBasisVar(const int n) const;
38    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, pablo::PabloBlock & pb);
39    pablo::PabloAST * char_test_expr(const re::CodePointType ch, pablo::PabloBlock & pb);
40    pablo::PabloAST * make_range(const re::CodePointType n1, const re::CodePointType n2, pablo::PabloBlock & pb);
41    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, pablo::PabloBlock & pb);
42    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, pablo::PabloBlock & pb);
43    pablo::PabloAST * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi, pablo::PabloBlock & pb);
44    pablo::PabloAST * charset_expr(const re::CC *cc, pablo::PabloBlock & pb);
45
46    void computeVariableConstraints();
47
48private:
49    pablo::PabloBlock &         mCG;
50    //const bool                  mAnnotateVariableConstraints;
51    std::vector<pablo::Var *>   mBasisBit;
52    const Encoding              mEncoding;
53    ConstraintVector            mVariableVector;
54};
55
56}
57
58#endif // CC_COMPILER_H
59
60
Note: See TracBrowser for help on using the repository browser.