source: icGREP/icgrep-devel/icgrep/pablo/codegenstate.h @ 4209

Last change on this file since 4209 was 4209, checked in by nmedfort, 5 years ago

Minor revisions

File size: 3.7 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 PS_PABLOS_H
8#define PS_PABLOS_H
9
10#include <pablo/pe_pabloe.h>
11#include <pablo/pe_advance.h>
12#include <pablo/pe_all.h>
13#include <pablo/pe_and.h>
14#include <pablo/pe_call.h>
15#include <pablo/pe_charclass.h>
16#include <pablo/pe_matchstar.h>
17#include <pablo/pe_not.h>
18#include <pablo/pe_or.h>
19#include <pablo/pe_pabloe.h>
20#include <pablo/pe_scanthru.h>
21#include <pablo/pe_sel.h>
22#include <pablo/pe_var.h>
23#include <pablo/pe_xor.h>
24#include <pablo/ps_assign.h>
25#include <pablo/ps_if.h>
26#include <pablo/ps_while.h>
27#include <unordered_map>
28#include <vector>
29#include <string>
30
31namespace pablo {
32
33struct CodeGenState {
34
35//    PabloE * createAll(const bool value);
36//    PabloE * createAdvance(PabloE * expr);
37//    PabloE * createNot(PabloE * expr);
38//    PabloE * createCall(const std::string name);
39//    PabloE * createVar(const std::string name);
40//    PabloE * createCharClass(const std::string name);
41//    PabloE * createAssign(const std::string name, PabloE * expr);
42//    PabloE * createAnd(PabloE * expr1, PabloE * expr2);
43//    PabloE * createOr(PabloE * expr1, PabloE * expr2);
44//    PabloE * createXor(PabloE * expr1, PabloE * expr2);
45//    PabloE * createMatchStar(PabloE * expr1, PabloE * expr2);
46//    PabloE * createScanThru(PabloE * from, PabloE * thru);
47
48
49
50//    struct ExpressionTable {
51//        inline PabloE * find(PabloE * inst) {
52//            switch(inst->getClassTypeId()) {
53//                // UNARY
54//                case All:       // bool
55//                case Advance:   // pe
56//                case Not:       // pe
57
58//                case Call:      // string
59//                case Var:       // string
60//                case CharClass: // string
61//                // BINARY
62//                case Assign:    // string, pe
63
64//                case And:       // pe, pe
65//                case Or:        // pe, pe
66//                case Xor:       // pe, pe
67//                case MatchStar: // pe, pe
68//                case ScanThru:  // pe, pe
69
70//                case If:        // pe, pe list
71//                case While:     // pe, pe list
72//                // TERNARY
73//                case Sel:       // pe, pe, pe
74//            }
75
76
77//            switch (inst.getNumOperands()) {
78//                case 1: return _unary.find(&inst, inst.getType(), inst.getOperand(0));
79//                case 2: return _binary.find(&inst, inst.getOperand(0), inst.getOperand(1));
80//                case 3: return _ternary.find(&inst, inst.getOperand(0), inst.getOperand(1), inst.getOperand(2));
81//                default: return nullptr;
82//            }
83//        }
84//    private:
85//        template<typename... Args>
86//        struct ExpressionMap {
87//            typedef std::tuple<PabloE::ClassTypeId, Args...> Key;
88//            inline Instruction * find(Instruction * inst, Args... args) {
89//                auto key = std::make_tuple(inst->getOpcode(), args...);
90//                auto itr = _map.find(key);
91//                if (itr == _map.end()) {
92//                    _map.insert(std::make_pair(std::move(key), inst));
93//                    return nullptr;
94//                }
95//                return itr->second;
96//            }
97//        private:
98//            std::unordered_map<Key, PabloE *>                           _map;
99//        };
100//        ExpressionMap<const PabloE *>                                   _unary;
101//        ExpressionMap<const PabloE *, const PabloE *>                   _binary;
102//        ExpressionMap<const PabloE *, const PabloE *, const PabloE *>   _ternary;
103//    };
104
105
106
107
108    std::list<PabloE *>  stmtsl;
109    std::string          newsym;
110};
111
112}
113
114#endif // PS_PABLOS_H
Note: See TracBrowser for help on using the repository browser.