llvm / llvm/circt

Complex mux/encoder-like intrinsic operations

Open
#4,892 0 comments 1 reaction 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.