Ignore:
Timestamp:
Sep 7, 2017, 4:56:56 PM (2 years ago)
Author:
nmedfort
Message:

Partial check-in for avoidance of compiling Pablo/LLVM code to determine the Kernel struct type when using a cached object. Inactive RE alternation minimization check in.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_memoizer.hpp

    r5267 r5630  
    1 #ifndef RE_NAMEDICTIONARY_H
    2 #define RE_NAMEDICTIONARY_H
     1#ifndef RE_MEMOIZER_H
     2#define RE_MEMOIZER_H
    33
    44#include <re/re_name.h>
     
    88
    99struct MemoizerComparator {
    10     inline bool operator() (const RE * lh, const RE * rh) const{
    11         if (LLVM_LIKELY(llvm::isa<Name>(lh) && llvm::isa<Name>(rh))) {
    12             return *llvm::cast<Name>(lh) < *llvm::cast<Name>(rh);
    13         } else if (llvm::isa<Name>(lh)) {
    14             return *llvm::cast<Name>(lh) < *llvm::cast<CC>(rh);
    15         }
    16         return *llvm::cast<Name>(rh) > *llvm::cast<CC>(lh);
    17     }
     10    bool operator() (const RE * lh, const RE * rh) const;
    1811};
    1912
    2013struct Memoizer : public std::set<RE *, MemoizerComparator> {
    2114
    22     inline Name * memoize(CC * cc) {
     15    RE * memoize(RE * const re) {
     16        return *(insert(re).first);
     17    }
     18
     19    Name * memoize(Name * const name) {
     20        return llvm::cast<Name>(memoize(llvm::cast<RE>(name)));
     21    }
     22
     23    Name * memoize(CC * const cc) {
    2324        auto f = find(cc);
    2425        if (f != end()) {
    2526            return llvm::cast<Name>(*f);
    2627        } else {
    27             Name * name = makeName(cc);
    28             insert(name);
    29             return name;
     28            return memoize(makeName(cc));
    3029        }
    31     }
    32 
    33     inline Name * memoize(Name * name) {
    34         return llvm::cast<Name>(*insert(name).first);
    3530    }
    3631};
     
    3833}
    3934
    40 #endif // RE_NAMEDICTIONARY_H
     35#endif // RE_MEMOIZER_H
Note: See TracChangeset for help on using the changeset viewer.