Complex mux/encoder-like intrinsic operations
- Dominant language
- C++
- Stars
- 2.2k
- Forks
- 524
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 46
Description
I've now seen a need for ops like this enough times* to think that it's reasonable to create an issue for it.
Having an intrinsic operation for:
- Priority encoders
- Fan out trees
- Deep mux trees
- either for rebalancing or possibly multi-cycle implementations
- one-hot encoders
Would lessen the burden for a bunch of passes to not have to manually roll a possibly-suboptimal implementation of the above. Furthermore, such operations would be prime candidates for differential lowering based on a target triple.
*:
- https://github.com/llvm/circt/pull/4686#issuecomment-1439424715
- Required by Handshake ops
- Required by Calyx ops
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reviewing the referenced CIRCT pull request discussion and the Handshake and Calyx requirements mentioned in the issue. Define the scope of the intrinsic operations and their target-triple-dependent lowering; done should include an agreed design and implementation plan for priority encoders, fan-out trees, mux trees, and one-hot encoders.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100