llhd 0.16.0

A Low Level Hardware Description that acts as a foundation for building hardware design tools.
Documentation
proc %fifo_v3.param6.always_comb.2379.6 (i1$ %full_o, i1$ %empty_o, {i5, i1, i3, i2}$ %data_i, i1$ %push_i, i1$ %pop_i, i1$ %read_pointer_n, i1$ %read_pointer_q, i1$ %write_pointer_q, i2$ %status_cnt_q, [1 x {i5, i1, i3, i2}]$ %mem_q) -> ({i5, i1, i3, i2}$ %data_o, i1$ %gate_clock, i1$ %read_pointer_n1, i1$ %write_pointer_n, i2$ %status_cnt_n, [1 x {i5, i1, i3, i2}]$ %mem_n) {
0:
    %1 = prb i1$ %read_pointer_n1
    %read_pointer_n.shadow = var i1 %1
    br %body
body:
    %2 = prb i1$ %read_pointer_n1
    st i1* %read_pointer_n.shadow, %2
    %read_pointer_q1 = prb i1$ %read_pointer_q
    %3 = const time 0s 1e
    drv i1$ %read_pointer_n1, %read_pointer_q1, %3
    st i1* %read_pointer_n.shadow, %read_pointer_q1
    %write_pointer_q1 = prb i1$ %write_pointer_q
    %4 = const time 0s 1e
    drv i1$ %write_pointer_n, %write_pointer_q1, %4
    %status_cnt_q1 = prb i2$ %status_cnt_q
    %5 = const time 0s 1e
    drv i2$ %status_cnt_n, %status_cnt_q1, %5
    %6 = const i32 1
    %7 = const i32 0
    %8 = eq i32 %6, %7
    %9 = const i11 0
    %data_i1 = prb {i5, i1, i3, i2}$ %data_i
    %10 = extf i2, {i5, i1, i3, i2} %data_i1, 3
    %11 = inss i11 %9, i2 %10, 0, 2
    %data_i2 = prb {i5, i1, i3, i2}$ %data_i
    %12 = extf i3, {i5, i1, i3, i2} %data_i2, 2
    %13 = inss i11 %11, i3 %12, 2, 3
    %data_i3 = prb {i5, i1, i3, i2}$ %data_i
    %14 = extf i1, {i5, i1, i3, i2} %data_i3, 1
    %15 = inss i11 %13, i1 %14, 5, 1
    %data_i4 = prb {i5, i1, i3, i2}$ %data_i
    %16 = extf i5, {i5, i1, i3, i2} %data_i4, 0
    %17 = inss i11 %15, i5 %16, 6, 5
    %18 = const i11 0
    %mem_q1 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q2 = prb i1$ %read_pointer_q
    %19 = const i5 0
    %20 = const i1 0
    %21 = const i3 0
    %22 = const i2 0
    %23 = {i5 %19, i1 %20, i3 %21, i2 %22}
    %24 = [1 x {i5, i1, i3, i2} %23]
    %25 = shr [1 x {i5, i1, i3, i2}] %mem_q1, [1 x {i5, i1, i3, i2}] %24, i1 %read_pointer_q2
    %26 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %25, 0
    %27 = extf i2, {i5, i1, i3, i2} %26, 3
    %28 = inss i11 %18, i2 %27, 0, 2
    %mem_q2 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q3 = prb i1$ %read_pointer_q
    %29 = const i5 0
    %30 = const i1 0
    %31 = const i3 0
    %32 = const i2 0
    %33 = {i5 %29, i1 %30, i3 %31, i2 %32}
    %34 = [1 x {i5, i1, i3, i2} %33]
    %35 = shr [1 x {i5, i1, i3, i2}] %mem_q2, [1 x {i5, i1, i3, i2}] %34, i1 %read_pointer_q3
    %36 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %35, 0
    %37 = extf i3, {i5, i1, i3, i2} %36, 2
    %38 = inss i11 %28, i3 %37, 2, 3
    %mem_q3 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q4 = prb i1$ %read_pointer_q
    %39 = const i5 0
    %40 = const i1 0
    %41 = const i3 0
    %42 = const i2 0
    %43 = {i5 %39, i1 %40, i3 %41, i2 %42}
    %44 = [1 x {i5, i1, i3, i2} %43]
    %45 = shr [1 x {i5, i1, i3, i2}] %mem_q3, [1 x {i5, i1, i3, i2}] %44, i1 %read_pointer_q4
    %46 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %45, 0
    %47 = extf i1, {i5, i1, i3, i2} %46, 1
    %48 = inss i11 %38, i1 %47, 5, 1
    %mem_q4 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q5 = prb i1$ %read_pointer_q
    %49 = const i5 0
    %50 = const i1 0
    %51 = const i3 0
    %52 = const i2 0
    %53 = {i5 %49, i1 %50, i3 %51, i2 %52}
    %54 = [1 x {i5, i1, i3, i2} %53]
    %55 = shr [1 x {i5, i1, i3, i2}] %mem_q4, [1 x {i5, i1, i3, i2}] %54, i1 %read_pointer_q5
    %56 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %55, 0
    %57 = extf i5, {i5, i1, i3, i2} %56, 0
    %58 = inss i11 %48, i5 %57, 6, 5
    %59 = [i11 %58, %17]
    %60 = mux [2 x i11] %59, i1 %8
    %61 = const i32 0
    %62 = const i11 0
    %63 = shr i11 %60, i11 %62, i32 %61
    %64 = exts i5, i11 %63, 0, 5
    %65 = const i32 1
    %66 = const i32 0
    %67 = eq i32 %65, %66
    %68 = const i11 0
    %data_i5 = prb {i5, i1, i3, i2}$ %data_i
    %69 = extf i2, {i5, i1, i3, i2} %data_i5, 3
    %70 = inss i11 %68, i2 %69, 0, 2
    %data_i6 = prb {i5, i1, i3, i2}$ %data_i
    %71 = extf i3, {i5, i1, i3, i2} %data_i6, 2
    %72 = inss i11 %70, i3 %71, 2, 3
    %data_i7 = prb {i5, i1, i3, i2}$ %data_i
    %73 = extf i1, {i5, i1, i3, i2} %data_i7, 1
    %74 = inss i11 %72, i1 %73, 5, 1
    %data_i8 = prb {i5, i1, i3, i2}$ %data_i
    %75 = extf i5, {i5, i1, i3, i2} %data_i8, 0
    %76 = inss i11 %74, i5 %75, 6, 5
    %77 = const i11 0
    %mem_q5 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q6 = prb i1$ %read_pointer_q
    %78 = const i5 0
    %79 = const i1 0
    %80 = const i3 0
    %81 = const i2 0
    %82 = {i5 %78, i1 %79, i3 %80, i2 %81}
    %83 = [1 x {i5, i1, i3, i2} %82]
    %84 = shr [1 x {i5, i1, i3, i2}] %mem_q5, [1 x {i5, i1, i3, i2}] %83, i1 %read_pointer_q6
    %85 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %84, 0
    %86 = extf i2, {i5, i1, i3, i2} %85, 3
    %87 = inss i11 %77, i2 %86, 0, 2
    %mem_q6 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q7 = prb i1$ %read_pointer_q
    %88 = const i5 0
    %89 = const i1 0
    %90 = const i3 0
    %91 = const i2 0
    %92 = {i5 %88, i1 %89, i3 %90, i2 %91}
    %93 = [1 x {i5, i1, i3, i2} %92]
    %94 = shr [1 x {i5, i1, i3, i2}] %mem_q6, [1 x {i5, i1, i3, i2}] %93, i1 %read_pointer_q7
    %95 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %94, 0
    %96 = extf i3, {i5, i1, i3, i2} %95, 2
    %97 = inss i11 %87, i3 %96, 2, 3
    %mem_q7 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q8 = prb i1$ %read_pointer_q
    %98 = const i5 0
    %99 = const i1 0
    %100 = const i3 0
    %101 = const i2 0
    %102 = {i5 %98, i1 %99, i3 %100, i2 %101}
    %103 = [1 x {i5, i1, i3, i2} %102]
    %104 = shr [1 x {i5, i1, i3, i2}] %mem_q7, [1 x {i5, i1, i3, i2}] %103, i1 %read_pointer_q8
    %105 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %104, 0
    %106 = extf i1, {i5, i1, i3, i2} %105, 1
    %107 = inss i11 %97, i1 %106, 5, 1
    %mem_q8 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q9 = prb i1$ %read_pointer_q
    %108 = const i5 0
    %109 = const i1 0
    %110 = const i3 0
    %111 = const i2 0
    %112 = {i5 %108, i1 %109, i3 %110, i2 %111}
    %113 = [1 x {i5, i1, i3, i2} %112]
    %114 = shr [1 x {i5, i1, i3, i2}] %mem_q8, [1 x {i5, i1, i3, i2}] %113, i1 %read_pointer_q9
    %115 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %114, 0
    %116 = extf i5, {i5, i1, i3, i2} %115, 0
    %117 = inss i11 %107, i5 %116, 6, 5
    %118 = [i11 %117, %76]
    %119 = mux [2 x i11] %118, i1 %67
    %120 = const i32 5
    %121 = const i11 0
    %122 = shr i11 %119, i11 %121, i32 %120
    %123 = exts i1, i11 %122, 0, 1
    %124 = const i32 1
    %125 = const i32 0
    %126 = eq i32 %124, %125
    %127 = const i11 0
    %data_i9 = prb {i5, i1, i3, i2}$ %data_i
    %128 = extf i2, {i5, i1, i3, i2} %data_i9, 3
    %129 = inss i11 %127, i2 %128, 0, 2
    %data_i10 = prb {i5, i1, i3, i2}$ %data_i
    %130 = extf i3, {i5, i1, i3, i2} %data_i10, 2
    %131 = inss i11 %129, i3 %130, 2, 3
    %data_i11 = prb {i5, i1, i3, i2}$ %data_i
    %132 = extf i1, {i5, i1, i3, i2} %data_i11, 1
    %133 = inss i11 %131, i1 %132, 5, 1
    %data_i12 = prb {i5, i1, i3, i2}$ %data_i
    %134 = extf i5, {i5, i1, i3, i2} %data_i12, 0
    %135 = inss i11 %133, i5 %134, 6, 5
    %136 = const i11 0
    %mem_q9 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q10 = prb i1$ %read_pointer_q
    %137 = const i5 0
    %138 = const i1 0
    %139 = const i3 0
    %140 = const i2 0
    %141 = {i5 %137, i1 %138, i3 %139, i2 %140}
    %142 = [1 x {i5, i1, i3, i2} %141]
    %143 = shr [1 x {i5, i1, i3, i2}] %mem_q9, [1 x {i5, i1, i3, i2}] %142, i1 %read_pointer_q10
    %144 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %143, 0
    %145 = extf i2, {i5, i1, i3, i2} %144, 3
    %146 = inss i11 %136, i2 %145, 0, 2
    %mem_q10 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q11 = prb i1$ %read_pointer_q
    %147 = const i5 0
    %148 = const i1 0
    %149 = const i3 0
    %150 = const i2 0
    %151 = {i5 %147, i1 %148, i3 %149, i2 %150}
    %152 = [1 x {i5, i1, i3, i2} %151]
    %153 = shr [1 x {i5, i1, i3, i2}] %mem_q10, [1 x {i5, i1, i3, i2}] %152, i1 %read_pointer_q11
    %154 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %153, 0
    %155 = extf i3, {i5, i1, i3, i2} %154, 2
    %156 = inss i11 %146, i3 %155, 2, 3
    %mem_q11 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q12 = prb i1$ %read_pointer_q
    %157 = const i5 0
    %158 = const i1 0
    %159 = const i3 0
    %160 = const i2 0
    %161 = {i5 %157, i1 %158, i3 %159, i2 %160}
    %162 = [1 x {i5, i1, i3, i2} %161]
    %163 = shr [1 x {i5, i1, i3, i2}] %mem_q11, [1 x {i5, i1, i3, i2}] %162, i1 %read_pointer_q12
    %164 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %163, 0
    %165 = extf i1, {i5, i1, i3, i2} %164, 1
    %166 = inss i11 %156, i1 %165, 5, 1
    %mem_q12 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q13 = prb i1$ %read_pointer_q
    %167 = const i5 0
    %168 = const i1 0
    %169 = const i3 0
    %170 = const i2 0
    %171 = {i5 %167, i1 %168, i3 %169, i2 %170}
    %172 = [1 x {i5, i1, i3, i2} %171]
    %173 = shr [1 x {i5, i1, i3, i2}] %mem_q12, [1 x {i5, i1, i3, i2}] %172, i1 %read_pointer_q13
    %174 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %173, 0
    %175 = extf i5, {i5, i1, i3, i2} %174, 0
    %176 = inss i11 %166, i5 %175, 6, 5
    %177 = [i11 %176, %135]
    %178 = mux [2 x i11] %177, i1 %126
    %179 = const i32 6
    %180 = const i11 0
    %181 = shr i11 %178, i11 %180, i32 %179
    %182 = exts i3, i11 %181, 0, 3
    %183 = const i32 1
    %184 = const i32 0
    %185 = eq i32 %183, %184
    %186 = const i11 0
    %data_i13 = prb {i5, i1, i3, i2}$ %data_i
    %187 = extf i2, {i5, i1, i3, i2} %data_i13, 3
    %188 = inss i11 %186, i2 %187, 0, 2
    %data_i14 = prb {i5, i1, i3, i2}$ %data_i
    %189 = extf i3, {i5, i1, i3, i2} %data_i14, 2
    %190 = inss i11 %188, i3 %189, 2, 3
    %data_i15 = prb {i5, i1, i3, i2}$ %data_i
    %191 = extf i1, {i5, i1, i3, i2} %data_i15, 1
    %192 = inss i11 %190, i1 %191, 5, 1
    %data_i16 = prb {i5, i1, i3, i2}$ %data_i
    %193 = extf i5, {i5, i1, i3, i2} %data_i16, 0
    %194 = inss i11 %192, i5 %193, 6, 5
    %195 = const i11 0
    %mem_q13 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q14 = prb i1$ %read_pointer_q
    %196 = const i5 0
    %197 = const i1 0
    %198 = const i3 0
    %199 = const i2 0
    %200 = {i5 %196, i1 %197, i3 %198, i2 %199}
    %201 = [1 x {i5, i1, i3, i2} %200]
    %202 = shr [1 x {i5, i1, i3, i2}] %mem_q13, [1 x {i5, i1, i3, i2}] %201, i1 %read_pointer_q14
    %203 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %202, 0
    %204 = extf i2, {i5, i1, i3, i2} %203, 3
    %205 = inss i11 %195, i2 %204, 0, 2
    %mem_q14 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q15 = prb i1$ %read_pointer_q
    %206 = const i5 0
    %207 = const i1 0
    %208 = const i3 0
    %209 = const i2 0
    %210 = {i5 %206, i1 %207, i3 %208, i2 %209}
    %211 = [1 x {i5, i1, i3, i2} %210]
    %212 = shr [1 x {i5, i1, i3, i2}] %mem_q14, [1 x {i5, i1, i3, i2}] %211, i1 %read_pointer_q15
    %213 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %212, 0
    %214 = extf i3, {i5, i1, i3, i2} %213, 2
    %215 = inss i11 %205, i3 %214, 2, 3
    %mem_q15 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q16 = prb i1$ %read_pointer_q
    %216 = const i5 0
    %217 = const i1 0
    %218 = const i3 0
    %219 = const i2 0
    %220 = {i5 %216, i1 %217, i3 %218, i2 %219}
    %221 = [1 x {i5, i1, i3, i2} %220]
    %222 = shr [1 x {i5, i1, i3, i2}] %mem_q15, [1 x {i5, i1, i3, i2}] %221, i1 %read_pointer_q16
    %223 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %222, 0
    %224 = extf i1, {i5, i1, i3, i2} %223, 1
    %225 = inss i11 %215, i1 %224, 5, 1
    %mem_q16 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %read_pointer_q17 = prb i1$ %read_pointer_q
    %226 = const i5 0
    %227 = const i1 0
    %228 = const i3 0
    %229 = const i2 0
    %230 = {i5 %226, i1 %227, i3 %228, i2 %229}
    %231 = [1 x {i5, i1, i3, i2} %230]
    %232 = shr [1 x {i5, i1, i3, i2}] %mem_q16, [1 x {i5, i1, i3, i2}] %231, i1 %read_pointer_q17
    %233 = extf {i5, i1, i3, i2}, [1 x {i5, i1, i3, i2}] %232, 0
    %234 = extf i5, {i5, i1, i3, i2} %233, 0
    %235 = inss i11 %225, i5 %234, 6, 5
    %236 = [i11 %235, %194]
    %237 = mux [2 x i11] %236, i1 %185
    %238 = const i32 9
    %239 = const i11 0
    %240 = shr i11 %237, i11 %239, i32 %238
    %241 = exts i2, i11 %240, 0, 2
    %242 = {i5 %64, i1 %123, i3 %182, i2 %241}
    %243 = const time 0s 1e
    drv {i5, i1, i3, i2}$ %data_o, %242, %243
    %mem_q17 = prb [1 x {i5, i1, i3, i2}]$ %mem_q
    %244 = const time 0s 1e
    drv [1 x {i5, i1, i3, i2}]$ %mem_n, %mem_q17, %244
    %245 = const i1 1
    %246 = const time 0s 1e
    drv i1$ %gate_clock, %245, %246
    %push_i1 = prb i1$ %push_i
    %full_o1 = prb i1$ %full_o
    %247 = not i1 %full_o1
    %248 = and i1 %push_i1, %247
    br %248, %if_false, %if_true
check:
    wait %body, %full_o, %empty_o, %data_i, %push_i, %pop_i, %read_pointer_n1, %read_pointer_q, %write_pointer_q, %status_cnt_q, %mem_q
if_true:
    %write_pointer_q2 = prb i1$ %write_pointer_q
    %249 = const i5 0
    %250 = const i1 0
    %251 = const i3 0
    %252 = const i2 0
    %253 = {i5 %249, i1 %250, i3 %251, i2 %252}
    %254 = [1 x {i5, i1, i3, i2} %253]
    %255 = sig [1 x {i5, i1, i3, i2}] %254
    %256 = shr [1 x {i5, i1, i3, i2}]$ %mem_n, [1 x {i5, i1, i3, i2}]$ %255, i1 %write_pointer_q2
    %257 = extf {i5, i1, i3, i2}$, [1 x {i5, i1, i3, i2}]$ %256, 0
    %data_i17 = prb {i5, i1, i3, i2}$ %data_i
    %258 = const time 0s 1e
    drv {i5, i1, i3, i2}$ %257, %data_i17, %258
    %259 = const i1 0
    %260 = const time 0s 1e
    drv i1$ %gate_clock, %259, %260
    %261 = const i32 0
    %write_pointer_q3 = prb i1$ %write_pointer_q
    %262 = inss i32 %261, i1 %write_pointer_q3, 0, 1
    %263 = const i32 1
    %264 = const i1 0
    %265 = const i32 0
    %266 = shr i32 %263, i32 %265, i1 %264
    %267 = exts i1, i32 %266, 0, 1
    %268 = exts i1, i1 %267, 0, 1
    %269 = const i32 0
    %270 = not i32 %269
    %271 = [i32 %269, %270]
    %272 = mux [2 x i32] %271, i1 %268
    %273 = inss i32 %272, i1 %267, 0, 1
    %274 = const i32 1
    %275 = sub i32 %273, %274
    %276 = eq i32 %262, %275
    br %276, %if_false1, %if_true1
if_false:
    br %if_exit
if_exit:
    %pop_i1 = prb i1$ %pop_i
    %empty_o1 = prb i1$ %empty_o
    %277 = not i1 %empty_o1
    %278 = and i1 %pop_i1, %277
    br %278, %if_false2, %if_true2
if_true1:
    %279 = const i1 0
    %280 = const time 0s 1e
    drv i1$ %write_pointer_n, %279, %280
    br %if_exit1
if_false1:
    %281 = const i32 0
    %write_pointer_q4 = prb i1$ %write_pointer_q
    %282 = inss i32 %281, i1 %write_pointer_q4, 0, 1
    %283 = const i32 1
    %284 = add i32 %282, %283
    %285 = exts i1, i32 %284, 0, 1
    %286 = const time 0s 1e
    drv i1$ %write_pointer_n, %285, %286
    br %if_exit1
if_exit1:
    %287 = const i32 0
    %status_cnt_q2 = prb i2$ %status_cnt_q
    %288 = inss i32 %287, i2 %status_cnt_q2, 0, 2
    %289 = const i32 1
    %290 = add i32 %288, %289
    %291 = exts i2, i32 %290, 0, 2
    %292 = const time 0s 1e
    drv i2$ %status_cnt_n, %291, %292
    br %if_exit
if_true2:
    %293 = const i32 0
    %read_pointer_n2 = ld i1* %read_pointer_n.shadow
    %294 = inss i32 %293, i1 %read_pointer_n2, 0, 1
    %295 = const i32 1
    %296 = const i1 0
    %297 = const i32 0
    %298 = shr i32 %295, i32 %297, i1 %296
    %299 = exts i1, i32 %298, 0, 1
    %300 = exts i1, i1 %299, 0, 1
    %301 = const i32 0
    %302 = not i32 %301
    %303 = [i32 %301, %302]
    %304 = mux [2 x i32] %303, i1 %300
    %305 = inss i32 %304, i1 %299, 0, 1
    %306 = const i32 1
    %307 = sub i32 %305, %306
    %308 = eq i32 %294, %307
    br %308, %if_false3, %if_true3
if_false2:
    br %if_exit2
if_exit2:
    %push_i2 = prb i1$ %push_i
    %pop_i2 = prb i1$ %pop_i
    %full_o2 = prb i1$ %full_o
    %309 = not i1 %full_o2
    %empty_o2 = prb i1$ %empty_o
    %310 = not i1 %empty_o2
    %311 = and i1 %309, %310
    %312 = and i1 %pop_i2, %311
    %313 = and i1 %push_i2, %312
    br %313, %if_false4, %if_true4
if_true3:
    %314 = const i1 0
    %315 = const time 0s 1e
    drv i1$ %read_pointer_n1, %314, %315
    st i1* %read_pointer_n.shadow, %314
    br %if_exit3
if_false3:
    %316 = const i32 0
    %read_pointer_q18 = prb i1$ %read_pointer_q
    %317 = inss i32 %316, i1 %read_pointer_q18, 0, 1
    %318 = const i32 1
    %319 = add i32 %317, %318
    %320 = exts i1, i32 %319, 0, 1
    %321 = const time 0s 1e
    drv i1$ %read_pointer_n1, %320, %321
    st i1* %read_pointer_n.shadow, %320
    br %if_exit3
if_exit3:
    %322 = const i32 0
    %status_cnt_q3 = prb i2$ %status_cnt_q
    %323 = inss i32 %322, i2 %status_cnt_q3, 0, 2
    %324 = const i32 1
    %325 = sub i32 %323, %324
    %326 = exts i2, i32 %325, 0, 2
    %327 = const time 0s 1e
    drv i2$ %status_cnt_n, %326, %327
    br %if_exit2
if_true4:
    %status_cnt_q4 = prb i2$ %status_cnt_q
    %328 = const time 0s 1e
    drv i2$ %status_cnt_n, %status_cnt_q4, %328
    br %if_exit4
if_false4:
    br %if_exit4
if_exit4:
    %329 = const i1 0
    %330 = const i32 0
    %status_cnt_q5 = prb i2$ %status_cnt_q
    %331 = inss i32 %330, i2 %status_cnt_q5, 0, 2
    %332 = const i32 0
    %333 = eq i32 %331, %332
    %push_i3 = prb i1$ %push_i
    %334 = and i1 %333, %push_i3
    %335 = and i1 %329, %334
    br %335, %if_false5, %if_true5
if_true5:
    %data_i18 = prb {i5, i1, i3, i2}$ %data_i
    %336 = const time 0s 1e
    drv {i5, i1, i3, i2}$ %data_o, %data_i18, %336
    %pop_i3 = prb i1$ %pop_i
    br %pop_i3, %if_false6, %if_true6
if_false5:
    br %if_exit5
if_exit5:
    br %check
if_true6:
    %status_cnt_q6 = prb i2$ %status_cnt_q
    %337 = const time 0s 1e
    drv i2$ %status_cnt_n, %status_cnt_q6, %337
    %read_pointer_q19 = prb i1$ %read_pointer_q
    %338 = const time 0s 1e
    drv i1$ %read_pointer_n1, %read_pointer_q19, %338
    st i1* %read_pointer_n.shadow, %read_pointer_q19
    %write_pointer_q5 = prb i1$ %write_pointer_q
    %339 = const time 0s 1e
    drv i1$ %write_pointer_n, %write_pointer_q5, %339
    br %if_exit6
if_false6:
    br %if_exit6
if_exit6:
    br %if_exit5
}