Ignore:
Timestamp:
Dec 3, 2017, 12:40:40 PM (18 months ago)
Author:
nmedfort
Message:

Bug fixes and simplified MultiBlockKernel? logic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/kernels/interface.h

    r5706 r5755  
    2525namespace kernel {
    2626
    27 struct Binding {
    28 
    29     friend class KernelInterface;
     27struct Binding : public AttributeSet {
    3028
    3129    Binding(llvm::Type * type, const std::string & name, ProcessingRate r = FixedRate(1))
    32     : type(type), name(name), rate(r), attributes() { }
     30    : AttributeSet()
     31    , mType(type), mName(name), mRate(std::move(r)) { }
    3332
    3433
    3534    Binding(llvm::Type * type, const std::string & name, ProcessingRate r, Attribute && attribute)
    36     : type(type), name(name), rate(r), attributes({std::move(attribute)}) { }
     35    : AttributeSet({std::move(attribute)})
     36    , mType(type), mName(name), mRate(std::move(r)) { }
    3737
    3838
    3939    Binding(llvm::Type * type, const std::string & name, ProcessingRate r, std::initializer_list<Attribute> attributes)
    40     : type(type), name(name), rate(r), attributes(attributes) { }
     40    : AttributeSet(attributes)
     41    , mType(type), mName(name), mRate(std::move(r)) { }
    4142
    4243    llvm::Type * getType() const {
    43         return type;
     44        return mType;
    4445    }
    4546
    4647    const std::string & getName() const {
    47         return name;
     48        return mName;
    4849    }
    4950
    5051    const ProcessingRate & getRate() const {
    51         return rate;
    52     }
    53 
    54     const Attribute & getAttribute(const unsigned i) const {
    55         return attributes[i];
    56     }
    57 
    58     const std::vector<Attribute> & getAttributes() const {
    59         return attributes;
    60     }
    61 
    62     void addAttribute(Attribute attribute);
    63 
    64     bool hasAttributes() const {
    65         return !attributes.empty();
     52        return mRate;
     53    }
     54
     55    ProcessingRate & getRate() {
     56        return mRate;
     57    }
     58
     59    bool isPrincipal() const {
     60        return hasAttribute(Attribute::KindId::Principal);
     61    }
     62
     63    bool notDeferred() const {
     64        return !hasAttribute(Attribute::KindId::Deferred);
    6665    }
    6766
    6867private:
    69     llvm::Type * const          type;
    70     const std::string           name;
    71     ProcessingRate              rate;
    72     std::vector<Attribute>      attributes;
     68    llvm::Type * const          mType;
     69    const std::string           mName;
     70    ProcessingRate              mRate;
    7371};
    7472
    75 class KernelInterface {
     73using Bindings = std::vector<Binding>;
     74
     75class KernelInterface : public AttributeSet {
    7676public:
    7777    /*
     
    9797
    9898    const Binding & getStreamInput(const unsigned i) const {
     99        assert (i < getNumOfStreamInputs());
    99100        return mStreamSetInputs[i];
    100101    }
     
    113114
    114115    const Binding & getStreamOutput(const unsigned i) const {
     116        assert (i < getNumOfStreamOutputs());
    115117        return mStreamSetOutputs[i];
    116118    }
     
    153155    void setInstance(llvm::Value * const instance);
    154156
    155     bool hasPrincipleItemCount() const {
    156         return mHasPrincipleItemCount;
     157    bool hasPrincipalItemCount() const {
     158        return mHasPrincipalItemCount;
    157159    }
    158160
     
    184186    , mModule(nullptr)
    185187    , mKernelStateType(nullptr)
    186     , mHasPrincipleItemCount(false)
     188    , mHasPrincipalItemCount(false)
    187189    , mKernelName(kernelName)
    188190    , mStreamSetInputs(stream_inputs)
     
    191193    , mScalarOutputs(scalar_outputs)
    192194    , mInternalScalars(internal_scalars) {
    193         normalizeStreamProcessingRates();
     195
    194196    }
    195197   
    196 private:
    197 
    198     void normalizeStreamProcessingRates();
    199 
    200198protected:
    201199
     
    203201    llvm::Module *                          mModule;
    204202    llvm::StructType *                      mKernelStateType;
    205     bool                                    mHasPrincipleItemCount;
     203    bool                                    mHasPrincipalItemCount;
    206204    const std::string                       mKernelName;
    207205    std::vector<llvm::Value *>              mInitialArguments;
     
    211209    std::vector<Binding>                    mScalarOutputs;
    212210    std::vector<Binding>                    mInternalScalars;
    213 
    214211};
    215212
Note: See TracChangeset for help on using the changeset viewer.