[ir] Move DecomposeUniformAccess to core

This allows it to be used by other backends.

Bug: 448452698
Change-Id: If50245f8256efd11b496cb4cedb6c800218781b2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/264414
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/ir/transform/BUILD.bazel b/src/tint/lang/core/ir/transform/BUILD.bazel
index 3bf2b3e..f302c03 100644
--- a/src/tint/lang/core/ir/transform/BUILD.bazel
+++ b/src/tint/lang/core/ir/transform/BUILD.bazel
@@ -52,6 +52,7 @@
     "combine_access_instructions.cc",
     "conversion_polyfill.cc",
     "dead_code_elimination.cc",
+    "decompose_uniform_access.cc",
     "demote_to_helper.cc",
     "direct_variable_access.cc",
     "multiplanar_external_texture.cc",
@@ -88,6 +89,7 @@
     "combine_access_instructions.h",
     "conversion_polyfill.h",
     "dead_code_elimination.h",
+    "decompose_uniform_access.h",
     "demote_to_helper.h",
     "direct_variable_access.h",
     "multiplanar_external_texture.h",
@@ -152,6 +154,7 @@
     "combine_access_instructions_test.cc",
     "conversion_polyfill_test.cc",
     "dead_code_elimination_test.cc",
+    "decompose_uniform_access_test.cc",
     "demote_to_helper_test.cc",
     "direct_variable_access_test.cc",
     "helper_test.h",
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake
index d980be2..ad68b31 100644
--- a/src/tint/lang/core/ir/transform/BUILD.cmake
+++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -65,6 +65,8 @@
   lang/core/ir/transform/conversion_polyfill.h
   lang/core/ir/transform/dead_code_elimination.cc
   lang/core/ir/transform/dead_code_elimination.h
+  lang/core/ir/transform/decompose_uniform_access.cc
+  lang/core/ir/transform/decompose_uniform_access.h
   lang/core/ir/transform/demote_to_helper.cc
   lang/core/ir/transform/demote_to_helper.h
   lang/core/ir/transform/direct_variable_access.cc
@@ -153,6 +155,7 @@
   lang/core/ir/transform/combine_access_instructions_test.cc
   lang/core/ir/transform/conversion_polyfill_test.cc
   lang/core/ir/transform/dead_code_elimination_test.cc
+  lang/core/ir/transform/decompose_uniform_access_test.cc
   lang/core/ir/transform/demote_to_helper_test.cc
   lang/core/ir/transform/direct_variable_access_test.cc
   lang/core/ir/transform/helper_test.h
diff --git a/src/tint/lang/core/ir/transform/BUILD.gn b/src/tint/lang/core/ir/transform/BUILD.gn
index d4f1fe2..403b6b9 100644
--- a/src/tint/lang/core/ir/transform/BUILD.gn
+++ b/src/tint/lang/core/ir/transform/BUILD.gn
@@ -71,6 +71,8 @@
     "conversion_polyfill.h",
     "dead_code_elimination.cc",
     "dead_code_elimination.h",
+    "decompose_uniform_access.cc",
+    "decompose_uniform_access.h",
     "demote_to_helper.cc",
     "demote_to_helper.h",
     "direct_variable_access.cc",
@@ -153,6 +155,7 @@
       "combine_access_instructions_test.cc",
       "conversion_polyfill_test.cc",
       "dead_code_elimination_test.cc",
+      "decompose_uniform_access_test.cc",
       "demote_to_helper_test.cc",
       "direct_variable_access_test.cc",
       "helper_test.h",
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc b/src/tint/lang/core/ir/transform/decompose_uniform_access.cc
similarity index 98%
rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc
rename to src/tint/lang/core/ir/transform/decompose_uniform_access.cc
index 42b98cd..c906c63 100644
--- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.cc
+++ b/src/tint/lang/core/ir/transform/decompose_uniform_access.cc
@@ -25,14 +25,14 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h"
+#include "src/tint/lang/core/ir/transform/decompose_uniform_access.h"
 
 #include <utility>
 
 #include "src/tint/lang/core/ir/builder.h"
 #include "src/tint/lang/core/ir/validator.h"
 
-namespace tint::hlsl::writer::raise {
+namespace tint::core::ir::transform {
 namespace {
 
 using namespace tint::core::fluent_types;     // NOLINT
@@ -100,7 +100,7 @@
                 }
 
                 OffsetData od{};
-                Switch(
+                tint::Switch(
                     inst,  //
                     [&](core::ir::LoadVectorElement* l) { LoadVectorElement(l, var, od); },
                     [&](core::ir::Load* l) { Load(l, var, od); },
@@ -118,7 +118,7 @@
                     TINT_ICE_ON_NO_MATCH);
             }
 
-            // Swap the result type of the `var` to the new HLSL result type
+            // Swap the result type of the `var` to the new result type
             auto array_length = (var_ty->StoreType()->Size() + 15) / 16;
             result->SetType(ty.ptr(var_ty->AddressSpace(), ty.array(ty.vec4<u32>(), array_length),
                                    var_ty->Access()));
@@ -606,7 +606,7 @@
 }  // namespace
 
 Result<SuccessType> DecomposeUniformAccess(core::ir::Module& ir) {
-    auto result = ValidateAndDumpIfNeeded(ir, "hlsl.DecomposeUniformAccess",
+    auto result = ValidateAndDumpIfNeeded(ir, "core.DecomposeUniformAccess",
                                           core::ir::Capabilities{
                                               core::ir::Capability::kAllowClipDistancesOnF32,
                                               core::ir::Capability::kAllowDuplicateBindings,
@@ -621,4 +621,4 @@
     return Success;
 }
 
-}  // namespace tint::hlsl::writer::raise
+}  // namespace tint::core::ir::transform
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h b/src/tint/lang/core/ir/transform/decompose_uniform_access.h
similarity index 87%
rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h
rename to src/tint/lang/core/ir/transform/decompose_uniform_access.h
index c8ed021..55adb65 100644
--- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h
+++ b/src/tint/lang/core/ir/transform/decompose_uniform_access.h
@@ -25,8 +25,8 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#ifndef SRC_TINT_LANG_HLSL_WRITER_RAISE_DECOMPOSE_UNIFORM_ACCESS_H_
-#define SRC_TINT_LANG_HLSL_WRITER_RAISE_DECOMPOSE_UNIFORM_ACCESS_H_
+#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_
+#define SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_
 
 #include "src/tint/utils/result.h"
 
@@ -35,7 +35,7 @@
 class Module;
 }  // namespace tint::core::ir
 
-namespace tint::hlsl::writer::raise {
+namespace tint::core::ir::transform {
 
 /// DecomposeUniformAccess is a transform used to replace uniform buffer accesses with a
 /// the correct load of the HLSL primitive objects
@@ -44,6 +44,6 @@
 /// @returns success or failure
 Result<SuccessType> DecomposeUniformAccess(core::ir::Module& module);
 
-}  // namespace tint::hlsl::writer::raise
+}  // namespace tint::core::ir::transform
 
-#endif  // SRC_TINT_LANG_HLSL_WRITER_RAISE_DECOMPOSE_UNIFORM_ACCESS_H_
+#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_DECOMPOSE_UNIFORM_ACCESS_H_
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc b/src/tint/lang/core/ir/transform/decompose_uniform_access_test.cc
similarity index 96%
rename from src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc
rename to src/tint/lang/core/ir/transform/decompose_uniform_access_test.cc
index 0b634de..c1ba56d 100644
--- a/src/tint/lang/hlsl/writer/raise/decompose_uniform_access_test.cc
+++ b/src/tint/lang/core/ir/transform/decompose_uniform_access_test.cc
@@ -25,7 +25,7 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h"
+#include "src/tint/lang/core/ir/transform/decompose_uniform_access.h"
 
 #include <gtest/gtest.h>
 
@@ -37,12 +37,12 @@
 using namespace tint::core::fluent_types;     // NOLINT
 using namespace tint::core::number_suffixes;  // NOLINT
 
-namespace tint::hlsl::writer::raise {
+namespace tint::core::ir::transform {
 namespace {
 
-using HlslWriterDecomposeUniformAccessTest = core::ir::transform::TransformTest;
+using IR_DecomposeUniformAccessTest = core::ir::transform::TransformTest;
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, NoBufferAccess) {
+TEST_F(IR_DecomposeUniformAccessTest, NoBufferAccess) {
     auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
     b.Append(func->Block(), [&] { b.Return(func); });
 
@@ -61,7 +61,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainFromUnnamedAccessChain) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainFromUnnamedAccessChain) {
     auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
                                                           {mod.symbols.New("c"), ty.f32()},
                                                           {mod.symbols.New("d"), ty.u32()},
@@ -145,7 +145,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainFromLetAccessChain) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainFromLetAccessChain) {
     auto* Inner = ty.Struct(mod.symbols.New("Inner"), {
                                                           {mod.symbols.New("c"), ty.f32()},
                                                       });
@@ -230,7 +230,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessVectorLoad) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessVectorLoad) {
     auto* var = b.Var<uniform, vec4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -303,7 +303,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessScalarF16) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessScalarF16) {
     auto* var = b.Var<uniform, f16, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -349,7 +349,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessVectorF16) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessVectorF16) {
     auto* var = b.Var<uniform, vec4<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -437,7 +437,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessMat2x3F16) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessMat2x3F16) {
     auto* var = b.Var<uniform, mat2x3<f16>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -528,7 +528,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessMatrix) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessMatrix) {
     auto* var = b.Var<uniform, mat4x4<f32>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -613,7 +613,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessArray) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessArray) {
     auto* var = b.Var<uniform, array<vec3<f32>, 5>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -699,7 +699,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessArrayWhichCanHaveSizesOtherThenFive) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessArrayWhichCanHaveSizesOtherThenFive) {
     auto* var = b.Var<uniform, array<vec3<f32>, 42>, core::Access::kRead>("v");
     var->SetBindingPoint(0, 0);
 
@@ -785,7 +785,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessStruct) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessStruct) {
     auto* SB = ty.Struct(mod.symbols.New("SB"), {
                                                     {mod.symbols.New("a"), ty.i32()},
                                                     {mod.symbols.New("b"), ty.f32()},
@@ -870,7 +870,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessStructNested) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessStructNested) {
     auto* Inner =
         ty.Struct(mod.symbols.New("Inner"), {
                                                 {mod.symbols.New("s"), ty.mat3x3<f32>()},
@@ -1062,7 +1062,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, UniformAccessChainReused) {
+TEST_F(IR_DecomposeUniformAccessTest, UniformAccessChainReused) {
     auto* sb = ty.Struct(mod.symbols.New("SB"), {
                                                     {mod.symbols.New("c"), ty.f32()},
                                                     {mod.symbols.New("d"), ty.vec3<f32>()},
@@ -1132,7 +1132,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromVar) {
+TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromVar) {
     auto* sb =
         ty.Struct(mod.symbols.New("SB"), {
                                              {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()},
@@ -1271,7 +1271,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromAccess) {
+TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfLetFromAccess) {
     auto* sb =
         ty.Struct(mod.symbols.New("SB"), {
                                              {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()},
@@ -1411,7 +1411,7 @@
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(HlslWriterDecomposeUniformAccessTest, Determinism_MultipleUsesOfAccess) {
+TEST_F(IR_DecomposeUniformAccessTest, Determinism_MultipleUsesOfAccess) {
     auto* sb =
         ty.Struct(mod.symbols.New("SB"), {
                                              {mod.symbols.New("a"), ty.array<vec4<f32>, 2>()},
@@ -1551,4 +1551,4 @@
 }
 
 }  // namespace
-}  // namespace tint::hlsl::writer::raise
+}  // namespace tint::core::ir::transform
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.bazel b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
index cc22958..d2afe4b 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
@@ -42,7 +42,6 @@
     "binary_polyfill.cc",
     "builtin_polyfill.cc",
     "decompose_storage_access.cc",
-    "decompose_uniform_access.cc",
     "localize_struct_array_assignment.cc",
     "pixel_local.cc",
     "promote_initializers.cc",
@@ -55,7 +54,6 @@
     "binary_polyfill.h",
     "builtin_polyfill.h",
     "decompose_storage_access.h",
-    "decompose_uniform_access.h",
     "localize_struct_array_assignment.h",
     "pixel_local.h",
     "promote_initializers.h",
@@ -99,7 +97,6 @@
     "binary_polyfill_test.cc",
     "builtin_polyfill_test.cc",
     "decompose_storage_access_test.cc",
-    "decompose_uniform_access_test.cc",
     "localize_struct_array_assignment_test.cc",
     "pixel_local_test.cc",
     "promote_initializers_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.cmake b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
index d695933..10129bb 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
@@ -45,8 +45,6 @@
   lang/hlsl/writer/raise/builtin_polyfill.h
   lang/hlsl/writer/raise/decompose_storage_access.cc
   lang/hlsl/writer/raise/decompose_storage_access.h
-  lang/hlsl/writer/raise/decompose_uniform_access.cc
-  lang/hlsl/writer/raise/decompose_uniform_access.h
   lang/hlsl/writer/raise/localize_struct_array_assignment.cc
   lang/hlsl/writer/raise/localize_struct_array_assignment.h
   lang/hlsl/writer/raise/pixel_local.cc
@@ -100,7 +98,6 @@
   lang/hlsl/writer/raise/binary_polyfill_test.cc
   lang/hlsl/writer/raise/builtin_polyfill_test.cc
   lang/hlsl/writer/raise/decompose_storage_access_test.cc
-  lang/hlsl/writer/raise/decompose_uniform_access_test.cc
   lang/hlsl/writer/raise/localize_struct_array_assignment_test.cc
   lang/hlsl/writer/raise/pixel_local_test.cc
   lang/hlsl/writer/raise/promote_initializers_test.cc
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.gn b/src/tint/lang/hlsl/writer/raise/BUILD.gn
index 80f3131..3c3b676 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.gn
@@ -51,8 +51,6 @@
     "builtin_polyfill.h",
     "decompose_storage_access.cc",
     "decompose_storage_access.h",
-    "decompose_uniform_access.cc",
-    "decompose_uniform_access.h",
     "localize_struct_array_assignment.cc",
     "localize_struct_array_assignment.h",
     "pixel_local.cc",
@@ -100,7 +98,6 @@
       "binary_polyfill_test.cc",
       "builtin_polyfill_test.cc",
       "decompose_storage_access_test.cc",
-      "decompose_uniform_access_test.cc",
       "localize_struct_array_assignment_test.cc",
       "pixel_local_test.cc",
       "promote_initializers_test.cc",
diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc
index 40b7393..35fe534 100644
--- a/src/tint/lang/hlsl/writer/raise/raise.cc
+++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -39,6 +39,7 @@
 #include "src/tint/lang/core/ir/transform/builtin_scalarize.h"
 #include "src/tint/lang/core/ir/transform/change_immediate_to_uniform.h"
 #include "src/tint/lang/core/ir/transform/conversion_polyfill.h"
+#include "src/tint/lang/core/ir/transform/decompose_uniform_access.h"
 #include "src/tint/lang/core/ir/transform/demote_to_helper.h"
 #include "src/tint/lang/core/ir/transform/direct_variable_access.h"
 #include "src/tint/lang/core/ir/transform/multiplanar_external_texture.h"
@@ -58,7 +59,6 @@
 #include "src/tint/lang/hlsl/writer/raise/binary_polyfill.h"
 #include "src/tint/lang/hlsl/writer/raise/builtin_polyfill.h"
 #include "src/tint/lang/hlsl/writer/raise/decompose_storage_access.h"
-#include "src/tint/lang/hlsl/writer/raise/decompose_uniform_access.h"
 #include "src/tint/lang/hlsl/writer/raise/localize_struct_array_assignment.h"
 #include "src/tint/lang/hlsl/writer/raise/pixel_local.h"
 #include "src/tint/lang/hlsl/writer/raise/promote_initializers.h"
@@ -245,7 +245,7 @@
         RUN_TRANSFORM(core::ir::transform::ChangeImmediateToUniform, module, config);
     }
     // Comes after DecomposeStorageAccess and ChangeImmediateToUniform.
-    RUN_TRANSFORM(raise::DecomposeUniformAccess, module);
+    RUN_TRANSFORM(core::ir::transform::DecomposeUniformAccess, module);
 
     // PixelLocal must run after DirectVariableAccess to avoid chasing pointer parameters.
     if (pixel_local_enabled) {