Skip to content

[LLHD][ProcessLowering] Incorrectly inlines aliasing drives #7665

Open
@maerhart

Description

The ProcessLowering pass checks whether an llhd.process operation is a combinational process and inlines it into the parent module if that's the case.

However, it doesn't check for aliasing drives. There can be a series of blocking drives where the first one does a general default assignment to the entire signal, and subsequent conditional drives, aliasing part of the signal, override parts. Since there is no fixed execution order inside modules, these must be combined before inlining. ProcessLowering should check for that and not perform the inlining in such cases.

The TemporalCodeMotion pass combines drives to the same signal to some degree but doesn't consider subelement aliasing. One option to support this is to perform SROA before TemporalCodeMotion.

Metadata

Assignees

No one assigned

    Labels

    LLHDbugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions