Skip to content

Commit 6bbb23f

Browse files
ericastorcopybara-github
authored andcommitted
Add a next_value node to XLS IR
Currently unimplemented in all backends, but will be used to enable dynamic state feedback in followup work. PiperOrigin-RevId: 597977120
1 parent 65f66cb commit 6bbb23f

36 files changed

+376
-74
lines changed

xls/codegen/BUILD

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ cc_library(
2828
"//xls/ir:bits",
2929
"//xls/ir:type",
3030
"@com_google_absl//absl/container:flat_hash_map",
31-
"@com_google_absl//absl/strings",
3231
],
3332
)
3433

@@ -419,7 +418,6 @@ cc_library(
419418
"//xls/ir:op",
420419
"//xls/ir:register",
421420
"@com_google_absl//absl/container:flat_hash_map",
422-
"@com_google_absl//absl/strings",
423421
],
424422
)
425423

xls/codegen/block_conversion_test.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class TestDelayEstimator : public DelayEstimator {
127127
case Op::kAfterAll:
128128
case Op::kMinDelay:
129129
case Op::kParam:
130+
case Op::kNext:
130131
case Op::kInputPort:
131132
case Op::kOutputPort:
132133
case Op::kLiteral:

xls/codegen/block_metrics.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ BomKindProto OpToBomKind(Op op) {
284284
case Op::kOutputPort:
285285
case Op::kMap:
286286
case Op::kParam:
287+
case Op::kNext:
287288
case Op::kRegisterRead:
288289
case Op::kRegisterWrite:
289290
case Op::kInstantiationOutput:

xls/codegen/node_expressions.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,8 @@ absl::StatusOr<Expression*> NodeToExpression(
632632
return file->OrReduce(inputs[0], node->loc());
633633
case Op::kParam:
634634
return unimplemented();
635+
case Op::kNext:
636+
return unimplemented();
635637
case Op::kRegisterRead:
636638
return unimplemented();
637639
case Op::kRegisterWrite:

xls/codegen/side_effect_condition_pass.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ absl::StatusOr<bool> OpShouldBeRewritten(Op op) {
3939
if (!OpIsSideEffecting(op)) {
4040
return false;
4141
}
42-
// Channel, port, param, register, and instantiation operations are handled
43-
// elsewhere. Gate ops are special and not conditional, so we ignore them
44-
// here. That leaves the following ops to rewrite.
42+
// Channel, port, param, state, register, and instantiation operations are
43+
// handled elsewhere. Gate ops are special and not conditional, so we ignore
44+
// them here. That leaves the following ops to rewrite.
4545
switch (op) {
4646
case Op::kAssert:
4747
case Op::kCover:
@@ -53,6 +53,7 @@ absl::StatusOr<bool> OpShouldBeRewritten(Op op) {
5353
case Op::kInputPort:
5454
case Op::kOutputPort:
5555
case Op::kParam:
56+
case Op::kNext:
5657
case Op::kRegisterRead:
5758
case Op::kRegisterWrite:
5859
case Op::kInstantiationOutput:

xls/interpreter/BUILD

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ cc_library(
3434
":block_evaluator",
3535
"@com_google_absl//absl/container:flat_hash_map",
3636
"@com_google_absl//absl/container:flat_hash_set",
37-
"@com_google_absl//absl/random:bit_gen_ref",
38-
"@com_google_absl//absl/random:distributions",
3937
"@com_google_absl//absl/status",
4038
"@com_google_absl//absl/status:statusor",
4139
"@com_google_absl//absl/strings:str_format",

xls/interpreter/ir_interpreter.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,11 @@ absl::Status IrInterpreter::HandleParam(Param* param) {
731731
return absl::UnimplementedError("Param not implemented in IrInterpreter");
732732
}
733733

734+
absl::Status IrInterpreter::HandleNext(Next* next) {
735+
return absl::UnimplementedError(
736+
"Next value not implemented in IrInterpreter");
737+
}
738+
734739
absl::Status IrInterpreter::HandleReverse(UnOp* reverse) {
735740
return SetBitsResult(reverse,
736741
bits_ops::Reverse(ResolveAsBits(reverse->operand(0))));

xls/interpreter/ir_interpreter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class IrInterpreter : public DfsVisitor {
113113
absl::Status HandleOrReduce(BitwiseReductionOp* or_reduce) override;
114114
absl::Status HandleOutputPort(OutputPort* output_port) override;
115115
absl::Status HandleParam(Param* param) override;
116+
absl::Status HandleNext(Next* next) override;
116117
absl::Status HandleReceive(Receive* receive) override;
117118
absl::Status HandleRegisterRead(RegisterRead* reg_read) override;
118119
absl::Status HandleRegisterWrite(RegisterWrite* reg_write) override;

xls/ir/BUILD

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ cc_library(
7878
":ir",
7979
"//xls/common/status:ret_check",
8080
"//xls/common/status:status_macros",
81-
"@com_google_absl//absl/memory",
8281
"@com_google_absl//absl/status:statusor",
8382
"@com_google_absl//absl/types:span",
8483
],
@@ -261,7 +260,6 @@ cc_library(
261260
":bits_ops",
262261
":interval",
263262
"//xls/common/logging",
264-
"@com_google_absl//absl/status:statusor",
265263
"@com_google_absl//absl/strings",
266264
"@com_google_absl//absl/strings:str_format",
267265
"@com_google_absl//absl/types:span",
@@ -435,7 +433,6 @@ cc_library(
435433
deps = [
436434
":type",
437435
":value",
438-
"@com_google_absl//absl/strings",
439436
"@com_google_absl//absl/strings:str_format",
440437
],
441438
)
@@ -579,10 +576,13 @@ cc_test(
579576
name = "function_builder_test",
580577
srcs = ["function_builder_test.cc"],
581578
deps = [
579+
":bits",
582580
":function_builder",
583581
":ir",
584582
":ir_matcher",
585583
":node_util",
584+
":source_location",
585+
":value",
586586
"//xls/common:xls_gunit",
587587
"//xls/common:xls_gunit_main",
588588
"//xls/common/status:matchers",
@@ -917,7 +917,6 @@ cc_test(
917917
"//xls/common:xls_gunit",
918918
"//xls/common:xls_gunit_main",
919919
"//xls/common/status:matchers",
920-
"@com_google_absl//absl/strings",
921920
],
922921
)
923922

@@ -952,7 +951,6 @@ cc_library(
952951
hdrs = ["format_preference.h"],
953952
deps = [
954953
"@com_google_absl//absl/status:statusor",
955-
"@com_google_absl//absl/strings",
956954
"@com_google_absl//absl/strings:str_format",
957955
],
958956
)
@@ -1189,7 +1187,6 @@ cc_library(
11891187
hdrs = ["big_int.h"],
11901188
deps = [
11911189
":bits",
1192-
":format_preference",
11931190
"//xls/common/logging",
11941191
"@boringssl//:crypto",
11951192
"@com_google_absl//absl/status:statusor",
@@ -1236,7 +1233,6 @@ cc_test(
12361233
":number_parser",
12371234
"//xls/common:xls_gunit",
12381235
"//xls/common:xls_gunit_main",
1239-
"//xls/common/logging",
12401236
"//xls/common/status:matchers",
12411237
"//xls/data_structures:inline_bitmap",
12421238
"@com_google_absl//absl/container:inlined_vector",
@@ -1369,6 +1365,7 @@ cc_library(
13691365
hdrs = ["abstract_node_evaluator.h"],
13701366
deps = [
13711367
":ir",
1368+
":op",
13721369
"//xls/common/status:status_macros",
13731370
"@com_google_absl//absl/status",
13741371
"@com_google_absl//absl/status:statusor",
@@ -1404,7 +1401,6 @@ cc_library(
14041401
deps = [
14051402
"//xls/common/logging",
14061403
"@com_google_absl//absl/status:statusor",
1407-
"@com_google_absl//absl/strings",
14081404
],
14091405
)
14101406

xls/ir/abstract_node_evaluator.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "xls/common/status/status_macros.h"
2323
#include "xls/ir/node.h"
2424
#include "xls/ir/nodes.h"
25+
#include "xls/ir/op.h"
2526

2627
namespace xls {
2728

@@ -177,6 +178,8 @@ absl::StatusOr<typename AbstractEvaluatorT::Vector> AbstractEvaluate(
177178
return default_handler(node);
178179
case Op::kParam:
179180
return default_handler(node);
181+
case Op::kNext:
182+
return default_handler(node);
180183
case Op::kRegisterRead:
181184
return default_handler(node);
182185
case Op::kRegisterWrite:

0 commit comments

Comments
 (0)