[ir] Fix Disassembly::EmitOperandList() with count
We need to take start_index into account when determining the end
index.
Change-Id: I0010ef9abb05839ee06ce3c6c7a18d0ab9470870
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/190540
Reviewed-by: dan sinclair <dsinclair@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/core/ir/disassembly.cc b/src/tint/lang/core/ir/disassembly.cc
index bd48191..193b04e 100644
--- a/src/tint/lang/core/ir/disassembly.cc
+++ b/src/tint/lang/core/ir/disassembly.cc
@@ -576,7 +576,7 @@
}
void Disassembly::EmitOperandList(const Instruction* inst, size_t start_index, size_t count) {
- size_t n = std::min(count, inst->Operands().Length());
+ size_t n = std::min(start_index + count, inst->Operands().Length());
for (size_t i = start_index; i < n; i++) {
if (i != start_index) {
out_ << ", ";
diff --git a/src/tint/lang/core/ir/validator_test.cc b/src/tint/lang/core/ir/validator_test.cc
index 0ef9fb9..870d345 100644
--- a/src/tint/lang/core/ir/validator_test.cc
+++ b/src/tint/lang/core/ir/validator_test.cc
@@ -3319,8 +3319,8 @@
ASSERT_NE(res, Success);
EXPECT_EQ(res.Failure().reason.Str(),
R"(:8:9 error: break_if: provides 2 values but 'loop' block $B2 expects 0 values
- break_if true next_iteration: [ 1i ] # -> [t: exit_loop loop_1, f: $B2]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ break_if true next_iteration: [ 1i, 2i ] # -> [t: exit_loop loop_1, f: $B2]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:7:7 note: in block
$B3: { # continuing
@@ -3338,7 +3338,7 @@
continue # -> $B3
}
$B3: { # continuing
- break_if true next_iteration: [ 1i ] # -> [t: exit_loop loop_1, f: $B2]
+ break_if true next_iteration: [ 1i, 2i ] # -> [t: exit_loop loop_1, f: $B2]
}
}
ret
@@ -3412,7 +3412,7 @@
EXPECT_EQ(
res.Failure().reason.Str(),
R"(:11:45 error: break_if: operand with type 'i32' does not match 'loop' block $B3 target type 'f32'
- break_if true next_iteration: [ 1i, 2i, 3.0f ] # -> [t: exit_loop loop_1, f: $B3]
+ break_if true next_iteration: [ 1i, 2i, 3.0f, false ] # -> [t: exit_loop loop_1, f: $B3]
^^
:10:7 note: in block
@@ -3424,7 +3424,7 @@
^^
:11:49 error: break_if: operand with type 'f32' does not match 'loop' block $B3 target type 'u32'
- break_if true next_iteration: [ 1i, 2i, 3.0f ] # -> [t: exit_loop loop_1, f: $B3]
+ break_if true next_iteration: [ 1i, 2i, 3.0f, false ] # -> [t: exit_loop loop_1, f: $B3]
^^^^
:10:7 note: in block
@@ -3446,7 +3446,7 @@
continue # -> $B4
}
$B4: { # continuing
- break_if true next_iteration: [ 1i, 2i, 3.0f ] # -> [t: exit_loop loop_1, f: $B3]
+ break_if true next_iteration: [ 1i, 2i, 3.0f, false ] # -> [t: exit_loop loop_1, f: $B3]
}
}
ret