source: icGREP/icgrep-devel/icgrep/pablo/pablo_compiler.h @ 4951

Last change on this file since 4951 was 4951, checked in by cameron, 3 years ago

Removing compile-time BLOCK_SIZE from pablo compiler/carry manager

File size: 2.6 KB
Line 
1/*
2 *  Copyright (c) 2016 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 PABLO_COMPILER_H
8#define PABLO_COMPILER_H
9
10
11#include <string>
12#include <list>
13#include <vector>
14#include <map>
15#include <algorithm>
16#include <unordered_map>
17#include <pablo/pe_string.h>
18#include <pablo/carry_manager.h>
19#include <llvm/ADT/Twine.h>
20#include <llvm/IR/IRBuilder.h>
21#include <IDISA/idisa_builder.h>
22#include <kernels/kernel.h>
23
24namespace llvm {
25    class Value;
26    class Module;
27    class ExecutionEngine;
28    class VectorType;
29    class PointerType;
30    class ConstantAggregateZero;
31    class Constant;
32    class FunctionType;
33    class Function;
34    class BasicBlock;
35}
36
37namespace pablo {
38
39using namespace llvm;
40
41class PabloAST;
42class PabloBlock;
43class PabloFunction;
44class String;
45class Var;
46class Statement;
47class StatementList;
48class If;
49class While;
50
51class PabloCompiler {
52
53    typedef std::unordered_map<const pablo::PabloAST *, Value *>   ASTToValueMap;
54
55public:
56    PabloCompiler(Module * m, IDISA::IDISA_Builder * b);
57    ~PabloCompiler();
58    Function * compile(pablo::PabloFunction * function);   
59    void setKernel(KernelBuilder * kBuilder);
60   
61private:
62    void GenerateFunction(PabloFunction & function);
63    void Examine(PabloFunction & function);
64    void Examine(PabloBlock * block);
65
66    void SetOutputValue(Value * marker, const unsigned index);
67
68    void compileBlock(PabloBlock * block);
69    void compileStatement(const Statement * stmt);
70    void compileIf(const If * ifStmt);
71    void compileWhile(const While * whileStmt);
72    Value* compileExpression(const PabloAST * expr);
73    void GenerateKernel(PabloBlock * block, PabloFunction * function);
74
75    ASTToValueMap                       mMarkerMap;
76
77    Module *                            mMod;
78    IDISA::IDISA_Builder *              iBuilder;
79    Type* const                         mBitBlockType;
80
81    CarryManager *                      mCarryManager;
82
83    PointerType*                        mInputType;
84
85    PabloBlock *                        mPabloBlock;
86
87    KernelBuilder *                     mKBuilder;
88   
89    unsigned                            mWhileDepth;
90    unsigned                            mIfDepth;
91
92    Function *                          mFunction;
93    Value *                             mInputAddressPtr;
94    Value *                             mOutputAddressPtr;
95
96    unsigned                            mMaxWhileDepth;
97    int                                 mFilePosIdx;
98
99};
100
101}
102
103#endif // PABLO_COMPILER_H
Note: See TracBrowser for help on using the repository browser.