source: icGREP/icgrep-devel/icgrep/kernels/kernel.h @ 4926

Last change on this file since 4926 was 4926, checked in by lindanl, 3 years ago

Update kernel builder.

File size: 2.6 KB
Line 
1#ifndef KERNEL_H
2#define KERNEL_H
3/*
4 *  Copyright (c) 2016 International Characters.
5 *  This software is licensed to the public under the Open Software License 3.0.
6 */
7
8
9#include <IDISA/idisa_builder.h>
10#include <llvm/IR/Function.h>
11#include <llvm/IR/Module.h>
12
13namespace llvm {
14    class Value;
15    class Module;
16    class ExecutionEngine;
17    class VectorType;
18    class PointerType;
19    class Constant;
20    class FunctionType;
21    class Function;
22    class BasicBlock;
23    class Type;
24}
25
26using namespace llvm;
27
28typedef Value* valptr;
29
30struct Inputs {
31    std::vector<std::vector<valptr>> streams;
32    std::vector<valptr> scalars;
33};
34
35struct Outputs {
36    std::vector<valptr *> streams;
37    std::vector<valptr> accums;
38};
39
40class KernelBuilder{
41public:
42    // sets name & sets internal state to the kernel superclass state
43        KernelBuilder(std::string name, Module * m, IDISA::IDISA_Builder * b);
44        ~KernelBuilder();
45
46        int extendKernelInternalStateType(Type * t);
47        void addKernelOutputStream(int fw);
48        void addKernelOutputAccum(Type * t);
49        void addKernelInputStream(int fw, std::string name);
50        void addKernelInputScalar(Type * t, std::string name);
51    Function* CreateDoBlockFunction();
52        struct Inputs openDoBlock();
53        void closeDoBlock(struct Outputs);
54        void finalizeMethods();
55        void generateKernelInstance(int buffersize);
56        void generateInitCall();
57        Value * generateDoBlockCall(Value * input);
58    int getSegmentBlocks();
59
60    void changeKernelInternalState(int idx, Value * stateValue);
61    Value * getKernelInternalState(int idx);
62    Value * getKernelInternalStatePtr(int idx);
63
64private:
65        Module *                            mMod;
66    IDISA::IDISA_Builder *              iBuilder;
67    std::string                                                 mKernelName;
68    int                                 mPredifinedStates;
69    Type*                               mBitBlockType;
70    std::vector<Type *>                                 mStates;
71    std::vector<Type *>                 mInputStreams;
72    std::vector<Type *>                 mOutputStreams;
73    std::vector<Type *>                 mInputScalars;
74    std::vector<Type *>                 mOutputAccums;
75    std::vector<std::string>            mInputStreamNames;
76    std::vector<std::string>            mInputScalarNames;
77    Function*                                                   mConstructor;
78    Function*                                                   mInitFunction;
79    Function*                                                   mDoBlockFunction;
80    int                                 mBufferSize;
81    int                                 mBlockSize;
82    int                                 mSegmentBlocks;
83    Type *                              mKernelStructType;
84    Value*                              mKernelStruct;
85    Value*                              mKernelStructParam;
86};
87
88#endif // KERNEL_H
Note: See TracBrowser for help on using the repository browser.