source: icGREP/icgrep-devel/icgrep/pablo/pe_and.cpp @ 4214

Last change on this file since 4214 was 4214, checked in by nmedfort, 5 years ago

Partial implementation of 'PabloBuilder?'.

File size: 1.2 KB
Line 
1/*
2 *  Copyright (c) 2014 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 *  icgrep is a trademark of International Characters.
5 */
6
7#include <pablo/pe_and.h>
8#include <pablo/codegenstate.h>
9
10namespace pablo {
11
12PabloE * OptimizeAnd::operator ()(PabloE * expr1, PabloE * expr2) {
13    if (All * all = dyn_cast<All>(expr1)) {
14        if (all->getValue()) {
15            return expr2;
16        }
17        else {
18            return cg.createAll(0);
19        }
20    }
21    else if (All* all = dyn_cast<All>(expr2)) {
22        if (all->getValue()) {
23            return expr1;
24        }
25        else {
26            return cg.createAll(0);
27        }
28    }
29    else if (equals(expr1, expr2)) {
30        return expr1;
31    }
32    else if (Not * pe_not_e1 = dyn_cast<Not>(expr1)) {
33        if (Not * pe_not_e2 = dyn_cast<Not>(expr2)) {
34            return cg.createNot(cg.createOr(pe_not_e1->getExpr(), pe_not_e2->getExpr()));
35        }
36        else if (equals(pe_not_e1->getExpr(), expr2)) {
37            return cg.createAll(0);
38        }
39    }
40    else if (Not * pe_not_e2 = dyn_cast<Not>(expr2)) {
41        if (equals(expr1, pe_not_e2->getExpr())) {
42            return cg.createAll(0);
43        }
44    }
45    return new And(expr1, expr2);
46}
47
48}
Note: See TracBrowser for help on using the repository browser.