From 7eb8abb27964cf020e089dbb6aafc27888384f11 Mon Sep 17 00:00:00 2001 From: nmzik Date: Tue, 27 Oct 2026 03:46:13 +0100 Subject: [PATCH] shader: drop the duplicate-use scan from Inst::AddUse --- src/graphics/shader/recompiler/ir/Value.cpp | 3 --- tests/ScalarProvenanceTests.cpp | 8 ++++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/graphics/shader/recompiler/ir/Value.cpp b/src/graphics/shader/recompiler/ir/Value.cpp index d661677e2..73a9cf879 100644 --- a/src/graphics/shader/recompiler/ir/Value.cpp +++ b/src/graphics/shader/recompiler/ir/Value.cpp @@ -256,9 +256,6 @@ void Inst::Invalidate() { } void Inst::AddUse(Inst* used, size_t operand) { - const auto found = std::ranges::find_if( - used->uses, [&](const Use& use) { return use.user == this && use.operand == operand; }); - EXIT_IF(found != used->uses.end()); used->uses.push_back({this, operand}); } diff --git a/tests/ScalarProvenanceTests.cpp b/tests/ScalarProvenanceTests.cpp index 44f15237a..fb580dd17 100644 --- a/tests/ScalarProvenanceTests.cpp +++ b/tests/ScalarProvenanceTests.cpp @@ -300,8 +300,12 @@ void TestOperandMutationLifecycle() { auto *source = definition.TryInstruction(); const auto inserted = fixture.Emit(ValueOpcode::BitFieldInsert, {definition, definition, Value(4u), Value(4u)}); - Check(source->UseCount() == 2, "inline operands lost distinct reverse-use indices"); - inserted.TryInstruction()->SetArg(1, Value(3u)); + auto *consumer = inserted.TryInstruction(); + Check(source->Uses() == std::vector({{consumer, 0}, {consumer, 1}}), + "inline operands lost distinct reverse-use indices"); + consumer->SetArg(0, definition); + Check(source->UseCount() == 2, "re-setting an operand to its value duplicated its use"); + consumer->SetArg(1, Value(3u)); Check(source->UseCount() == 1, "inline operand mutation did not detach its old use"); source->ReplaceUsesWith(Value(0xaau)); uint32_t result = 0;