1 |
|
/****************************************************************************** |
2 |
|
* Top contributors (to current version): |
3 |
|
* Liana Hadarean, Andres Noetzli, Mathias Preiner |
4 |
|
* |
5 |
|
* This file is part of the cvc5 project. |
6 |
|
* |
7 |
|
* Copyright (c) 2009-2021 by the authors listed in the file AUTHORS |
8 |
|
* in the top-level source directory and their institutional affiliations. |
9 |
|
* All rights reserved. See the file COPYING in the top-level source |
10 |
|
* directory for licensing information. |
11 |
|
* **************************************************************************** |
12 |
|
* |
13 |
|
* [[ Add one-line brief description here ]] |
14 |
|
* |
15 |
|
* [[ Add lengthier description here ]] |
16 |
|
* \todo document this file |
17 |
|
*/ |
18 |
|
|
19 |
|
#include "cvc5_private.h" |
20 |
|
|
21 |
|
#ifndef CVC5__THEORY__BV__THEORY_BV_REWRITER_H |
22 |
|
#define CVC5__THEORY__BV__THEORY_BV_REWRITER_H |
23 |
|
|
24 |
|
#include "theory/theory_rewriter.h" |
25 |
|
|
26 |
|
namespace cvc5 { |
27 |
|
namespace theory { |
28 |
|
namespace bv { |
29 |
|
|
30 |
|
typedef RewriteResponse (*RewriteFunction) (TNode, bool); |
31 |
|
|
32 |
9925 |
class TheoryBVRewriter : public TheoryRewriter |
33 |
|
{ |
34 |
|
public: |
35 |
|
/** |
36 |
|
* Temporary hack for devision-by-zero until we refactor theory code from |
37 |
|
* smt engine. |
38 |
|
* |
39 |
|
* @param node |
40 |
|
* |
41 |
|
* @return |
42 |
|
*/ |
43 |
|
static Node eliminateBVSDiv(TNode node); |
44 |
|
|
45 |
|
TheoryBVRewriter(); |
46 |
|
|
47 |
|
RewriteResponse postRewrite(TNode node) override; |
48 |
|
RewriteResponse preRewrite(TNode node) override; |
49 |
|
|
50 |
|
TrustNode expandDefinition(Node node) override; |
51 |
|
|
52 |
|
private: |
53 |
|
static RewriteResponse IdentityRewrite(TNode node, bool prerewrite = false); |
54 |
|
static RewriteResponse UndefinedRewrite(TNode node, bool prerewrite = false); |
55 |
|
|
56 |
|
static RewriteResponse RewriteBitOf(TNode node, bool prerewrite = false); |
57 |
|
static RewriteResponse RewriteEqual(TNode node, bool prerewrite = false); |
58 |
|
static RewriteResponse RewriteUlt(TNode node, bool prerewrite = false); |
59 |
|
static RewriteResponse RewriteUltBv(TNode node, bool prerewrite = false); |
60 |
|
static RewriteResponse RewriteSlt(TNode node, bool prerewrite = false); |
61 |
|
static RewriteResponse RewriteSltBv(TNode node, bool prerewrite = false); |
62 |
|
static RewriteResponse RewriteUle(TNode node, bool prerewrite = false); |
63 |
|
static RewriteResponse RewriteSle(TNode node, bool prerewrite = false); |
64 |
|
static RewriteResponse RewriteUgt(TNode node, bool prerewrite = false); |
65 |
|
static RewriteResponse RewriteSgt(TNode node, bool prerewrite = false); |
66 |
|
static RewriteResponse RewriteUge(TNode node, bool prerewrite = false); |
67 |
|
static RewriteResponse RewriteSge(TNode node, bool prerewrite = false); |
68 |
|
static RewriteResponse RewriteITEBv(TNode node, bool prerewrite = false); |
69 |
|
static RewriteResponse RewriteNot(TNode node, bool prerewrite = false); |
70 |
|
static RewriteResponse RewriteConcat(TNode node, bool prerewrite = false); |
71 |
|
static RewriteResponse RewriteAnd(TNode node, bool prerewrite = false); |
72 |
|
static RewriteResponse RewriteOr(TNode node, bool prerewrite = false); |
73 |
|
static RewriteResponse RewriteXnor(TNode node, bool prerewrite = false); |
74 |
|
static RewriteResponse RewriteXor(TNode node, bool prerewrite = false); |
75 |
|
static RewriteResponse RewriteNand(TNode node, bool prerewrite = false); |
76 |
|
static RewriteResponse RewriteNor(TNode node, bool prerewrite = false); |
77 |
|
static RewriteResponse RewriteComp(TNode node, bool prerewrite = false); |
78 |
|
static RewriteResponse RewriteMult(TNode node, bool prerewrite = false); |
79 |
|
static RewriteResponse RewriteAdd(TNode node, bool prerewrite = false); |
80 |
|
static RewriteResponse RewriteSub(TNode node, bool prerewrite = false); |
81 |
|
static RewriteResponse RewriteNeg(TNode node, bool prerewrite = false); |
82 |
|
static RewriteResponse RewriteUdiv(TNode node, bool prerewrite = false); |
83 |
|
static RewriteResponse RewriteUrem(TNode node, bool prerewrite = false); |
84 |
|
static RewriteResponse RewriteUdivTotal(TNode node, bool prerewrite = false); |
85 |
|
static RewriteResponse RewriteUremTotal(TNode node, bool prerewrite = false); |
86 |
|
static RewriteResponse RewriteSmod(TNode node, bool prerewrite = false); |
87 |
|
static RewriteResponse RewriteSdiv(TNode node, bool prerewrite = false); |
88 |
|
static RewriteResponse RewriteSrem(TNode node, bool prerewrite = false); |
89 |
|
static RewriteResponse RewriteShl(TNode node, bool prerewrite = false); |
90 |
|
static RewriteResponse RewriteLshr(TNode node, bool prerewrite = false); |
91 |
|
static RewriteResponse RewriteAshr(TNode node, bool prerewrite = false); |
92 |
|
static RewriteResponse RewriteExtract(TNode node, bool prerewrite = false); |
93 |
|
static RewriteResponse RewriteRepeat(TNode node, bool prerewrite = false); |
94 |
|
static RewriteResponse RewriteZeroExtend(TNode node, bool prerewrite = false); |
95 |
|
static RewriteResponse RewriteSignExtend(TNode node, bool prerewrite = false); |
96 |
|
static RewriteResponse RewriteRotateRight(TNode node, bool prerewrite = false); |
97 |
|
static RewriteResponse RewriteRotateLeft(TNode node, bool prerewrite = false); |
98 |
|
static RewriteResponse RewriteRedor(TNode node, bool prerewrite = false); |
99 |
|
static RewriteResponse RewriteRedand(TNode node, bool prerewrite = false); |
100 |
|
static RewriteResponse RewriteEagerAtom(TNode node, bool prerewrite = false); |
101 |
|
|
102 |
|
static RewriteResponse RewriteBVToNat(TNode node, bool prerewrite = false); |
103 |
|
static RewriteResponse RewriteIntToBV(TNode node, bool prerewrite = false); |
104 |
|
|
105 |
|
void initializeRewrites(); |
106 |
|
|
107 |
|
RewriteFunction d_rewriteTable[kind::LAST_KIND]; |
108 |
|
}; /* class TheoryBVRewriter */ |
109 |
|
|
110 |
|
} // namespace bv |
111 |
|
} // namespace theory |
112 |
|
} // namespace cvc5 |
113 |
|
|
114 |
|
#endif /* CVC5__THEORY__BV__THEORY_BV_REWRITER_H */ |