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

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

Replaced dynamic_cast with llvm::dyn_cast in pablo code; implemented make functions for pablo constructors. Disabled RTTI.

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 "pe_and.h"
8#include "pe_all.h"
9#include "pe_not.h"
10#include "pe_or.h"
11
12namespace pablo {
13
14PabloE * make_and(PabloE * expr1, PabloE *expr2) {
15    if (All * all = dyn_cast<All>(expr1)) {
16        if (all->getValue()) {
17            return expr2;
18        }
19        else {
20            return make_all(0);
21        }
22    }
23    else if (All* all = dyn_cast<All>(expr2)) {
24        if (all->getValue()) {
25            return expr1;
26        }
27        else {
28            return make_all(0);
29        }
30    }
31    else if (equals(expr1, expr2)) {
32        return expr1;
33    }
34    else if (Not * pe_not_e1 = dyn_cast<Not>(expr1)) {
35        if (Not * pe_not_e2 = dyn_cast<Not>(expr2)) {
36            return make_not(make_or(pe_not_e1->getExpr(), pe_not_e2->getExpr()));
37        }
38        else if (equals(pe_not_e1->getExpr(), expr2)) {
39            return make_all(0);
40        }
41    }
42    else if (Not * pe_not_e2 = dyn_cast<Not>(expr2)) {
43        if (equals(expr1, pe_not_e2->getExpr())) {
44            return make_all(0);
45        }
46    }
47    return new And(expr1, expr2);
48}
49
50}
Note: See TracBrowser for help on using the repository browser.