@@ -146,6 +146,41 @@ TEST_F(BlockJitTest, SetInputsWithViews) {
146146 testing::ElementsAre (Value (UBits (42 , 16 ))));
147147}
148148
149+ TEST_F (BlockJitTest, SetRegistersImmediatelyVisible) {
150+ auto p = CreatePackage ();
151+ BlockBuilder bb (TestName (), p.get ());
152+ XLS_ASSERT_OK_AND_ASSIGN (
153+ auto r1, bb.block ()->AddRegister (" test1" , p->GetBitsType (16 )));
154+ XLS_ASSERT_OK_AND_ASSIGN (
155+ auto r2, bb.block ()->AddRegister (" test2" , p->GetBitsType (16 )));
156+ XLS_ASSERT_OK (bb.block ()->AddClockPort (" clk" ));
157+ bb.RegisterWrite (r1, bb.Literal (UBits (0 , 16 )));
158+ bb.RegisterWrite (r2, bb.Literal (UBits (0 , 16 )));
159+ auto read1 = bb.RegisterRead (r1);
160+ auto read2 = bb.RegisterRead (r2);
161+ bb.OutputPort (" output" , bb.Add (read1, read2));
162+ XLS_ASSERT_OK_AND_ASSIGN (Block * b, bb.Build ());
163+
164+ XLS_ASSERT_OK_AND_ASSIGN (auto cont, kJitBlockEvaluator .NewContinuation (b));
165+
166+ XLS_ASSERT_OK (cont->RunOneCycle ({}));
167+ EXPECT_THAT (cont->registers (),
168+ testing::UnorderedElementsAre (
169+ testing::Pair (" test1" , Value (UBits (0 , 16 ))),
170+ testing::Pair (" test2" , Value (UBits (0 , 16 )))));
171+
172+ XLS_ASSERT_OK (cont->SetRegisters ({
173+ {" test1" , Value (UBits (1 , 16 ))},
174+ {" test2" , Value (UBits (2 , 16 ))},
175+ }));
176+
177+ // Should be visible without a `RunOneCycle()` call.
178+ EXPECT_THAT (cont->registers (),
179+ testing::UnorderedElementsAre (
180+ testing::Pair (" test1" , Value (UBits (1 , 16 ))),
181+ testing::Pair (" test2" , Value (UBits (2 , 16 )))));
182+ }
183+
149184TEST_F (BlockJitTest, SetRegistersWithViews) {
150185 auto p = CreatePackage ();
151186 BlockBuilder bb (TestName (), p.get ());
0 commit comments