source: icGREP/icgrep-devel/icgrep/kernels/lz4/lz4_index_builder.h @ 5961

Last change on this file since 5961 was 5961, checked in by xwa163, 14 months ago

Improve performance of lz4_index_builder by using memset to produce output

File size: 2.7 KB
Line 
1//
2// Created by wxy325 on 2018/3/16.
3//
4
5#ifndef ICGREP_LZ4_INDEX_BUILDER_H
6#define ICGREP_LZ4_INDEX_BUILDER_H
7
8#include "kernels/kernel.h"
9#include <string>
10#include <map>
11#include <vector>
12
13namespace llvm {
14    class Module;
15    class Function;
16    class BasicBlock;
17    class Value;
18}
19
20namespace IDISA { class IDISA_Builder; }
21
22namespace kernel {
23    class LZ4IndexBuilderKernel final : public SegmentOrientedKernel {
24    public:
25        LZ4IndexBuilderKernel(const std::unique_ptr<kernel::KernelBuilder> &iBuilder);
26
27    protected:
28        void generateDoSegmentMethod(const std::unique_ptr<KernelBuilder> & b) override;
29
30    private:
31        llvm::Value *
32        generateLoadInt64NumberInput(const std::unique_ptr<KernelBuilder> &iBuilder, std::string inputBufferName,
33                                     llvm::Value *globalOffset);
34
35        void generateProcessCompressedBlock(const std::unique_ptr<KernelBuilder> &iBuilder, llvm::Value *blockStart,
36                                            llvm::Value *blockEnd);
37
38        llvm::Value *generateLoadSourceInputByte(const std::unique_ptr<KernelBuilder> &iBuilder, llvm::Value *offset);
39
40        llvm::Value *advanceUntilNextZero(const std::unique_ptr<KernelBuilder> &iBuilder, std::string inputName,
41                                          llvm::Value *startPos, llvm::Value *maxPos = nullptr);
42
43        void increaseScalarField(const std::unique_ptr<KernelBuilder> &iBuilder, const std::string &fieldName,
44                                 llvm::Value *value);
45
46        llvm::Value *
47        processLiteral(const std::unique_ptr<KernelBuilder> &iBuilder, llvm::Value *token, llvm::Value *tokenPos,
48                       llvm::Value *blockEnd);
49
50        llvm::Value *
51        processMatch(const std::unique_ptr<KernelBuilder> &iBuilder, llvm::Value *offsetPos, llvm::Value *token,
52                     llvm::Value *blockEnd);
53
54        void generateStoreNumberOutput(const std::unique_ptr<KernelBuilder> &iBuilder,
55                                       const std::string &outputBufferName,
56                                       llvm::Value *value);
57
58        void clearCircularOutputBitstream(const std::unique_ptr<KernelBuilder> &iBuilder,
59                                                                 const std::string &bitstreamName,
60                                                                 llvm::Value *start, llvm::Value *end);
61
62        void setCircularOutputBitstream(const std::unique_ptr<KernelBuilder> &iBuilder,
63                                                               const std::string &bitstreamName,
64                                                               llvm::Value *start, llvm::Value *end);
65    };
66}
67
68
69#endif //ICGREP_LZ4_INDEX_BUILDER_H
Note: See TracBrowser for help on using the repository browser.