Ignore:
Timestamp:
Sep 27, 2015, 1:32:27 AM (4 years ago)
Author:
nmedfort
Message:

Progress on multi-target UCD compiler.

File:
1 edited

Legend:

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

    r4788 r4797  
    99namespace pablo {
    1010
    11 Zeroes * const PabloBlock::mZeroes = new Zeroes();
    12 
    13 Ones * const PabloBlock::mOnes = new Ones();
     11Zeroes PabloBlock::mZeroes;
     12
     13Ones PabloBlock::mOnes;
    1414
    1515inline PabloAST * PabloBlock::renameNonNamedNode(PabloAST * expr, const std::string && prefix) {
     
    339339    if (isa<Zeroes>(expr1) || isa<Ones>(expr2)){
    340340        return renameNonNamedNode(expr2, std::move(prefix));
    341     }
    342     if (isa<Zeroes>(expr2) || isa<Ones>(expr1) || equals(expr1, expr2)) {
     341    } else if (isa<Zeroes>(expr2) || isa<Ones>(expr1) || equals(expr1, expr2)) {
    343342        return renameNonNamedNode(expr1, std::move(prefix));
    344     }
    345     else if (Not * not1 = dyn_cast<Not>(expr1)) {
     343    } else if (Not * not1 = dyn_cast<Not>(expr1)) {
    346344        // ¬a√b = ¬¬(¬a√b) = ¬(a ∧ ¬b)
    347345        return createNot(createAnd(not1->getExpr(), createNot(expr2)), prefix);
    348     }
    349     else if (Not * not2 = dyn_cast<Not>(expr2)) {
     346    } else if (Not * not2 = dyn_cast<Not>(expr2)) {
    350347        // a√¬b = ¬¬(¬b√a) = ¬(b ∧ ¬a)
    351348        return createNot(createAnd(not2->getExpr(), createNot(expr1)), prefix);
    352     }
    353     else if (And * and1 = dyn_cast<And>(expr1)) {
     349    } else if (And * and1 = dyn_cast<And>(expr1)) {
    354350        if (And * and2 = dyn_cast<And>(expr2)) {
    355351            PabloAST * const expr1a = and1->getExpr1();
     
    361357            if (equals(expr1a, expr2a)) {
    362358                return createAnd(expr1a, createOr(expr1b, expr2b), prefix);
    363             }
    364             else if (equals(expr1b, expr2b)) {
     359            } else if (equals(expr1b, expr2b)) {
    365360                return createAnd(expr1b, createOr(expr1a, expr2a), prefix);
    366             }
    367             else if (equals(expr1a, expr2b)) {
     361            } else if (equals(expr1a, expr2b)) {
    368362                return createAnd(expr1a, createOr(expr1b, expr2a), prefix);
    369             }
    370             else if (equals(expr1b, expr2a)) {
     363            } else if (equals(expr1b, expr2a)) {
    371364                return createAnd(expr1b, createOr(expr1a, expr2b), prefix);
    372365            }
     
    388381PabloAST * PabloBlock::createXor(PabloAST * expr1, PabloAST * expr2) {
    389382    assert (expr1 && expr2);
     383    if (expr1 == expr2) {
     384        return PabloBlock::createZeroes();
     385    }
    390386    if (isa<Ones>(expr1)) {
    391387        return createNot(expr2);
    392     }
    393     else if (isa<Zeroes>(expr1)){
     388    } else if (isa<Zeroes>(expr1)){
    394389        return expr2;
    395     }
    396     else if (isa<Ones>(expr2)) {
     390    } else if (isa<Ones>(expr2)) {
    397391        return createNot(expr1);
    398     }
    399     else if (isa<Zeroes>(expr2)){
     392    } else if (isa<Zeroes>(expr2)){
    400393        return expr1;
    401     }
    402     else if (Not * not1 = dyn_cast<Not>(expr1)) {
     394    } else if (Not * not1 = dyn_cast<Not>(expr1)) {
    403395        if (Not * not2 = dyn_cast<Not>(expr2)) {
    404396            return createXor(not1->getExpr(), not2->getExpr());
     
    413405PabloAST * PabloBlock::createXor(PabloAST * expr1, PabloAST * expr2, const std::string prefix) {
    414406    assert (expr1 && expr2);
     407    if (expr1 == expr2) {
     408        return PabloBlock::createZeroes();
     409    }
    415410    if (isa<Ones>(expr1)) {
    416411        return createNot(expr2, prefix);
    417     }
    418     else if (isa<Zeroes>(expr1)){
     412    } else if (isa<Zeroes>(expr1)){
    419413        return expr2;
    420     }
    421     else if (isa<Ones>(expr2)) {
     414    } else if (isa<Ones>(expr2)) {
    422415        return createNot(expr1, prefix);
    423     }
    424     else if (isa<Zeroes>(expr2)){
     416    } else if (isa<Zeroes>(expr2)){
    425417        return expr1;
    426     }
    427     else if (Not * not1 = dyn_cast<Not>(expr1)) {
     418    } else if (Not * not1 = dyn_cast<Not>(expr1)) {
    428419        if (Not * not2 = dyn_cast<Not>(expr2)) {
    429420            return createXor(not1->getExpr(), not2->getExpr(), prefix);
     
    442433    if (isa<Ones>(condition)) {
    443434        return trueExpr;
    444     }
    445     else if (isa<Zeroes>(condition)){
     435    } else if (isa<Zeroes>(condition)){
    446436        return falseExpr;
    447     }
    448     else if (isa<Ones>(trueExpr)) {
     437    } else if (isa<Ones>(trueExpr)) {
    449438        return createOr(condition, falseExpr);
    450     }
    451     else if (isa<Zeroes>(trueExpr)){
     439    } else if (isa<Zeroes>(trueExpr)){
    452440        return createAnd(createNot(condition), falseExpr);
    453     }
    454     else if (isa<Ones>(falseExpr)) {
     441    } else if (isa<Ones>(falseExpr)) {
    455442        return createOr(createNot(condition), trueExpr);
    456     }
    457     else if (isa<Zeroes>(falseExpr)){
     443    } else if (isa<Zeroes>(falseExpr)){
    458444        return createAnd(condition, trueExpr);
    459     }
    460     else if (equals(trueExpr, falseExpr)) {
     445    } else if (equals(trueExpr, falseExpr)) {
    461446        return trueExpr;
    462     }
    463     else if (isa<Not>(trueExpr) && equals(cast<Not>(trueExpr)->getExpr(), falseExpr)) {
     447    } else if (isa<Not>(trueExpr) && equals(cast<Not>(trueExpr)->getExpr(), falseExpr)) {
    464448        return createXor(condition, falseExpr);
    465     }
    466     else if (isa<Not>(falseExpr) && equals(trueExpr, cast<Not>(falseExpr)->getExpr())){
     449    } else if (isa<Not>(falseExpr) && equals(trueExpr, cast<Not>(falseExpr)->getExpr())){
    467450        return createXor(condition, falseExpr);
    468451    }
Note: See TracChangeset for help on using the changeset viewer.