GCC Code Coverage Report
Directory: . Exec Total Coverage
File: src/theory/bv/theory_bv_rewriter.h Lines: 1 1 100.0 %
Date: 2021-05-22 Branches: 0 2 0.0 %

Line Exec Source
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
9459
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 */