diff --git a/test/Dialect/FIRRTL/check-comb-cycles.mlir b/test/Dialect/FIRRTL/check-comb-cycles.mlir index 282c9bc8873c..28e54b092fb7 100644 --- a/test/Dialect/FIRRTL/check-comb-cycles.mlir +++ b/test/Dialect/FIRRTL/check-comb-cycles.mlir @@ -149,6 +149,29 @@ firrtl.circuit "strictConnectAndConnect" { // ----- +firrtl.circuit "outputPortCycle" { + // expected-error @below {{outputPortCycle.{reg[0].a <- w.a <- reg[0].a}}} + firrtl.module @outputPortCycle(out %reg: !firrtl.vector>, 2>) { + %0 = firrtl.subindex %reg[0] : !firrtl.vector>, 2> + %1 = firrtl.subindex %reg[0] : !firrtl.vector>, 2> + %w = firrtl.wire : !firrtl.bundle> + firrtl.connect %w, %0 : !firrtl.bundle>, !firrtl.bundle> + firrtl.connect %1, %w : !firrtl.bundle>, !firrtl.bundle> + } +} + +// ----- + +firrtl.circuit "outputRead" { + firrtl.module @outputRead(out %reg: !firrtl.vector>, 2>) { + %0 = firrtl.subindex %reg[0] : !firrtl.vector>, 2> + %1 = firrtl.subindex %reg[1] : !firrtl.vector>, 2> + firrtl.connect %1, %0 : !firrtl.bundle>, !firrtl.bundle> + } +} + +// ----- + firrtl.circuit "vectorRegInit" { firrtl.module @vectorRegInit(in %clk: !firrtl.clock) { %reg = firrtl.reg %clk : !firrtl.clock, !firrtl.vector>, 2> @@ -194,6 +217,20 @@ firrtl.circuit "Foo" { // ----- +firrtl.circuit "outputPortCycle" { + firrtl.module private @Bar(in %a: !firrtl.bundle, b: uint<4>>) {} + // expected-error @below {{outputPortCycle.{bar.a.a <- port[0].a <- bar.a.a}}} + firrtl.module @outputPortCycle(out %port: !firrtl.vector, b: uint<4>>, 2>) { + %0 = firrtl.subindex %port[0] : !firrtl.vector, b: uint<4>>, 2> + %1 = firrtl.subindex %port[0] : !firrtl.vector, b: uint<4>>, 2> + %w = firrtl.instance bar interesting_name @Bar(in a: !firrtl.bundle, b: uint<4>>) + firrtl.connect %w, %0 : !firrtl.bundle, b: uint<4>>, !firrtl.bundle, b: uint<4>> + firrtl.connect %1, %w : !firrtl.bundle, b: uint<4>>, !firrtl.bundle, b: uint<4>> + } +} + +// ----- + // Node combinational loop through vector subindex // CHECK-NOT: firrtl.circuit "hasloops" firrtl.circuit "hasloops" {