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

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