source: icGREP/icgrep-devel/icgrep/kernels/optimizationbranch.h

Last change on this file was 6296, checked in by cameron, 6 months ago

Merge branch 'master' of https://cs-git-research.cs.surrey.sfu.ca/cameron/parabix-devel

File size: 2.0 KB
Line 
1#ifndef OPTIMIZATIONBRANCH_H
2#define OPTIMIZATIONBRANCH_H
3
4#include <kernels/kernel.h>
5
6namespace llvm { class Value; }
7
8namespace kernel {
9
10struct OptimizationBranchCompiler;
11
12class OptimizationBranch final : public Kernel {
13    friend class OptimizationBranchBuilder;
14    friend class OptimizationBranchCompiler;
15public:
16
17    static bool classof(const Kernel * const k) {
18        switch (k->getTypeId()) {
19            case TypeId::OptimizationBranch:
20                return true;
21            default:
22                return false;
23        }
24    }
25
26    const Kernel * getAllZeroKernel() const {
27        return mAllZeroKernel;
28    }
29
30    const Kernel * getNonZeroKernel() const {
31        return mNonZeroKernel;
32    }
33
34    const Relationship * getCondition() const {
35        return mCondition;
36    }
37
38protected:
39
40    OptimizationBranch(const std::unique_ptr<KernelBuilder> & b,
41                       std::string && signature,
42                       not_null<Relationship *> condition,
43                       not_null<Kernel *> nonZeroKernel,
44                       not_null<Kernel *> allZeroKernel,
45                       Bindings && stream_inputs,
46                       Bindings && stream_outputs,
47                       Bindings && scalar_inputs,
48                       Bindings && scalar_outputs);
49
50    void addInternalKernelProperties(const std::unique_ptr<kernel::KernelBuilder> & b) final;
51
52    void addKernelDeclarations(const std::unique_ptr<KernelBuilder> & b) final;
53
54    void generateInitializeMethod(const std::unique_ptr<KernelBuilder> & b) final;
55
56    void generateKernelMethod(const std::unique_ptr<KernelBuilder> & b) final;
57
58    void generateFinalizeMethod(const std::unique_ptr<KernelBuilder> & b) final;
59
60private:
61
62    Relationship * const                        mCondition;
63    Kernel * const                              mNonZeroKernel;
64    Kernel * const                              mAllZeroKernel;
65    std::unique_ptr<OptimizationBranchCompiler> mCompiler;
66};
67
68}
69
70#endif // OPTIMIZATIONBRANCH_H
Note: See TracBrowser for help on using the repository browser.