source: icGREP/icgrep-devel/icgrep/lz4/LZ4Generator.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.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 * M0Marker;
66};
67
68
69#endif //ICGREP_LZ4GENERATOR_H
Note: See TracBrowser for help on using the repository browser.