CIRCT  19.0.0git
SMTDialect.cpp
Go to the documentation of this file.
1 //===- SMTDialect.cpp - SMT dialect implementation ------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
13 
14 using namespace circt;
15 using namespace smt;
16 
17 void SMTDialect::initialize() {
18  registerAttributes();
19  registerTypes();
20  addOperations<
21 #define GET_OP_LIST
22 #include "circt/Dialect/SMT/SMT.cpp.inc"
23  >();
24 }
25 
26 Operation *SMTDialect::materializeConstant(OpBuilder &builder, Attribute value,
27  Type type, Location loc) {
28  // BitVectorType constants can materialize into smt.bv.constant
29  if (auto bvType = dyn_cast<BitVectorType>(type)) {
30  if (auto attrValue = dyn_cast<BitVectorAttr>(value)) {
31  bool typesMatch = bvType == attrValue.getType();
32  assert(typesMatch && "attribute and desired result types have to match");
33  return builder.create<BVConstantOp>(loc, attrValue);
34  }
35  }
36 
37  // BoolType constants can materialize into smt.constant
38  if (auto boolType = dyn_cast<BoolType>(type)) {
39  if (auto attrValue = dyn_cast<BoolAttr>(value))
40  return builder.create<BoolConstantOp>(loc, attrValue);
41  }
42 
43  return nullptr;
44 }
45 
46 #include "circt/Dialect/SMT/SMTDialect.cpp.inc"
47 #include "circt/Dialect/SMT/SMTEnums.cpp.inc"
assert(baseType &&"element must be base type")
Builder builder
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Definition: DebugAnalysis.h:21