Ignore:
Timestamp:
Sep 23, 2016, 4:12:41 PM (3 years ago)
Author:
nmedfort
Message:

Initial work for incorporating Types into Pablo AST.

File:
1 edited

Legend:

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

    r5156 r5160  
    5555        if (LLVM_UNLIKELY(isa<Zeroes>(var->getOperand(i)))) {
    5656            if (LLVM_UNLIKELY(isa<And>(var))) {
    57                 return PabloBlock::createZeroes();
     57                return block->createZeroes(var->getType());
    5858            }
    5959            var->removeOperand(i);
     
    6161        } else if (LLVM_UNLIKELY(isa<Ones>(var->getOperand(i)))) {
    6262            if (LLVM_UNLIKELY(isa<Or>(var))) {
    63                 return PabloBlock::createOnes();
     63                return block->createOnes(var->getType());
    6464            } else if (LLVM_UNLIKELY(isa<Xor>(var))) {
    6565                negated = !negated;
     
    140140                                        block->setInsertPoint(var->getPrevNode());
    141141                                        if (typeId == TypeId::And) {
    142                                             expr = block->createAnd(operands - 1);
     142                                            expr = block->createAnd(var->getType(), operands - 1);
    143143                                        } else { // if (typeId == TypeId::Or) {
    144                                             expr = block->createOr(operands - 1);
     144                                            expr = block->createOr(var->getType(), operands - 1);
    145145                                        }
    146146                                        for (unsigned k = 0; k != di; ++k) {
     
    221221                    if (LLVM_UNLIKELY(var->getOperand(j) == negated)) {
    222222                        if (isa<And>(var)) { // (A ∧ ¬A) ∧ B ⇔ 0 for any B
    223                             return PabloBlock::createZeroes();
     223                            return block->createZeroes(var->getType());
    224224                        } else { // if (isa<Or>(var)) { // (A √ ¬A) √ B ⇔ 1 for any B
    225                             return PabloBlock::createOnes();
     225                            return block->createOnes(var->getType());
    226226                        }
    227227                    }
     
    234234    if (LLVM_UNLIKELY(var->getNumOperands() < 2)) {
    235235        if (LLVM_UNLIKELY(var->getNumOperands() == 0)) {
    236             return PabloBlock::createZeroes();
     236            return block->createZeroes(var->getType());
    237237        }
    238238        replacement = var->getOperand(0);
     
    249249 * @brief fold
    250250 ** ------------------------------------------------------------------------------------------------------------- */
    251 inline PabloAST * Simplifier::fold(Statement * stmt, PabloBlock * const block) {
     251PabloAST * Simplifier::fold(Statement * stmt, PabloBlock * const block) {
    252252    if (isa<Variadic>(stmt)) {
    253253        return fold(cast<Variadic>(stmt), block);
     
    257257            return cast<Not>(value)->getOperand(0); // ¬¬A ⇔ A
    258258        } else if (LLVM_UNLIKELY(isa<Zeroes>(value))) {
    259             return PabloBlock::createOnes(); // ¬0 ⇔ 1
     259            return block->createOnes(stmt->getType()); // ¬0 ⇔ 1
    260260        }  else if (LLVM_UNLIKELY(isa<Ones>(value))) {
    261             return PabloBlock::createZeroes(); // ¬1 ⇔ 0
     261            return block->createZeroes(stmt->getType()); // ¬1 ⇔ 0
    262262        }
    263263    } else if (isa<Advance>(stmt)) {
    264264        if (LLVM_UNLIKELY(isa<Zeroes>(stmt->getOperand(0)))) {
    265             return PabloBlock::createZeroes();
     265            return block->createZeroes(stmt->getType());
    266266        }
    267267    } else {
     
    292292                    case PabloAST::ClassTypeId::ScanThru:
    293293                        if (LLVM_UNLIKELY(i == 1)) {
    294                             return PabloBlock::createZeroes();
     294                            return block->createZeroes(stmt->getType());
    295295                        }
    296296                        break;
    297297                    case PabloAST::ClassTypeId::MatchStar:
    298298                        if (LLVM_UNLIKELY(i == 0)) {
    299                             return PabloBlock::createOnes();
     299                            return block->createOnes(stmt->getType());
    300300                        }
    301301                        break;
     
    370370                    break;
    371371                }
    372                 parent = parent->getParent();
     372                parent = parent->getPredecessor ();
    373373            }
    374374        }
     
    430430    ExpressionTable encountered(predecessor);
    431431    Statement * stmt = block->front();
    432 
    433432    while (stmt) {
    434433        if (Assign * assign = dyn_cast<Assign>(stmt)) {
Note: See TracChangeset for help on using the changeset viewer.