source: icGREP/icgrep-devel/icgrep/lz4/LZ4Generator.h @ 5997

Last change on this file since 5997 was 5974, checked in by xwa163, 17 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.1 KB
Line 
1
2#ifndef ICGREP_LZ4GENERATOR_H
3#define ICGREP_LZ4GENERATOR_H
4#include <llvm/IR/Module.h>
5#include <llvm/IR/Function.h>
6
7#include <llvm/Support/Signals.h>
8#include <llvm/Support/ManagedStatic.h>
9#include <IR_Gen/idisa_target.h>
10
11#include <toolchain/toolchain.h>
12
13#include <toolchain/cpudriver.h>
14#include <string>
15
16namespace re { class CC; }
17
18
19typedef void (*MainFunctionType)(char * byte_data, size_t headerSize, size_t filesize, bool hasBlockChecksum);
20
21class LZ4Generator {
22
23public:
24    LZ4Generator();
25
26    MainFunctionType getMainFunc();
27
28    void generatePipeline(const std::string& outputFile);
29    void generateExtractOnlyPipeline(const std::string& outputFile);
30    void generateExtractAndDepositOnlyPipeline(const std::string& outputFile);
31
32protected:
33    //// Protected Method
34    void generateMainFunc(const std::unique_ptr<kernel::KernelBuilder> & iBuilder);
35    // Pipeline
36    virtual void generateLoadByteStreamAndBitStream(const std::unique_ptr<kernel::KernelBuilder> & iBuilder);
37    virtual void generateExtractAndDepositMarkers(const std::unique_ptr<kernel::KernelBuilder> & iBuilder);
38    virtual std::pair<parabix::StreamSetBuffer*, parabix::StreamSetBuffer*> generateSwizzleExtractData(const std::unique_ptr<kernel::KernelBuilder> & iBuilder);
39
40    // BufferSize related Helper Function
41    virtual int getInputBufferBlocks();
42    virtual int getDecompressedBufferBlocks();
43    int get4MbBufferBlocks();
44
45
46    //// Data Member
47    // Driver
48    ParabixDriver pxDriver;
49
50    // Runtime Arguments
51    llvm::Value * inputStream;
52    llvm::Value * headerSize;
53    llvm::Value * fileSize;
54    llvm::Value * hasBlockChecksum;
55
56
57    // StreamSetBuffers
58    parabix::StreamSetBuffer * ByteStream;
59    parabix::StreamSetBuffer * BasisBits;
60    parabix::StreamSetBuffer * DeletionMarker; //TODO rename to ExtarctMarker
61    parabix::StreamSetBuffer * DepositMarker;
62    parabix::StreamSetBuffer * MatchOffsetMarker;
63
64    // M0CountMarker will not contain anything, it will only be used to pass producedItemCount and manage processedItemCount between different kernel
65    parabix::StreamSetBuffer * M0CountMarker;
66    parabix::StreamSetBuffer * M0Marker;
67};
68
69
70#endif //ICGREP_LZ4GENERATOR_H
Note: See TracBrowser for help on using the repository browser.