Ignore:
Timestamp:
Sep 21, 2017, 3:10:34 PM (21 months ago)
Author:
nmedfort
Message:

Minor clean up. Bug fix for object cache when the same cached kernel is used twice in a single run. Improvement to RE Minimizer.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/pablo_compiler.cpp

    r5629 r5646  
    8181        if (LLVM_UNLIKELY(isa<Lookahead>(stmt))) {
    8282            const Lookahead * const la = cast<Lookahead>(stmt);
    83             //assert ((isa<Var>(la->getExpr()) || isa<Extract>(la->getExpr())));
    84             if (LLVM_LIKELY(la->getAmount() > mKernel->getLookAhead())) {
    85                 mKernel->setLookAhead(la->getAmount());
     83            PabloAST * input = la->getExpression();
     84            if (LLVM_UNLIKELY(isa<Extract>(input))) {
     85                input = cast<Extract>(input)->getArray();
     86            }
     87            bool notFound = true;
     88            if (LLVM_LIKELY(isa<Var>(input))) {
     89                for (unsigned i = 0; i < mKernel->getNumOfInputs(); ++i) {
     90                    if (input == mKernel->getInput(i)) {
     91                        if (LLVM_LIKELY(mKernel->getLookAhead(i) < la->getAmount())) {
     92                            mKernel->setLookAhead(i, la->getAmount());
     93                        }
     94                        notFound = false;
     95                        break;
     96                    }
     97                }
     98            }
     99            if (LLVM_UNLIKELY(notFound)) {
     100                report_fatal_error("Lookahead " + stmt->getName() + " can only be performed on an input streamset");
    86101            }
    87102        } else if (LLVM_UNLIKELY(isa<Branch>(stmt))) {
     
    542557        } else if (const Lookahead * l = dyn_cast<Lookahead>(stmt)) {
    543558            Var * var = nullptr;
    544             PabloAST * stream = l->getExpr();
     559            PabloAST * stream = l->getExpression();
    545560            Value * index = iBuilder->getInt32(0);
    546561            if (LLVM_UNLIKELY(isa<Extract>(stream))) {
    547                 var = dyn_cast<Var>(cast<Extract>(stream)->getArray());
    548                 index = compileExpression(iBuilder, cast<Extract>(stream)->getIndex());
    549                 if (!var->isKernelParameter() || var->isReadNone()) {
    550                     std::string tmp;
    551                     raw_string_ostream out(tmp);
    552                     out << "Lookahead operation cannot be applied to ";
    553                     stmt->print(out);
    554                     out << " - not an input stream";
    555                     report_fatal_error(out.str());
    556                 }
    557             }
    558             if (LLVM_LIKELY(isa<Var>(stream))) {
    559                 var = cast<Var>(stream);
    560                 if (!var->isKernelParameter() || var->isReadNone()) {
    561                     std::string tmp;
    562                     raw_string_ostream out(tmp);
    563                     out << "Lookahead operation cannot be applied to ";
    564                     stmt->print(out);
    565                     out << ": ";
    566                     var->print(out);
    567                     out << " is not an input stream";
    568                     report_fatal_error(out.str());
    569                 }
     562                var = cast<Var>(cast<Extract>(stream)->getArray());
    570563            }
    571564            const auto bit_shift = (l->getAmount() % iBuilder->getBitBlockWidth());
Note: See TracChangeset for help on using the changeset viewer.