circt/lib/Dialect/Pipeline
Morten Borup Petersen 4b2c78a13a
[Pipeline] Add cross-block canonicalization break op (#8517)
* [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>
2025-06-02 14:11:09 +02:00
..
Transforms [Pipeline] Add cross-block canonicalization break op (#8517) 2025-06-02 14:11:09 +02:00
CMakeLists.txt [Seq] Switch all seq ops to use seq.clock (#6139) 2023-09-18 16:38:32 +03:00
PipelineOps.cpp [Pipeline] Add cross-block canonicalization break op (#8517) 2025-06-02 14:11:09 +02:00