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

Last change on this file since 5974 was 5974, checked in by xwa163, 12 months ago
  1. Use i1 bit stream instead of i64 number stream in M0 related streams and Match Offset related stream
  2. Improve the performance of lz4_index_builder
File size: 2.8 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        void markCircularOutputBitstream(const std::unique_ptr<KernelBuilder> &iBuilder, const std::string &bitstreamName, llvm::Value *pos);
67    };
68}
69
70
71#endif //ICGREP_LZ4_INDEX_BUILDER_H
Note: See TracBrowser for help on using the repository browser.