mirror of https://github.com/llvm/circt.git
![]() * [Pipeline] Add cross-block canonicalization break op In participation of the upcoming removal of the cross-block canonicalization guards in the `comb` canonicalizers, we're introducing a `pipeline.src` operation to the pipeline dialect. This operation is intended to alleviate the case of unintentional cross-block canonicalizations when a scheduled pipeline has not yet had its registers materialized. This operation, `pipeline.src`, effectively acts as a canonicalization boundary, creating an in-block reference to a value that is defined in a predecessor block. This means that we can keep our existing structure for unmaterialized, scheduled pipelines - values can be referenced from _any_ predecessor op through the `pipeline.src` operation, which still allows for said values to be easily moved across stages in a retiming scenario. Upon register materialization, these `pipeline.src` operations are trivially removed, effectively becoming the block arguments of the pipeline stages. * scheduling * extra test * some docs * integration tests * Review --------- Co-authored-by: Morten Borup Petersen <mpetersen@microsoft.com> |
||
---|---|---|
.. | ||
Transforms | ||
canonicalization.mlir | ||
errors.mlir | ||
round-trip.mlir |