circt/test/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
canonicalization.mlir [Pipeline] Remove `Pure` trait from Pipeline operations (#6888) 2024-04-03 11:44:09 +02:00
errors.mlir [Pipeline] Add cross-block canonicalization break op (#8517) 2025-06-02 14:11:09 +02:00
round-trip.mlir [Pipeline] Add cross-block canonicalization break op (#8517) 2025-06-02 14:11:09 +02:00