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

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

Add KernelBuilder?.

File size: 2.2 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       
28class KernelBuilder{
29public:
30    // sets name & sets internal state to the kernel superclass state
31        KernelBuilder(std::string name, Module * m, IDISA::IDISA_Builder * b);
32        ~KernelBuilder();
33
34        int extendKernelInternalStateType(Type * t);
35        void addKernelOutputStream(int fw);
36        void addKernelOutputAccum(Type * t);
37        void addKernelInputStream(int fw, std::string name);
38        void addKernelInputScalar(Type * t, std::string name);
39        std::vector<std::vector<Value *>> openDoBlock();
40        void closeDoBlock(Value * result[][8]);
41        void finalizeMethods();
42        void generateKernelInstance(int buffersize);
43        void generateInitCall();
44        Value * generateDoBlockCall(Value * input);
45    int getSegmentBlocks();
46
47        Module *                            mMod;
48    IDISA::IDISA_Builder *              iBuilder;
49    std::string                                                 mKernelName;
50    int                                 mPredifinedStates;
51    Type*                               mBitBlockType;
52    std::vector<Type *>                                 mStates;
53    std::vector<Type *>                 mInputStreams;
54    std::vector<Type *>                 mOutputStreams;
55    std::vector<Type *>                 mInputScalars;
56    std::vector<Type *>                 mOutputAccums;
57    std::vector<std::string>            mInputStreamNames;
58    std::vector<std::string>            mInputScalarNames;
59    Function*                                                   mConstructor;
60    Function*                                                   mInitFunction;
61    Function*                                                   mDoBlockFunction;
62    int                                 mBufferSize;
63    int                                 mBlockSize;
64    int                                 mSegmentBlocks;
65    Type *                              mKernelStructType;
66    Value*                              mKernelStruct;
67    Value*                              mKernelStructParam;
68};
69
70#endif // KERNEL_H
Note: See TracBrowser for help on using the repository browser.