Separate public-facing and internal-facing interfaces to Statistics.
[cvc5.git] / src / theory / bv / theory_bv_rewriter.h
1 /********************* */
2 /*! \file theory_bv_rewriter.h
3 ** \verbatim
4 ** Original author: dejan
5 ** Major contributors: mdeters
6 ** Minor contributors (to current version): none
7 ** This file is part of the CVC4 prototype.
8 ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys)
9 ** Courant Institute of Mathematical Sciences
10 ** New York University
11 ** See the file COPYING in the top-level source directory for licensing
12 ** information.\endverbatim
13 **
14 ** \brief [[ Add one-line brief description here ]]
15 **
16 ** [[ Add lengthier description here ]]
17 ** \todo document this file
18 **/
19
20 #include "cvc4_private.h"
21
22 #ifndef __CVC4__THEORY__BV__THEORY_BV_REWRITER_H
23 #define __CVC4__THEORY__BV__THEORY_BV_REWRITER_H
24
25 #include "theory/rewriter.h"
26 #include "util/statistics_registry.h"
27
28 namespace CVC4 {
29 namespace theory {
30 namespace bv {
31
32 struct AllRewriteRules;
33 typedef RewriteResponse (*RewriteFunction) (TNode, bool);
34
35 class TheoryBVRewriter {
36
37 static RewriteFunction d_rewriteTable[kind::LAST_KIND];
38
39 static RewriteResponse IdentityRewrite(TNode node, bool prerewrite = false);
40 static RewriteResponse UndefinedRewrite(TNode node, bool prerewrite = false);
41
42 static void initializeRewrites();
43
44 static RewriteResponse RewriteEqual(TNode node, bool prerewrite = false);
45 static RewriteResponse RewriteUlt(TNode node, bool prerewrite = false);
46 static RewriteResponse RewriteSlt(TNode node, bool prerewrite = false);
47 static RewriteResponse RewriteUle(TNode node, bool prerewrite = false);
48 static RewriteResponse RewriteSle(TNode node, bool prerewrite = false);
49 static RewriteResponse RewriteUgt(TNode node, bool prerewrite = false);
50 static RewriteResponse RewriteSgt(TNode node, bool prerewrite = false);
51 static RewriteResponse RewriteUge(TNode node, bool prerewrite = false);
52 static RewriteResponse RewriteSge(TNode node, bool prerewrite = false);
53 static RewriteResponse RewriteNot(TNode node, bool prerewrite = false);
54 static RewriteResponse RewriteConcat(TNode node, bool prerewrite = false);
55 static RewriteResponse RewriteAnd(TNode node, bool prerewrite = false);
56 static RewriteResponse RewriteOr(TNode node, bool prerewrite = false);
57 static RewriteResponse RewriteXnor(TNode node, bool prerewrite = false);
58 static RewriteResponse RewriteXor(TNode node, bool prerewrite = false);
59 static RewriteResponse RewriteNand(TNode node, bool prerewrite = false);
60 static RewriteResponse RewriteNor(TNode node, bool prerewrite = false);
61 static RewriteResponse RewriteComp(TNode node, bool prerewrite = false);
62 static RewriteResponse RewriteMult(TNode node, bool prerewrite = false);
63 static RewriteResponse RewritePlus(TNode node, bool prerewrite = false);
64 static RewriteResponse RewriteSub(TNode node, bool prerewrite = false);
65 static RewriteResponse RewriteNeg(TNode node, bool prerewrite = false);
66 static RewriteResponse RewriteUdiv(TNode node, bool prerewrite = false);
67 static RewriteResponse RewriteUrem(TNode node, bool prerewrite = false);
68 static RewriteResponse RewriteSmod(TNode node, bool prerewrite = false);
69 static RewriteResponse RewriteSdiv(TNode node, bool prerewrite = false);
70 static RewriteResponse RewriteSrem(TNode node, bool prerewrite = false);
71 static RewriteResponse RewriteShl(TNode node, bool prerewrite = false);
72 static RewriteResponse RewriteLshr(TNode node, bool prerewrite = false);
73 static RewriteResponse RewriteAshr(TNode node, bool prerewrite = false);
74 static RewriteResponse RewriteExtract(TNode node, bool prerewrite = false);
75 static RewriteResponse RewriteRepeat(TNode node, bool prerewrite = false);
76 static RewriteResponse RewriteZeroExtend(TNode node, bool prerewrite = false);
77 static RewriteResponse RewriteSignExtend(TNode node, bool prerewrite = false);
78 static RewriteResponse RewriteRotateRight(TNode node, bool prerewrite = false);
79 static RewriteResponse RewriteRotateLeft(TNode node, bool prerewrite = false);
80
81 public:
82
83 static RewriteResponse postRewrite(TNode node);
84
85 static RewriteResponse preRewrite(TNode node);
86
87 static void init();
88 static void shutdown();
89
90 };/* class TheoryBVRewriter */
91
92 }/* CVC4::theory::bv namespace */
93 }/* CVC4::theory namespace */
94 }/* CVC4 namespace */
95
96 #endif /* __CVC4__THEORY__BV__THEORY_BV_REWRITER_H */