llhd 0.16.0

A Low Level Hardware Description that acts as a foundation for building hardware design tools.
Documentation
; RUN: llhd-opt %s -l

proc %bar (i1$ %clk, i1$ %d) -> (i1$ %q) {
init:
    %clk.prb = prb i1$ %clk
    wait %check, %clk
check:
    %clk.prb1 = prb i1$ %clk
    %0 = const i1 0
    %1 = eq i1 %clk.prb, %0
    %2 = neq i1 %clk.prb1, %0
    %posedge = and i1 %1, %2
    br %posedge, %init, %event
event:
    %3 = const time 0s 1d
    %d.prb = prb i1$ %d
    drv i1$ %q, %d.prb, %3
    br %init
}

; CHECK:      entity %bar (i1$ %clk, i1$ %d) -> (i1$ %q) {
; CHECK-NEXT:     %d.prb = prb i1$ %d
; CHECK-NEXT:     %0 = prb i1$ %clk
; CHECK-NEXT:     reg i1$ %q, [%d.prb, rise %0]
; CHECK-NEXT: }

entity @foo (i1$ %clk, i1$ %d) -> (i1$ %q) {
    inst %bar (i1$ %clk, i1$ %d) -> (i1$ %q)
}