[NFC][Seq] Add folders to clock conversions

This commit is contained in:
Nandor Licker 2023-09-05 03:12:34 -07:00
parent d838fb8a53
commit 68b79fc35f
2 changed files with 19 additions and 5 deletions

View File

@ -47,7 +47,7 @@ def CompRegOp : SeqOp<"compreg",
return build($_builder, $_state, input.getType(), input, clk, nameAttr,
Value(), Value(), hw::InnerSymAttr::get(nameAttr));
}]>,
/// Create a register with a reset, with an inner_sym matching the
/// Create a register with a reset, with an inner_sym matching the
/// register's name.
OpBuilder<(ins "Value":$input, "Value":$clk, "Value":$reset,
"Value":$rstValue, "StringRef":$name), [{
@ -246,10 +246,10 @@ class HLMemTypeIndexingConstraint<string hlmemvalue, string addresses>
def ReadPortOp : SeqOp<"read", [
DeclareOpInterfaceMethods<OpAsmOpInterface, ["getAsmResultNames"]>,
HLMemTypeIndexingConstraint<"memory", "addresses">,
AttrSizedOperandSegments
AttrSizedOperandSegments
]> {
let summary = "Structural read access to a seq.hlmem, with an optional read enable signal.";
let arguments = (ins
let arguments = (ins
HLMemType:$memory,
Variadic<HWIntegerType>:$addresses,
Optional<I1>:$rdEn,
@ -331,8 +331,8 @@ def ClockGateOp : SeqOp<"clock_gate", [
def ClockMuxOp : SeqOp<"clock_mux", [Pure]> {
let summary = "Safely selects a clock based on a condition";
let description = [{
The `seq.clock_mux` op selects a clock from two options. If `cond` is
true, the first clock operand is selected to drive downstream logic.
The `seq.clock_mux` op selects a clock from two options. If `cond` is
true, the first clock operand is selected to drive downstream logic.
Otherwise, the second clock is used.
```
@ -544,6 +544,7 @@ def ToClockOp : SeqOp<"to_clock", [Pure]> {
let assemblyFormat = "$input attr-dict";
let hasFolder = 1;
let hasCanonicalizeMethod = 1;
}
@ -555,5 +556,6 @@ def FromClockOp : SeqOp<"from_clock", [Pure]> {
let assemblyFormat = "$input attr-dict";
let hasFolder = 1;
let hasCanonicalizeMethod = 1;
}

View File

@ -896,6 +896,12 @@ LogicalResult ToClockOp::canonicalize(ToClockOp op, PatternRewriter &rewriter) {
return failure();
}
OpFoldResult ToClockOp::fold(FoldAdaptor adaptor) {
if (auto fromClock = getInput().getDefiningOp<FromClockOp>())
return fromClock.getInput();
return {};
}
LogicalResult FromClockOp::canonicalize(FromClockOp op,
PatternRewriter &rewriter) {
if (auto toClock = op.getInput().getDefiningOp<ToClockOp>()) {
@ -905,6 +911,12 @@ LogicalResult FromClockOp::canonicalize(FromClockOp op,
return failure();
}
OpFoldResult FromClockOp::fold(FoldAdaptor adaptor) {
if (auto toClock = getInput().getDefiningOp<ToClockOp>())
return toClock.getInput();
return {};
}
//===----------------------------------------------------------------------===//
// TableGen generated logic.
//===----------------------------------------------------------------------===//