; RUN: llhd-opt %s
proc %always_ff (i1$ %clk_i, i1$ %rst_i, i32$ %pc_d) -> (i32$ %pc_q) {
0:
br %init
init:
%clk_i1 = prb i1$ %clk_i
wait %check, %clk_i
check:
%clk_i2 = prb i1$ %clk_i
%1 = const i1 0
%2 = eq i1 %clk_i1, %1
%3 = neq i1 %clk_i2, %1
%posedge = and i1 %2, %3
br %posedge, %init, %event
event:
%rst_i1 = prb i1$ %rst_i
%4 = const i32 65536
%pc_d1 = prb i32$ %pc_d
%5 = [i32 %pc_d1, %4]
%6 = mux [2 x i32] %5, i1 %rst_i1
%7 = const time 0s 1d
drv i32$ %pc_q, %6, %7
br %0
}
; CHECK: proc %always_ff (i1$ %clk_i, i1$ %rst_i, i32$ %pc_d) -> (i32$ %pc_q) {
; CHECK: init:
; CHECK: %clk_i1 = prb i1$ %clk_i
; CHECK: %0 = const i1 0
; CHECK: %1 = eq i1 %clk_i1, %0
; CHECK: %2 = const i32 65536
; CHECK: %3 = const time 0s 1d
; CHECK: wait %check, %clk_i
; CHECK: check:
; CHECK: %pc_d1 = prb i32$ %pc_d
; CHECK: %rst_i1 = prb i1$ %rst_i
; CHECK: %clk_i2 = prb i1$ %clk_i
; CHECK: %4 = neq i1 %clk_i2, %0
; CHECK: %posedge = and i1 %1, %4
; CHECK: %5 = [i32 %pc_d1, %2]
; CHECK: %6 = mux [2 x i32] %5, i1 %rst_i1
; CHECK: drv i32$ %pc_q if %posedge, %6, %3
; CHECK: br %init
; CHECK: }