Ignore:
Timestamp:
Jun 20, 2015, 3:52:41 PM (4 years ago)
Author:
nmedfort
Message:

Temporary check-in

File:
1 edited

Legend:

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

    r4594 r4611  
    136136        mPrev->mNext = this;
    137137    }
     138    if (LLVM_UNLIKELY(isa<If>(this) || isa<While>(this))) {
     139        PabloBlock & body = isa<If>(this) ? cast<If>(this)->getBody() : cast<While>(this)->getBody();
     140        mParent->addUser(&body);
     141    }
    138142}
    139143
     
    153157        mNext->mPrev = this;
    154158    }
     159    if (LLVM_UNLIKELY(isa<If>(this) || isa<While>(this))) {
     160        PabloBlock & body = isa<If>(this) ? cast<If>(this)->getBody() : cast<While>(this)->getBody();
     161        mParent->addUser(&body);
     162    }
    155163}
    156164
     
    172180        if (LLVM_LIKELY(mNext != nullptr)) {
    173181            mNext->mPrev = mPrev;
     182        }
     183        if (LLVM_UNLIKELY(isa<If>(this) || isa<While>(this))) {
     184            PabloBlock & body = isa<If>(this) ? cast<If>(this)->getBody() : cast<While>(this)->getBody();
     185            mParent->removeUser(&body);
    174186        }
    175187    }
     
    200212        while (stmt) {
    201213            stmt = stmt->eraseFromParent(recursively);
    202         }
     214        }       
    203215    }
    204216
     
    230242
    231243#ifndef NDEBUG
    232     bool Statement::noRecursiveOperand(const PabloAST * const operand) {
    233         if (operand && isa<Statement>(operand)) {
    234             std::queue<const Statement *> Q;
    235             Q.push(cast<Statement>(operand));
    236             while (!Q.empty()) {
    237                 const Statement * stmt = Q.front();
    238                 if (stmt == this) {
    239                     return false;
    240                 }
    241                 Q.pop();
    242                 for (auto i = 0; i != stmt->getNumOperands(); ++i) {
    243                     const PabloAST * op = stmt->getOperand(i);
    244                     if (isa<Statement>(op)) {
    245                         Q.push(cast<Statement>(op));
    246                     }
    247                 }
    248             }
    249         }
    250         return true;
    251     }
     244bool Statement::noRecursiveOperand(const PabloAST * const operand) {
     245    if (operand && isa<Statement>(operand)) {
     246        std::queue<const Statement *> Q;
     247        Q.push(cast<Statement>(operand));
     248        while (!Q.empty()) {
     249            const Statement * stmt = Q.front();
     250            if (stmt == this) {
     251                return false;
     252            }
     253            Q.pop();
     254            for (auto i = 0; i != stmt->getNumOperands(); ++i) {
     255                const PabloAST * op = stmt->getOperand(i);
     256                if (isa<Statement>(op)) {
     257                    Q.push(cast<Statement>(op));
     258                }
     259            }
     260        }
     261    }
     262    return true;
     263}
    252264#endif
    253265
Note: See TracChangeset for help on using the changeset viewer.