[spirv-reader][ir] Support atomic access through a `let`.
Add support for accessing an atomic through a `let` instruction.
Bug: 404501988
Change-Id: Icbcf144f891a715e3a2e2fc942a7661bbf177a97
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/233074
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/reader/lower/atomics.cc b/src/tint/lang/spirv/reader/lower/atomics.cc
index ac91882..720b4e0 100644
--- a/src/tint/lang/spirv/reader/lower/atomics.cc
+++ b/src/tint/lang/spirv/reader/lower/atomics.cc
@@ -124,6 +124,7 @@
tint::Switch( //
res->Instruction(), //
[&](core::ir::Access* a) { values_to_convert_.Push(a->Object()); }, //
+ [&](core::ir::Let* l) { values_to_convert_.Push(l->Value()); }, //
[&](core::ir::Var*) {}, //
TINT_ICE_ON_NO_MATCH);
}
diff --git a/src/tint/lang/spirv/reader/lower/atomics_test.cc b/src/tint/lang/spirv/reader/lower/atomics_test.cc
index d3bef8e..0c9c90d 100644
--- a/src/tint/lang/spirv/reader/lower/atomics_test.cc
+++ b/src/tint/lang/spirv/reader/lower/atomics_test.cc
@@ -84,7 +84,7 @@
ASSERT_EQ(expect, str());
}
-TEST_F(SpirvReader_AtomicsTest, DISABLED_ArrayStore_CopiedObject) {
+TEST_F(SpirvReader_AtomicsTest, ArrayStore_CopiedObject) {
auto* f = b.ComputeFunction("main");
core::ir::Var* wg = nullptr;
@@ -117,7 +117,18 @@
Run(Atomics);
auto* expect = R"(
-UNIMPLEMENTED
+$B1: { # root
+ %wg:ptr<workgroup, array<atomic<u32>, 4>, read_write> = var undef
+}
+
+%main = @compute @workgroup_size(1u, 1u, 1u) func():void {
+ $B2: {
+ %3:ptr<workgroup, array<atomic<u32>, 4>, read_write> = let %wg
+ %4:ptr<workgroup, atomic<u32>, read_write> = access %3, 1i
+ %5:void = atomicStore %4, 2u
+ ret
+ }
+}
)";
ASSERT_EQ(expect, str());
}