12 #include "mlir/IR/PatternMatch.h"
14 using namespace circt;
22 if (
auto intAttr = dyn_cast<IntegerAttr>(attr))
23 return intAttr.getValue().isZero();
29 static SmallVector<Value>
concatValues(ValueRange a, ValueRange b) {
31 v.append(a.begin(), a.end());
32 v.append(b.begin(), b.end());
38 SmallVector<Value> flatInputs;
39 for (
auto value : values) {
40 if (
auto concatOp = value.getDefiningOp<ConcatOp>()) {
41 auto inputs = concatOp.getInputs();
44 flatInputs.push_back(value);
55 #include "circt/Dialect/LTL/LTLFolds.cpp.inc"
62 OpFoldResult DelayOp::fold(FoldAdaptor adaptor) {
64 if (adaptor.getDelay() == 0 && adaptor.getLength() == 0)
70 void DelayOp::getCanonicalizationPatterns(RewritePatternSet &results,
71 MLIRContext *context) {
72 results.add<patterns::NestedDelays>(results.getContext());
73 results.add<patterns::MoveDelayIntoConcat>(results.getContext());
80 OpFoldResult ConcatOp::fold(FoldAdaptor adaptor) {
82 if (getInputs().
size() == 1)
83 return getInputs()[0];
88 void ConcatOp::getCanonicalizationPatterns(RewritePatternSet &results,
89 MLIRContext *context) {
90 results.add<patterns::FlattenConcats>(results.getContext());
97 OpFoldResult DisableOp::fold(FoldAdaptor adaptor) {
static SmallVector< Value > flattenConcats(ValueRange values)
Inline all ConcatOps in a range of values.
static SmallVector< Value > concatValues(ValueRange a, ValueRange b)
Concatenate two value ranges into a larger range.
llvm::SmallVector< StringAttr > inputs
static int64_t size(hw::ArrayType mType, capnp::schema::Field::Reader cField)
Returns the expected size of an array (capnp list) in 64-bit words.
This file defines an intermediate representation for circuits acting as an abstraction for constraint...
static bool isConstantZero(Attribute operand)
Determine whether a constant operand is a zero value.