source: icGREP/icgrep-devel/icgrep/kernels/attributes.cpp

Last change on this file was 6184, checked in by nmedfort, 9 months ago

Initial version of PipelineKernel? + revised StreamSet? model.

File size: 2.1 KB
Line 
1#include "attributes.h"
2
3#include <llvm/Support/raw_ostream.h>
4#include <boost/preprocessor/stringize.hpp>
5
6namespace kernel {
7
8void Attribute::print(llvm::raw_ostream & out) const noexcept {
9    #define NAME(DEF) \
10        case KindId::DEF : out << BOOST_PP_STRINGIZE(DEF); break
11    #define NAME_AMOUNT(DEF) \
12        case KindId::DEF : out << BOOST_PP_STRINGIZE(DEF) << mAmount; break
13    switch (getKind()) {
14        NAME_AMOUNT(LookAhead);
15        NAME_AMOUNT(LookBehind);
16        NAME(Principal);
17        NAME(Deferred);
18        NAME(ZeroExtend);
19        NAME(IndependentRegionBegin); NAME(IndependentRegionEnd);
20        NAME(ConditionalRegionBegin); NAME(ConditionalRegionEnd);
21        NAME(RequiresPopCountArray); NAME(RequiresNegatedPopCountArray);
22        NAME_AMOUNT(Add);
23        NAME_AMOUNT(RoundUpTo);
24        NAME(ManagedBuffer);
25        NAME(Misaligned);
26        NAME_AMOUNT(BlockSize);
27        NAME(ReverseRegionBegin); NAME(ReverseRegionEnd);
28        NAME_AMOUNT(SliceOffset);
29        NAME(Expandable);
30        NAME(CanTerminateEarly);
31        NAME(MustExplicitlyTerminate);
32        NAME(SideEffecting);
33        NAME(Family);
34    }
35    #undef NAME
36    #undef NAME_AMOUNT
37}
38
39void AttributeSet::print(llvm::raw_ostream & out) const noexcept {
40    if (hasAttributes()) {
41        char joiner = '{';
42        for (const Attribute & a : getAttributes()) {
43            out << joiner;
44            a.print(out);
45            joiner = ',';
46        }
47        out << '}';
48    }
49}
50
51Attribute & AttributeSet::addAttribute(Attribute attribute) {
52    for (auto i = begin(), i_end = end(); i != i_end; ++i) {
53        Attribute & attr = const_cast<Attribute &>(*i);
54        if (attr.getKind() == attribute.getKind()) {
55            attr.mAmount = attribute.mAmount;
56            return attr;
57        }
58    }
59    emplace_back(attribute);
60    return back();
61}
62
63Attribute * AttributeSet::__findAttribute(const AttributeId id) const {
64    for (auto i = begin(), i_end = end(); i != i_end; ++i) {
65        if (i->getKind() == id) {
66            return const_cast<Attribute *>(&*i);
67        }
68    }
69    return nullptr;
70}
71
72}
Note: See TracBrowser for help on using the repository browser.