12 #include "mlir/IR/PatternMatch.h"
14 using namespace circt;
20 static SmallVector<Value>
concatValues(ValueRange a, ValueRange b) {
22 v.append(a.begin(), a.end());
23 v.append(b.begin(), b.end());
29 SmallVector<Value> flatInputs;
30 for (
auto value : values) {
31 if (
auto concatOp = value.getDefiningOp<ConcatOp>()) {
32 auto inputs = concatOp.getInputs();
33 flatInputs.append(inputs.begin(), inputs.end());
35 flatInputs.push_back(value);
46 #include "circt/Dialect/LTL/LTLFolds.cpp.inc"
53 OpFoldResult DelayOp::fold(FoldAdaptor adaptor) {
55 if (adaptor.getDelay() == 0 && adaptor.getLength() == 0 &&
56 isa<SequenceType>(getInput().getType()))
62 void DelayOp::getCanonicalizationPatterns(RewritePatternSet &results,
63 MLIRContext *context) {
64 results.add<patterns::NestedDelays>(results.getContext());
65 results.add<patterns::MoveDelayIntoConcat>(results.getContext());
72 OpFoldResult ConcatOp::fold(FoldAdaptor adaptor) {
74 if (getInputs().size() == 1)
75 return getInputs()[0];
80 void ConcatOp::getCanonicalizationPatterns(RewritePatternSet &results,
81 MLIRContext *context) {
82 results.add<patterns::FlattenConcats>(results.getContext());
91 static OpFoldResult fold(uint64_t base, uint64_t more, Value input) {
93 if (base == 1 && more == 0 && isa<SequenceType>(input.getType()))
101 OpFoldResult RepeatOp::fold(FoldAdaptor adaptor) {
102 auto more = adaptor.getMore();
103 if (more.has_value())
104 return RepeatLikeOp::fold(adaptor.getBase(), *more, getInput());
108 OpFoldResult GoToRepeatOp::fold(FoldAdaptor adaptor) {
109 return RepeatLikeOp::fold(adaptor.getBase(), adaptor.getMore(), getInput());
112 OpFoldResult NonConsecutiveRepeatOp::fold(FoldAdaptor adaptor) {
113 return RepeatLikeOp::fold(adaptor.getBase(), adaptor.getMore(), getInput());
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.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.