llvm / llvm/circt

[ExportVerilog] Unnecessary temporary for bind

Open
#2,471 0 comments 0 reactions 0 assignees View on GitHub
Verilog Quality
Dominant language
C++
Stars
2.2k
Forks
524
Avg merge
3d 2h
Merged PRs (30d)
46

Description

When a bind (well, the instance for the bind) is emitted, expressions are spilled to wires. The assignment of the expression to these wires is often spilled, leading to:
```
wire foo;
wire _T;
assign _T = expr;
assign foo = _T;
```
This extra assignment is really ugly and unnecessary.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in the ExportVerilog implementation at the code that emits bind instances and spills expressions to wires. Trace how the wire assignment is generated; done means a bind expression is emitted without the redundant intermediate wire assignment while preserving the necessary connection.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Refactor
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.