diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 6b902ff..602daa8 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -496,8 +496,6 @@
       "lang/core/ir/transform/block_decorated_structs.h",
       "lang/core/ir/transform/demote_to_helper.cc",
       "lang/core/ir/transform/demote_to_helper.h",
-      "lang/core/ir/transform/rename_conflicts_wgsl.cc",
-      "lang/core/ir/transform/rename_conflicts_wgsl.h",
       "lang/core/ir/transform/shader_io.cc",
       "lang/core/ir/transform/shader_io.h",
     ]
@@ -1035,10 +1033,10 @@
       "lang/spirv/writer/printer/printer.h",
     ]
     deps += [
-      ":libtint_ir_builder_src",
       ":libtint_ir_src",
       ":libtint_ir_transform_src",
       ":libtint_wgsl_reader_program_to_ir_src",
+      ":libtint_wgsl_writer_ir_to_program_src",
     ]
   }
 }
@@ -1068,17 +1066,39 @@
   ]
 }
 
-libtint_source_set("libtint_wgsl_reader_program_to_ir_src") {
-  sources = []
-  deps = []
+if (tint_build_ir) {
+  libtint_source_set("libtint_wgsl_reader_program_to_ir_src") {
+    sources = []
+    deps = []
 
-  if (tint_build_ir) {
-    sources += [
-      "lang/wgsl/reader/program_to_ir/program_to_ir.cc",
-      "lang/wgsl/reader/program_to_ir/program_to_ir.h",
+    if (tint_build_ir) {
+      sources += [
+        "lang/wgsl/reader/program_to_ir/program_to_ir.cc",
+        "lang/wgsl/reader/program_to_ir/program_to_ir.h",
+      ]
+      deps += [
+        ":libtint_ast_src",
+        ":libtint_ir_src",
+        ":libtint_program_src",
+        ":libtint_sem_src",
+        ":libtint_symbols_src",
+        ":libtint_type_src",
+        ":libtint_utils_src",
+      ]
+    }
+  }
+
+  libtint_source_set("libtint_wgsl_writer_ir_to_program_src") {
+    sources = [
+      "lang/wgsl/writer/ir_to_program/ir_to_program.cc",
+      "lang/wgsl/writer/ir_to_program/ir_to_program.h",
+      "lang/wgsl/writer/ir_to_program/rename_conflicts.cc",
+      "lang/wgsl/writer/ir_to_program/rename_conflicts.h",
     ]
-    deps += [
+    deps = [
       ":libtint_ast_src",
+      ":libtint_builtins_src",
+      ":libtint_constant_src",
       ":libtint_ir_src",
       ":libtint_program_src",
       ":libtint_sem_src",
@@ -1148,9 +1168,9 @@
       "lang/msl/writer/printer/printer.h",
     ]
     deps += [
-      ":libtint_ir_builder_src",
       ":libtint_ir_src",
       ":libtint_ir_transform_src",
+      ":libtint_wgsl_writer_ir_to_program_src",
     ]
   }
 }
@@ -1228,25 +1248,6 @@
 }
 
 if (tint_build_ir) {
-  libtint_source_set("libtint_ir_builder_src") {
-    sources = [
-      "lang/core/ir/to_program.cc",
-      "lang/core/ir/to_program.h",
-    ]
-    deps = [
-      ":libtint_ast_src",
-      ":libtint_builtins_src",
-      ":libtint_constant_src",
-      ":libtint_ir_src",
-      ":libtint_ir_transform_src",
-      ":libtint_program_src",
-      ":libtint_sem_src",
-      ":libtint_symbols_src",
-      ":libtint_type_src",
-      ":libtint_utils_src",
-    ]
-  }
-
   libtint_source_set("libtint_ir_src") {
     sources = [
       "lang/core/ir/access.cc",
@@ -1413,8 +1414,8 @@
     assert(!build_with_chromium,
            "tint_build_ir cannot be used when building Chromium")
     public_deps += [
-      ":libtint_ir_builder_src",
       ":libtint_ir_src",
+      ":libtint_wgsl_writer_ir_to_program_src",
     ]
   }
 
@@ -1898,10 +1899,6 @@
           "lang/core/ir/transform/var_for_dynamic_index_test.cc",
         ]
       }
-
-      if (tint_build_wgsl_writer) {
-        sources += [ "lang/core/ir/transform/rename_conflicts_wgsl_test.cc" ]
-      }
     }
   }
 
@@ -2188,6 +2185,40 @@
       deps += [
         ":libtint_ir_src",
         ":tint_unittests_ir_src",
+        ":tint_unittests_wgsl_ir_helper",
+      ]
+    }
+  }
+
+  tint_unittests_source_set("tint_unittests_wgsl_writer_ir_to_program_src") {
+    sources = []
+    deps = []
+
+    if (tint_build_ir) {
+      sources += [
+        "lang/wgsl/writer/ir_to_program/inlining_test.cc",
+        "lang/wgsl/writer/ir_to_program/ir_to_program_test.cc",
+        "lang/wgsl/writer/ir_to_program/ir_to_program_test.h",
+        "lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc",
+      ]
+      deps += [
+        ":libtint_ir_src",
+        ":tint_unittests_ir_src",
+      ]
+    }
+  }
+
+  tint_unittests_source_set("tint_unittests_wgsl_ir_roundtrip_src") {
+    sources = []
+    deps = []
+
+    if (tint_build_ir) {
+      sources += [ "lang/wgsl/ir_roundtrip_test.cc" ]
+      deps += [
+        ":libtint_ir_src",
+        ":libtint_wgsl_reader_program_to_ir_src",
+        ":tint_unittests_ir_src",
+        ":tint_unittests_wgsl_ir_helper",
       ]
     }
   }
@@ -2415,16 +2446,19 @@
       ":libtint_unittests_ast_helper",
       ":tint_unittests_ast_src",
     ]
-
-    if (tint_build_ir) {
-      deps += [
-        ":libtint_ir_builder_src",
-        ":libtint_ir_src",
-      ]
-    }
   }
 
   if (tint_build_ir) {
+    tint_unittests_source_set("tint_unittests_wgsl_ir_helper") {
+      sources = [ "lang/wgsl/helpers/ir_program_test.h" ]
+      deps = [
+        ":libtint_builtins_src",
+        ":libtint_ir_src",
+        ":libtint_wgsl_reader_program_to_ir_src",
+        ":libtint_wgsl_writer_ir_to_program_src",
+      ]
+    }
+
     tint_unittests_source_set("tint_unittests_ir_src") {
       sources = [
         "lang/core/ir/access_test.cc",
@@ -2448,7 +2482,6 @@
         "lang/core/ir/instruction_result_test.cc",
         "lang/core/ir/instruction_test.cc",
         "lang/core/ir/intrinsic_call_test.cc",
-        "lang/core/ir/ir_test_helper.h",
         "lang/core/ir/let_test.cc",
         "lang/core/ir/load_test.cc",
         "lang/core/ir/load_vector_element_test.cc",
@@ -2457,15 +2490,11 @@
         "lang/core/ir/multi_in_block_test.cc",
         "lang/core/ir/next_iteration_test.cc",
         "lang/core/ir/operand_instruction_test.cc",
-        "lang/core/ir/program_test_helper.h",
         "lang/core/ir/return_test.cc",
         "lang/core/ir/store_test.cc",
         "lang/core/ir/store_vector_element_test.cc",
         "lang/core/ir/switch_test.cc",
         "lang/core/ir/swizzle_test.cc",
-        "lang/core/ir/to_program_inlining_test.cc",
-        "lang/core/ir/to_program_roundtrip_test.cc",
-        "lang/core/ir/to_program_test.cc",
         "lang/core/ir/unary_test.cc",
         "lang/core/ir/user_call_test.cc",
         "lang/core/ir/validator_test.cc",
@@ -2475,9 +2504,9 @@
 
       deps = [
         ":libtint_builtins_src",
-        ":libtint_ir_builder_src",
         ":libtint_ir_src",
         ":libtint_wgsl_reader_program_to_ir_src",
+        ":libtint_wgsl_writer_ir_to_program_src",
       ]
     }
   }
@@ -2550,8 +2579,17 @@
       deps += [
         ":tint_unittests_ir_src",
         ":tint_unittests_ir_transform_src",
-        ":tint_unittests_wgsl_reader_program_to_ir_src",
       ]
+
+      if (tint_build_wgsl_reader) {
+        deps += [ ":tint_unittests_wgsl_reader_program_to_ir_src" ]
+      }
+      if (tint_build_wgsl_writer) {
+        deps += [ ":tint_unittests_wgsl_writer_ir_to_program_src" ]
+      }
+      if (tint_build_wgsl_reader && tint_build_wgsl_writer) {
+        deps += [ ":tint_unittests_wgsl_ir_roundtrip_src" ]
+      }
     }
 
     if (build_with_chromium) {
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 98d2aee..1a4a3ec 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -695,6 +695,15 @@
     lang/wgsl/writer/ast_printer/ast_printer.cc
     lang/wgsl/writer/ast_printer/ast_printer.h
   )
+
+  if(${TINT_BUILD_IR})
+    list(APPEND TINT_LIB_SRCS
+      lang/wgsl/writer/ir_to_program/ir_to_program.cc
+      lang/wgsl/writer/ir_to_program/ir_to_program.h
+      lang/wgsl/writer/ir_to_program/rename_conflicts.cc
+      lang/wgsl/writer/ir_to_program/rename_conflicts.h
+    )
+  endif()
 endif()
 
 if(${TINT_BUILD_MSL_WRITER})
@@ -841,8 +850,6 @@
     lang/core/ir/terminate_invocation.h
     lang/core/ir/terminator.cc
     lang/core/ir/terminator.h
-    lang/core/ir/to_program.cc
-    lang/core/ir/to_program.h
     lang/core/ir/unary.cc
     lang/core/ir/unary.h
     lang/core/ir/unreachable.cc
@@ -861,8 +868,6 @@
     lang/core/ir/transform/block_decorated_structs.h
     lang/core/ir/transform/demote_to_helper.cc
     lang/core/ir/transform/demote_to_helper.h
-    lang/core/ir/transform/rename_conflicts_wgsl.cc
-    lang/core/ir/transform/rename_conflicts_wgsl.h
     lang/core/ir/transform/shader_io.cc
     lang/core/ir/transform/shader_io.h
     lang/core/ir/transform/transform.cc
@@ -1161,7 +1166,7 @@
     utils/traits/traits_test.cc
   )
 
-  # Noet, the source files are included here otherwise the cmd sources would not be included in the
+  # Note, the source files are included here otherwise the cmd sources would not be included in the
   # test binary.
   list(APPEND TINT_TEST_SRCS
     cmd/generate_external_texture_bindings.cc
@@ -1226,6 +1231,13 @@
     )
   endif()
 
+
+  if(${TINT_BUILD_IR})
+    list(APPEND TINT_TEST_SRCS
+      lang/wgsl/helpers/ir_program_test.h
+    )
+  endif()
+
   if(${TINT_BUILD_WGSL_READER})
     list(APPEND TINT_TEST_SRCS
       lang/wgsl/reader/parser/additive_expression_test.cc
@@ -1384,12 +1396,6 @@
         lang/spirv/writer/var_test.cc
         lang/spirv/writer/writer_test.cc
       )
-
-      if (${TINT_BUILD_WGSL_WRITER})
-        list(APPEND TINT_TEST_SRCS
-          lang/core/ir/transform/rename_conflicts_wgsl_test.cc
-        )
-      endif()
     endif()
   endif()
 
@@ -1427,8 +1433,18 @@
       lang/wgsl/writer/ast_printer/variable_test.cc
       lang/wgsl/writer/ast_printer/test_helper.h
     )
+
+    if (${TINT_BUILD_IR})
+      list(APPEND TINT_TEST_SRCS
+        lang/wgsl/writer/ir_to_program/inlining_test.cc
+        lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
+        lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
+      )
+    endif()
   endif()
 
+
+
   if(${TINT_BUILD_WGSL_READER} AND ${TINT_BUILD_WGSL_WRITER})
     list(APPEND TINT_TEST_SRCS
       lang/wgsl/ast/module_clone_test.cc
@@ -1631,7 +1647,6 @@
       lang/core/ir/instruction_result_test.cc
       lang/core/ir/instruction_test.cc
       lang/core/ir/intrinsic_call_test.cc
-      lang/core/ir/ir_test_helper.h
       lang/core/ir/let_test.cc
       lang/core/ir/load_test.cc
       lang/core/ir/load_vector_element_test.cc
@@ -1640,7 +1655,6 @@
       lang/core/ir/multi_in_block_test.cc
       lang/core/ir/next_iteration_test.cc
       lang/core/ir/operand_instruction_test.cc
-      lang/core/ir/program_test_helper.h
       lang/core/ir/return_test.cc
       lang/core/ir/store_test.cc
       lang/core/ir/store_vector_element_test.cc
@@ -1659,14 +1673,7 @@
 
   if (${TINT_BUILD_IR} AND ${TINT_BUILD_WGSL_READER} AND ${TINT_BUILD_WGSL_WRITER})
     list(APPEND TINT_TEST_SRCS
-      lang/core/ir/to_program_roundtrip_test.cc
-    )
-  endif()
-
-  if (${TINT_BUILD_IR} AND ${TINT_BUILD_WGSL_WRITER})
-    list(APPEND TINT_TEST_SRCS
-      lang/core/ir/to_program_inlining_test.cc
-      lang/core/ir/to_program_test.cc
+      lang/wgsl/ir_roundtrip_test.cc
     )
   endif()
 
diff --git a/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc b/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
index 964bd44..757b8f4 100644
--- a/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
+++ b/src/tint/fuzzers/tint_ir_roundtrip_fuzzer.cc
@@ -17,9 +17,9 @@
 #include <unordered_set>
 
 #include "src/tint/fuzzers/apply_substitute_overrides.h"
-#include "src/tint/lang/core/ir/to_program.h"
 #include "src/tint/lang/wgsl/reader/parser/parser.h"
 #include "src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
 #include "src/tint/lang/wgsl/writer/writer.h"
 
 [[noreturn]] void TintInternalCompilerErrorReporter(const tint::diag::List& diagnostics) {
@@ -77,7 +77,7 @@
         __builtin_trap();
     }
 
-    auto dst = tint::ir::ToProgram(ir.Get());
+    auto dst = tint::wgsl::writer::IRToProgram(ir.Get());
     if (!dst.IsValid()) {
 #if TINT_BUILD_WGSL_WRITER
         if (auto result = tint::wgsl::writer::Generate(&dst, {}); result.success) {
diff --git a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h b/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h
deleted file mode 100644
index a5146fc..0000000
--- a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2023 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
-#define SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
-
-#include "src/tint/lang/core/ir/transform/transform.h"
-
-// Forward declarations
-namespace tint::ir {
-class BuiltinCall;
-}  // namespace tint::ir
-namespace tint::type {
-class Type;
-}  // namespace tint::type
-
-namespace tint::ir::transform {
-
-/// RenameConflictsWGSL is a transform that renames declarations which prevent identifiers from
-/// resolving to the correct declaration, and those with identical identifiers declared in the same
-/// scope.
-class RenameConflictsWGSL final : public utils::Castable<RenameConflictsWGSL, Transform> {
-  public:
-    /// Constructor
-    RenameConflictsWGSL();
-    /// Destructor
-    ~RenameConflictsWGSL() override;
-
-    /// @copydoc Transform::Run
-    void Run(ir::Module* module) const override;
-
-  private:
-    struct State;
-};
-
-}  // namespace tint::ir::transform
-
-#endif  // SRC_TINT_LANG_CORE_IR_TRANSFORM_RENAME_CONFLICTS_WGSL_H_
diff --git a/src/tint/lang/core/ir/program_test_helper.h b/src/tint/lang/wgsl/helpers/ir_program_test.h
similarity index 75%
rename from src/tint/lang/core/ir/program_test_helper.h
rename to src/tint/lang/wgsl/helpers/ir_program_test.h
index 12431a9..129e140 100644
--- a/src/tint/lang/core/ir/program_test_helper.h
+++ b/src/tint/lang/wgsl/helpers/ir_program_test.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
-#define SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
+#ifndef SRC_TINT_LANG_WGSL_HELPERS_IR_PROGRAM_TEST_H_
+#define SRC_TINT_LANG_WGSL_HELPERS_IR_PROGRAM_TEST_H_
 
 #include <memory>
 #include <string>
@@ -28,18 +28,18 @@
 #include "src/tint/lang/wgsl/reader/reader.h"
 #include "src/tint/utils/text/string_stream.h"
 
-namespace tint::ir {
+namespace tint::wgsl::helpers {
 
-/// Helper class for testing
+/// Helper class for testing IR with an input WGSL program.
 template <typename BASE>
-class ProgramTestHelperBase : public BASE, public ProgramBuilder {
+class IRProgramTestBase : public BASE, public ProgramBuilder {
   public:
-    ProgramTestHelperBase() = default;
-    ~ProgramTestHelperBase() override = default;
+    IRProgramTestBase() = default;
+    ~IRProgramTestBase() override = default;
 
     /// Build the module, cleaning up the program before returning.
     /// @returns the generated module
-    utils::Result<Module, std::string> Build() {
+    utils::Result<ir::Module, std::string> Build() {
         SetResolveOnBuild(true);
 
         Program program{std::move(*this)};
@@ -60,7 +60,7 @@
     /// Build the module from the given WGSL.
     /// @param wgsl the WGSL to convert to IR
     /// @returns the generated module
-    utils::Result<Module, std::string> Build(std::string wgsl) {
+    utils::Result<ir::Module, std::string> Build(std::string wgsl) {
 #if TINT_BUILD_WGSL_READER
         Source::File file("test.wgsl", std::move(wgsl));
         auto program = wgsl::reader::Parse(&file);
@@ -83,17 +83,17 @@
 
     /// @param mod the module
     /// @returns the disassembly string of the module
-    std::string Disassemble(Module& mod) {
-        Disassembler d(mod);
+    std::string Disassemble(ir::Module& mod) {
+        ir::Disassembler d(mod);
         return d.Disassemble();
     }
 };
 
-using ProgramTestHelper = ProgramTestHelperBase<testing::Test>;
+using IRProgramTest = IRProgramTestBase<testing::Test>;
 
 template <typename T>
-using ProgramTestParamHelper = ProgramTestHelperBase<testing::TestWithParam<T>>;
+using IRProgramTestParam = IRProgramTestBase<testing::TestWithParam<T>>;
 
-}  // namespace tint::ir
+}  // namespace tint::wgsl::helpers
 
-#endif  // SRC_TINT_LANG_CORE_IR_PROGRAM_TEST_HELPER_H_
+#endif  // SRC_TINT_LANG_WGSL_HELPERS_IR_PROGRAM_TEST_H_
diff --git a/src/tint/lang/core/ir/to_program_roundtrip_test.cc b/src/tint/lang/wgsl/ir_roundtrip_test.cc
similarity index 98%
rename from src/tint/lang/core/ir/to_program_roundtrip_test.cc
rename to src/tint/lang/wgsl/ir_roundtrip_test.cc
index 1a268d3..b38c10f 100644
--- a/src/tint/lang/core/ir/to_program_roundtrip_test.cc
+++ b/src/tint/lang/wgsl/ir_roundtrip_test.cc
@@ -12,23 +12,23 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/lang/core/ir/program_test_helper.h"
-#include "src/tint/lang/core/ir/to_program.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 #include "src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h"
 #include "src/tint/lang/wgsl/reader/reader.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
 #include "src/tint/lang/wgsl/writer/writer.h"
 #include "src/tint/utils/text/string.h"
 
 #if !TINT_BUILD_WGSL_READER || !TINT_BUILD_WGSL_WRITER
-#error "to_program_roundtrip_test.cc requires both the WGSL reader and writer to be enabled"
+#error "ir_roundtrip_test.cc requires both the WGSL reader and writer to be enabled"
 #endif
 
-namespace tint::ir {
+namespace tint::wgsl {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-class IRToProgramRoundtripTest : public ProgramTestHelper {
+class IRToProgramRoundtripTest : public helpers::IRProgramTest {
   public:
     void Test(std::string_view input_wgsl, std::string_view expected_wgsl) {
         auto input = utils::TrimSpace(input_wgsl);
@@ -42,7 +42,7 @@
         tint::ir::Disassembler d{ir_module.Get()};
         auto disassembly = d.Disassemble();
 
-        auto output_program = ToProgram(ir_module.Get());
+        auto output_program = wgsl::writer::IRToProgram(ir_module.Get());
         if (!output_program.IsValid()) {
             FAIL() << output_program.Diagnostics().str() << std::endl  //
                    << "IR:" << std::endl                               //
@@ -3151,4 +3151,4 @@
 }
 
 }  // namespace
-}  // namespace tint::ir
+}  // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/accessor_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/accessor_test.cc
index e7a31d4..a166366 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/accessor_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/accessor_test.cc
@@ -16,10 +16,10 @@
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/core/ir/block.h"
 #include "src/tint/lang/core/ir/constant.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -27,7 +27,7 @@
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using ProgramToIRAccessorTest = ir::ProgramTestHelper;
+using ProgramToIRAccessorTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRAccessorTest, Accessor_Var_ArraySingleIndex) {
     // var a: array<u32, 3>
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/binary_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/binary_test.cc
index 8376845..c36254a 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/binary_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/binary_test.cc
@@ -14,16 +14,16 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRBinaryTest = ir::ProgramTestHelper;
+using ProgramToIRBinaryTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRBinaryTest, EmitExpression_Binary_Add) {
     Func("my_func", utils::Empty, ty.u32(), utils::Vector{Return(0_u)});
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/builtin_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/builtin_test.cc
index d24c0bd..01f069b 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/builtin_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/builtin_test.cc
@@ -14,16 +14,16 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRBuiltinTest = ir::ProgramTestHelper;
+using ProgramToIRBuiltinTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRBuiltinTest, EmitExpression_Builtin) {
     auto i = GlobalVar("i", builtin::AddressSpace::kPrivate, Expr(1_f));
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/call_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/call_test.cc
index 56f53e7..fc7799e 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/call_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/call_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -24,7 +24,7 @@
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using ProgramToIRCallTest = ir::ProgramTestHelper;
+using ProgramToIRCallTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRCallTest, EmitExpression_Bitcast) {
     Func("my_func", utils::Empty, ty.f32(), utils::Vector{Return(0_f)});
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/function_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/function_test.cc
index 47d2497..d773315 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/function_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/function_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -24,7 +24,7 @@
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using ProgramToIRFunctionTest = ir::ProgramTestHelper;
+using ProgramToIRFunctionTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRFunctionTest, EmitFunction_Vertex) {
     Func("test", utils::Empty, ty.vec4<f32>(),
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/let_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/let_test.cc
index 3fca4cb..fcda990 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/let_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/let_test.cc
@@ -14,16 +14,16 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRLetTest = ir::ProgramTestHelper;
+using ProgramToIRLetTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRLetTest, Constant) {
     WrapInFunction(Let("a", Expr(42_i)));
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/literal_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/literal_test.cc
index 2810cea..a6d0bf8 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/literal_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/literal_test.cc
@@ -16,10 +16,10 @@
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/core/ir/block.h"
 #include "src/tint/lang/core/ir/constant.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -41,7 +41,7 @@
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRLiteralTest = ir::ProgramTestHelper;
+using ProgramToIRLiteralTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRLiteralTest, EmitLiteral_Bool_True) {
     auto* expr = Expr(true);
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/materialize_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/materialize_test.cc
index 698f255..c47ef08 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/materialize_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/materialize_test.cc
@@ -14,16 +14,16 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRMaterializeTest = ir::ProgramTestHelper;
+using ProgramToIRMaterializeTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRMaterializeTest, EmitExpression_MaterializedCall) {
     auto* expr = Return(Call("trunc", 2.5_f));
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir_test.cc
index d83002f..bfaf84a 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir_test.cc
@@ -18,10 +18,10 @@
 #include "src/tint/lang/core/ir/if.h"
 #include "src/tint/lang/core/ir/loop.h"
 #include "src/tint/lang/core/ir/multi_in_block.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/core/ir/switch.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -51,7 +51,7 @@
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using IR_FromProgramTest = ir::ProgramTestHelper;
+using IR_FromProgramTest = helpers::IRProgramTest;
 
 TEST_F(IR_FromProgramTest, Func) {
     Func("f", utils::Empty, ty.void_(), utils::Empty);
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/shadowing_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/shadowing_test.cc
index 66f9963..3001208 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/shadowing_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/shadowing_test.cc
@@ -16,18 +16,18 @@
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/core/ir/block.h"
 #include "src/tint/lang/core/ir/constant.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
-namespace tint::ir {
+namespace tint::wgsl {
 namespace {
 
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using ProgramToIRShadowingTest = ProgramTestHelper;
+using ProgramToIRShadowingTest = helpers::IRProgramTest;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Shadowing tests
@@ -807,4 +807,4 @@
 }
 
 }  // namespace
-}  // namespace tint::ir
+}  // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/store_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/store_test.cc
index d0a10b5..b7b14b0 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/store_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/store_test.cc
@@ -14,16 +14,16 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRStoreTest = ir::ProgramTestHelper;
+using ProgramToIRStoreTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRStoreTest, EmitStatement_Assign) {
     GlobalVar("a", ty.u32(), builtin::AddressSpace::kPrivate);
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/unary_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/unary_test.cc
index 2ff5f01..d124aa9 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/unary_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/unary_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/lang/core/ir/program_test_helper.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 #include "src/tint/lang/core/constant/scalar.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
@@ -23,7 +23,7 @@
 
 using namespace tint::number_suffixes;  // NOLINT
 
-using ProgramToIRUnaryTest = ir::ProgramTestHelper;
+using ProgramToIRUnaryTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRUnaryTest, EmitExpression_Unary_Not) {
     Func("my_func", utils::Empty, ty.bool_(), utils::Vector{Return(false)});
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/var_test.cc b/src/tint/lang/wgsl/reader/program_to_ir/var_test.cc
index 2ee91ad..1ecedad 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/var_test.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/var_test.cc
@@ -14,9 +14,9 @@
 
 #include "gmock/gmock.h"
 #include "src/tint/lang/core/constant/scalar.h"
-#include "src/tint/lang/core/ir/program_test_helper.h"
 #include "src/tint/lang/wgsl/ast/case_selector.h"
 #include "src/tint/lang/wgsl/ast/int_literal_expression.h"
+#include "src/tint/lang/wgsl/helpers/ir_program_test.h"
 
 namespace tint::wgsl::reader {
 namespace {
@@ -24,7 +24,7 @@
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using ProgramToIRVarTest = ir::ProgramTestHelper;
+using ProgramToIRVarTest = helpers::IRProgramTest;
 
 TEST_F(ProgramToIRVarTest, Emit_GlobalVar_NoInit) {
     GlobalVar("a", ty.u32(), builtin::AddressSpace::kPrivate);
diff --git a/src/tint/lang/core/ir/to_program_inlining_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/inlining_test.cc
similarity index 97%
rename from src/tint/lang/core/ir/to_program_inlining_test.cc
rename to src/tint/lang/wgsl/writer/ir_to_program/inlining_test.cc
index d446c73..7991632 100644
--- a/src/tint/lang/core/ir/to_program_inlining_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/inlining_test.cc
@@ -15,14 +15,14 @@
 #include <string>
 
 #include "src/tint/lang/core/ir/disassembler.h"
-#include "src/tint/lang/core/ir/to_program.h"
-#include "src/tint/lang/core/ir/to_program_test.h"
 #include "src/tint/lang/core/type/array.h"
 #include "src/tint/lang/core/type/matrix.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.h"
 #include "src/tint/lang/wgsl/writer/writer.h"
 #include "src/tint/utils/text/string.h"
 
-namespace tint::ir::test {
+namespace tint::wgsl::writer {
 namespace {
 
 using namespace tint::number_suffixes;        // NOLINT
@@ -922,7 +922,7 @@
     b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* switch_ = b.Switch(3_i);
-        auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
+        auto* case_ = b.Case(switch_, {ir::Switch::CaseSelector{}});
         b.Append(case_, [&] { b.Return(fn, v); });
         b.Return(fn, 0_i);
     });
@@ -947,7 +947,7 @@
         auto* v_1 = b.Load(var);
         auto* v_2 = b.Add(ty.i32(), v_1, 2_i);
         auto* switch_ = b.Switch(3_i);
-        auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
+        auto* case_ = b.Case(switch_, {ir::Switch::CaseSelector{}});
         b.Append(case_, [&] { b.Return(fn, v_2); });
         b.Return(fn, 0_i);
     });
@@ -971,7 +971,7 @@
     b.Append(fn->Block(), [&] {
         auto* v = b.Add(ty.i32(), 1_i, 2_i);
         auto* switch_ = b.Switch(v);
-        auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
+        auto* case_ = b.Case(switch_, {ir::Switch::CaseSelector{}});
         b.Append(case_, [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
@@ -995,7 +995,7 @@
         var->SetInitializer(b.Constant(1_i));
         auto* v_1 = b.Load(var);
         auto* switch_ = b.Switch(v_1);
-        auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
+        auto* case_ = b.Case(switch_, {ir::Switch::CaseSelector{}});
         b.Append(case_, [&] { b.Return(fn, 3_i); });
         b.Return(fn, 0_i);
     });
@@ -1020,7 +1020,7 @@
         b.Store(var, 1_i);
         auto* load = b.Load(var);
         auto* switch_ = b.Switch(1_i);
-        auto* case_ = b.Case(switch_, {Switch::CaseSelector{}});
+        auto* case_ = b.Case(switch_, {ir::Switch::CaseSelector{}});
         b.Append(case_, [&] {
             b.Store(var, 2_i);
             b.ExitSwitch(switch_);
@@ -1393,4 +1393,4 @@
 }
 
 }  // namespace
-}  // namespace tint::ir::test
+}  // namespace tint::wgsl::writer
diff --git a/src/tint/lang/core/ir/to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
similarity index 98%
rename from src/tint/lang/core/ir/to_program.cc
rename to src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index 56497e0..671b1b4 100644
--- a/src/tint/lang/core/ir/to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/lang/core/ir/to_program.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
 
 #include <string>
 #include <tuple>
@@ -49,7 +49,6 @@
 #include "src/tint/lang/core/ir/store_vector_element.h"
 #include "src/tint/lang/core/ir/switch.h"
 #include "src/tint/lang/core/ir/swizzle.h"
-#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
 #include "src/tint/lang/core/ir/unary.h"
 #include "src/tint/lang/core/ir/unreachable.h"
 #include "src/tint/lang/core/ir/user_call.h"
@@ -64,6 +63,7 @@
 #include "src/tint/lang/core/type/sampler.h"
 #include "src/tint/lang/core/type/texture.h"
 #include "src/tint/lang/wgsl/program/program_builder.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h"
 #include "src/tint/utils/containers/hashmap.h"
 #include "src/tint/utils/containers/predicates.h"
 #include "src/tint/utils/containers/reverse.h"
@@ -84,22 +84,22 @@
     nesting_depth_++;    \
     TINT_DEFER(nesting_depth_--)
 
-namespace tint::ir {
+namespace tint::wgsl::writer {
 
 namespace {
 
 class State {
   public:
-    explicit State(Module& m) : mod(m) {}
+    explicit State(ir::Module& m) : mod(m) {}
 
     Program Run() {
-        if (auto res = Validate(mod); !res) {
+        if (auto res = ir::Validate(mod); !res) {
             // IR module failed validation.
             b.Diagnostics() = res.Failure();
             return Program{std::move(b)};
         }
 
-        transform::RenameConflictsWGSL{}.Run(&mod);
+        RenameConflicts{}.Run(&mod);
 
         if (mod.root_block) {
             RootBlock(mod.root_block);
@@ -119,7 +119,7 @@
     };
 
     /// The source IR module
-    Module& mod;
+    ir::Module& mod;
 
     /// The target ProgramBuilder
     ProgramBuilder b;
@@ -144,10 +144,10 @@
     using ValueBinding = std::variant<VariableValue, InlinedValue, ConsumedValue>;
 
     /// IR values to their representation
-    utils::Hashmap<Value*, ValueBinding, 32> bindings_;
+    utils::Hashmap<ir::Value*, ValueBinding, 32> bindings_;
 
     /// Names for values
-    utils::Hashmap<Value*, Symbol, 32> names_;
+    utils::Hashmap<ir::Value*, Symbol, 32> names_;
 
     /// The nesting depth of the currently generated AST
     /// 0  is module scope
@@ -187,7 +187,7 @@
 
         // TODO(crbug.com/tint/1915): Properly implement this when we've fleshed out Function
         static constexpr size_t N = decltype(ast::Function::params)::static_length;
-        auto params = utils::Transform<N>(fn->Params(), [&](FunctionParam* param) {
+        auto params = utils::Transform<N>(fn->Params(), [&](ir::FunctionParam* param) {
             auto ty = Type(param->Type());
             auto name = NameFor(param);
             Bind(param, name, PtrKind::kPtr);
@@ -987,7 +987,7 @@
 
     /// @returns the AST name for the given value, creating and returning a new name on the first
     /// call.
-    Symbol NameFor(Value* value, std::string_view suggested = {}) {
+    Symbol NameFor(ir::Value* value, std::string_view suggested = {}) {
         return names_.GetOrCreate(value, [&] {
             if (!suggested.empty()) {
                 return b.Symbols().Register(suggested);
@@ -1155,8 +1155,8 @@
 
 }  // namespace
 
-Program ToProgram(Module& i) {
+Program IRToProgram(ir::Module& i) {
     return State{i}.Run();
 }
 
-}  // namespace tint::ir
+}  // namespace tint::wgsl::writer
diff --git a/src/tint/lang/core/ir/to_program.h b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h
similarity index 73%
rename from src/tint/lang/core/ir/to_program.h
rename to src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h
index 69d0210..e4186a4 100644
--- a/src/tint/lang/core/ir/to_program.h
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
-#define SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
+#ifndef SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_H_
+#define SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_H_
 
 #include "src/tint/lang/wgsl/program/program.h"
 
@@ -21,14 +21,14 @@
 class Module;
 }
 
-namespace tint::ir {
+namespace tint::wgsl::writer {
 
 /// Builds a tint::Program from an ir::Module
 /// @param module the IR module
 /// @return the tint::Program.
 /// @note Check the returned Program::Diagnostics() for any errors.
-Program ToProgram(Module& module);
+Program IRToProgram(ir::Module& module);
 
-}  // namespace tint::ir
+}  // namespace tint::wgsl::writer
 
-#endif  // SRC_TINT_LANG_CORE_IR_TO_PROGRAM_H_
+#endif  // SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_H_
diff --git a/src/tint/lang/core/ir/to_program_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
similarity index 97%
rename from src/tint/lang/core/ir/to_program_test.cc
rename to src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
index bae2be9..f1b29fa 100644
--- a/src/tint/lang/core/ir/to_program_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
@@ -16,12 +16,12 @@
 #include <string>
 
 #include "src/tint/lang/core/ir/disassembler.h"
-#include "src/tint/lang/core/ir/to_program.h"
-#include "src/tint/lang/core/ir/to_program_test.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.h"
 #include "src/tint/lang/wgsl/writer/writer.h"
 #include "src/tint/utils/text/string.h"
 
-namespace tint::ir::test {
+namespace tint::wgsl::writer {
 
 using namespace tint::number_suffixes;        // NOLINT
 using namespace tint::builtin::fluent_types;  // NOLINT
@@ -32,7 +32,7 @@
     tint::ir::Disassembler d{mod};
     result.ir = d.Disassemble();
 
-    auto output_program = ToProgram(mod);
+    auto output_program = IRToProgram(mod);
     if (!output_program.IsValid()) {
         result.err = output_program.Diagnostics().str();
         result.ast = Program::printer(&output_program);
@@ -1819,7 +1819,7 @@
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.Append(b.Case(s, {Switch::CaseSelector{}}), [&] {
+        b.Append(b.Case(s, {ir::Switch::CaseSelector{}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s);
         });
@@ -1859,20 +1859,20 @@
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
+        b.Append(b.Case(s, {ir::Switch::CaseSelector{b.Constant(0_i)}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s);
         });
         b.Append(b.Case(s,
                         {
-                            Switch::CaseSelector{b.Constant(1_i)},
-                            Switch::CaseSelector{},
+                            ir::Switch::CaseSelector{b.Constant(1_i)},
+                            ir::Switch::CaseSelector{},
                         }),
                  [&] {
                      b.Call(ty.void_(), fn_b);
                      b.ExitSwitch(s);
                  });
-        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
+        b.Append(b.Case(s, {ir::Switch::CaseSelector{b.Constant(2_i)}}), [&] {
             b.Call(ty.void_(), fn_c);
             b.ExitSwitch(s);
         });
@@ -1918,14 +1918,14 @@
         v->SetInitializer(b.Constant(42_i));
 
         auto s = b.Switch(b.Load(v));
-        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(0_i)}}), [&] { b.Return(fn); });
+        b.Append(b.Case(s, {ir::Switch::CaseSelector{b.Constant(0_i)}}), [&] { b.Return(fn); });
         b.Append(b.Case(s,
                         {
-                            Switch::CaseSelector{b.Constant(1_i)},
-                            Switch::CaseSelector{},
+                            ir::Switch::CaseSelector{b.Constant(1_i)},
+                            ir::Switch::CaseSelector{},
                         }),
                  [&] { b.Return(fn); });
-        b.Append(b.Case(s, {Switch::CaseSelector{b.Constant(2_i)}}), [&] { b.Return(fn); });
+        b.Append(b.Case(s, {ir::Switch::CaseSelector{b.Constant(2_i)}}), [&] { b.Return(fn); });
 
         b.Call(ty.void_(), fn_a);
         b.Return(fn);
@@ -1972,29 +1972,29 @@
         v2->SetInitializer(b.Constant(24_i));
 
         auto s1 = b.Switch(b.Load(v1));
-        b.Append(b.Case(s1, {Switch::CaseSelector{b.Constant(0_i)}}), [&] {
+        b.Append(b.Case(s1, {ir::Switch::CaseSelector{b.Constant(0_i)}}), [&] {
             b.Call(ty.void_(), fn_a);
             b.ExitSwitch(s1);
         });
         b.Append(b.Case(s1,
                         {
-                            Switch::CaseSelector{b.Constant(1_i)},
-                            Switch::CaseSelector{},
+                            ir::Switch::CaseSelector{b.Constant(1_i)},
+                            ir::Switch::CaseSelector{},
                         }),
                  [&] {
                      auto s2 = b.Switch(b.Load(v2));
-                     b.Append(b.Case(s2, {Switch::CaseSelector{b.Constant(0_i)}}),
+                     b.Append(b.Case(s2, {ir::Switch::CaseSelector{b.Constant(0_i)}}),
                               [&] { b.ExitSwitch(s2); });
                      b.Append(b.Case(s2,
                                      {
-                                         Switch::CaseSelector{b.Constant(1_i)},
-                                         Switch::CaseSelector{},
+                                         ir::Switch::CaseSelector{b.Constant(1_i)},
+                                         ir::Switch::CaseSelector{},
                                      }),
                               [&] { b.Return(fn); });
 
                      b.ExitSwitch(s1);
                  });
-        b.Append(b.Case(s1, {Switch::CaseSelector{b.Constant(2_i)}}), [&] {
+        b.Append(b.Case(s1, {ir::Switch::CaseSelector{b.Constant(2_i)}}), [&] {
             b.Call(ty.void_(), fn_c);
             b.ExitSwitch(s1);
         });
@@ -2724,4 +2724,4 @@
 }
 
 }  // namespace
-}  // namespace tint::ir::test
+}  // namespace tint::wgsl::writer
diff --git a/src/tint/lang/core/ir/to_program_test.h b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.h
similarity index 84%
rename from src/tint/lang/core/ir/to_program_test.h
rename to src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.h
index d99a5d3..d6f4e0a 100644
--- a/src/tint/lang/core/ir/to_program_test.h
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.h
@@ -12,21 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
-#define SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
+#ifndef SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_TEST_H_
+#define SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_TEST_H_
 
 #include <string>
 
 #include "src/tint/lang/core/ir/ir_test_helper.h"
 
-#if !TINT_BUILD_WGSL_WRITER
-#error "to_program_test.h requires the WGSL writer to be enabled"
-#endif
-
-namespace tint::ir::test {
+namespace tint::wgsl::writer {
 
 /// Class used for IR to Program tests
-class IRToProgramTest : public IRTestHelper {
+class IRToProgramTest : public ir::IRTestHelper {
   public:
     /// The result of Run()
     struct Result {
@@ -58,6 +54,6 @@
         }                                                                 \
     } while (false)
 
-}  // namespace tint::ir::test
+}  // namespace tint::wgsl::writer
 
-#endif  // SRC_TINT_LANG_CORE_IR_TO_PROGRAM_TEST_H_
+#endif  // SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_IR_TO_PROGRAM_TEST_H_
diff --git a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
similarity index 91%
rename from src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc
rename to src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
index de0012a..d5b57f1 100644
--- a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.cc
@@ -22,12 +22,12 @@
 #include "src/tint/lang/core/ir/loop.h"
 #include "src/tint/lang/core/ir/module.h"
 #include "src/tint/lang/core/ir/multi_in_block.h"
-#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
 #include "src/tint/lang/core/ir/var.h"
 #include "src/tint/lang/core/type/matrix.h"
 #include "src/tint/lang/core/type/scalar.h"
 #include "src/tint/lang/core/type/struct.h"
 #include "src/tint/lang/core/type/vector.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h"
 #include "src/tint/utils/containers/hashset.h"
 #include "src/tint/utils/containers/reverse.h"
 #include "src/tint/utils/containers/scope_stack.h"
@@ -35,15 +35,15 @@
 #include "src/tint/utils/rtti/switch.h"
 #include "src/tint/utils/text/string.h"
 
-TINT_INSTANTIATE_TYPEINFO(tint::ir::transform::RenameConflictsWGSL);
+TINT_INSTANTIATE_TYPEINFO(tint::wgsl::writer::RenameConflicts);
 
-namespace tint::ir::transform {
+namespace tint::wgsl::writer {
 
 /// PIMPL state for the transform, for a single function.
-struct RenameConflictsWGSL::State {
+struct RenameConflicts::State {
     /// Constructor
     /// @param i the IR module
-    explicit State(Module* i) : ir(i) {}
+    explicit State(ir::Module* i) : ir(i) {}
 
     /// Processes the module, renaming all declarations that would prevent an identifier resolving
     /// to the correct declaration.
@@ -80,7 +80,7 @@
     using Scope = utils::Hashmap<std::string_view, CastableBase*, 8>;
 
     /// The IR module.
-    Module* ir = nullptr;
+    ir::Module* ir = nullptr;
 
     /// Stack of scopes
     utils::Vector<Scope, 8> scopes{};
@@ -118,7 +118,7 @@
     }
 
     /// Processes the instructions of the block
-    void Process(Block* block) {
+    void Process(ir::Block* block) {
         for (auto* inst : *block) {
             Process(inst);
         }
@@ -126,7 +126,7 @@
 
     /// Processes an instruction, ensuring that all identifier references resolve to the correct
     /// declaration. This may involve renaming of declarations in the outer scopes.
-    void Process(Instruction* inst) {
+    void Process(ir::Instruction* inst) {
         // Check resolving of operands
         for (auto* operand : inst->Operands()) {
             if (operand) {
@@ -135,7 +135,7 @@
                     EnsureResolvesTo(symbol.NameView(), operand);
                 }
                 // If the operand is a constant, then ensure that type name can be resolved.
-                if (auto* c = operand->As<Constant>()) {
+                if (auto* c = operand->As<ir::Constant>()) {
                     EnsureResolvable(c->Type());
                 }
             }
@@ -143,7 +143,7 @@
 
         Switch(
             inst,  //
-            [&](Loop* loop) {
+            [&](ir::Loop* loop) {
                 // Initializer's scope encompasses the body and continuing
                 scopes.Push(Scope{});
                 TINT_DEFER(scopes.Pop());
@@ -160,23 +160,23 @@
                     }
                 }
             },
-            [&](ControlInstruction* ctrl) {
+            [&](ir::ControlInstruction* ctrl) {
                 // Traverse into the control instruction's blocks
-                ctrl->ForeachBlock([&](Block* block) {
+                ctrl->ForeachBlock([&](ir::Block* block) {
                     scopes.Push(Scope{});
                     TINT_DEFER(scopes.Pop());
                     Process(block);
                 });
             },
-            [&](Var*) {
+            [&](ir::Var*) {
                 // Ensure the var's type is resolvable
                 EnsureResolvable(inst->Result()->Type());
             },
-            [&](Construct*) {
+            [&](ir::Construct*) {
                 // Ensure the type of a type constructor is resolvable
                 EnsureResolvable(inst->Result()->Type());
             },
-            [&](CoreBuiltinCall* call) {
+            [&](ir::CoreBuiltinCall* call) {
                 // Ensure builtin of a builtin call is resolvable
                 auto name = utils::ToString(call->Func());
                 EnsureResolvesTo(name, nullptr);
@@ -274,11 +274,11 @@
     }
 };
 
-RenameConflictsWGSL::RenameConflictsWGSL() = default;
-RenameConflictsWGSL::~RenameConflictsWGSL() = default;
+RenameConflicts::RenameConflicts() = default;
+RenameConflicts::~RenameConflicts() = default;
 
-void RenameConflictsWGSL::Run(Module* ir) const {
+void RenameConflicts::Run(ir::Module* ir) const {
     State{ir}.Process();
 }
 
-}  // namespace tint::ir::transform
+}  // namespace tint::wgsl::writer
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h
new file mode 100644
index 0000000..2033dde
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h
@@ -0,0 +1,41 @@
+// Copyright 2023 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_RENAME_CONFLICTS_H_
+#define SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_RENAME_CONFLICTS_H_
+
+#include "src/tint/lang/core/ir/transform/transform.h"
+
+namespace tint::wgsl::writer {
+
+/// RenameConflicts is a transform that renames declarations which prevent identifiers from
+/// resolving to the correct declaration, and those with identical identifiers declared in the same
+/// scope.
+class RenameConflicts final : public utils::Castable<RenameConflicts, ir::transform::Transform> {
+  public:
+    /// Constructor
+    RenameConflicts();
+    /// Destructor
+    ~RenameConflicts() override;
+
+    /// @copydoc ir::transform::Transform::Run
+    void Run(ir::Module* module) const override;
+
+  private:
+    struct State;
+};
+
+}  // namespace tint::wgsl::writer
+
+#endif  // SRC_TINT_LANG_WGSL_WRITER_IR_TO_PROGRAM_RENAME_CONFLICTS_H_
diff --git a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
similarity index 83%
rename from src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
rename to src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
index 32dd8bf..95279ae 100644
--- a/src/tint/lang/core/ir/transform/rename_conflicts_wgsl_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
@@ -12,22 +12,59 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/tint/lang/core/ir/transform/rename_conflicts_wgsl.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h"
 
+#include <string>
 #include <utility>
 
-#include "src/tint/lang/core/ir/transform/test_helper.h"
+#include "gtest/gtest.h"
+#include "src/tint/lang/core/ir/builder.h"
+#include "src/tint/lang/core/ir/validator.h"
 #include "src/tint/lang/core/type/matrix.h"
 
-namespace tint::ir::transform {
+namespace tint::wgsl::writer {
 namespace {
 
 using namespace tint::builtin::fluent_types;  // NOLINT
 using namespace tint::number_suffixes;        // NOLINT
 
-using IR_RenameConflictsWGSLTest = TransformTest;
+class IRToProgramRenameConflictsTest : public testing::Test {
+  public:
+    /// Transforms the module, using the transforms `TRANSFORMS`.
+    void Run() {
+        // Validate the input IR.
+        {
+            auto res = ir::Validate(mod);
+            EXPECT_TRUE(res) << res.Failure().str();
+            if (!res) {
+                return;
+            }
+        }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_SingleNamedRootBlockVar) {
+        // Run the transforms.
+        RenameConflicts{}.Run(&mod);
+
+        // Validate the output IR.
+        auto res = ir::Validate(mod);
+        EXPECT_TRUE(res) << res.Failure().str();
+    }
+
+    /// @returns the transformed module as a disassembled string
+    std::string str() {
+        ir::Disassembler dis(mod);
+        return "\n" + dis.Disassemble();
+    }
+
+  protected:
+    /// The test IR module.
+    ir::Module mod;
+    /// The test IR builder.
+    ir::Builder b{mod};
+    /// The type manager.
+    type::Manager& ty{mod.Types()};
+};
+
+TEST_F(IRToProgramRenameConflictsTest, NoModify_SingleNamedRootBlockVar) {
     b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
 
     auto* src = R"(
@@ -40,12 +77,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_TwoRootBlockVarsWithSameName) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_TwoRootBlockVarsWithSameName) {
     b.Append(b.RootBlock(), [&] {
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v");
         b.ir.SetName(b.Var(ty.ptr<private_, u32>()), "v");
@@ -68,12 +105,12 @@
 
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVarAndStructWithSameName) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_RootBlockVarAndStructWithSameName) {
     auto* s = ty.Struct(b.ir.symbols.New("v"), {{b.ir.symbols.New("x"), ty.i32()}});
     b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr(function, s)), "v"); });
 
@@ -100,12 +137,12 @@
 
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVarAndFnWithSameName) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_RootBlockVarAndFnWithSameName) {
     b.Append(b.RootBlock(), [&] { b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "v"); });
 
     auto* fn = b.Function("v", ty.void_());
@@ -136,12 +173,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_RootBlockVar_ShadowedBy_FnVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_RootBlockVar_ShadowedBy_FnVar) {
     b.Append(b.RootBlock(), [&] {
         auto* outer = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(outer, "v");
@@ -177,12 +214,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_RootBlockVar_ShadowedBy_FnVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_RootBlockVar_ShadowedBy_FnVar) {
     b.Append(b.RootBlock(), [&] {
         auto* outer = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(outer, "v");
@@ -231,12 +268,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_FnVar_ShadowedBy_IfVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_FnVar_ShadowedBy_IfVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* outer = b.Var(ty.ptr<function, f32>());
@@ -277,12 +314,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_FnVar_ShadowedBy_IfVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_FnVar_ShadowedBy_IfVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* outer = b.Var(ty.ptr<function, f32>());
@@ -338,12 +375,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_LoopInitVar_ShadowedBy_LoopBodyVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_LoopInitVar_ShadowedBy_LoopBodyVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
@@ -390,12 +427,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_LoopInitVar_ShadowedBy_LoopBodyVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_LoopInitVar_ShadowedBy_LoopBodyVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
@@ -460,12 +497,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_LoopBodyVar_ShadowedBy_LoopContVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_LoopBodyVar_ShadowedBy_LoopContVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
@@ -516,12 +553,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_LoopBodyVar_ShadowedBy_LoopContVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_LoopBodyVar_ShadowedBy_LoopContVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* loop = b.Loop();
@@ -593,12 +630,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinScalar_ShadowedBy_Param) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinScalar_ShadowedBy_Param) {
     auto* fn = b.Function("f", ty.void_());
     auto* p = b.FunctionParam(ty.i32());
     b.ir.SetName(p, "i32");
@@ -628,12 +665,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinVector_ShadowedBy_Param) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinVector_ShadowedBy_Param) {
     auto* fn = b.Function("f", ty.void_());
     auto* p = b.FunctionParam(ty.i32());
     b.ir.SetName(p, "vec2");
@@ -656,12 +693,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinVector_ShadowedBy_Param) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinVector_ShadowedBy_Param) {
     auto* fn = b.Function("f", ty.void_());
     auto* p = b.FunctionParam(ty.i32());
     b.ir.SetName(p, "vec3");
@@ -691,12 +728,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinMatrix_ShadowedBy_Param) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinMatrix_ShadowedBy_Param) {
     auto* fn = b.Function("f", ty.void_());
     auto* p = b.FunctionParam(ty.i32());
     b.ir.SetName(p, "mat3x2");
@@ -719,12 +756,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinMatrix_ShadowedBy_Param) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinMatrix_ShadowedBy_Param) {
     auto* fn = b.Function("f", ty.void_());
     auto* p = b.FunctionParam(ty.i32());
     b.ir.SetName(p, "mat2x4");
@@ -754,12 +791,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinScalar_ShadowedBy_FnVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinScalar_ShadowedBy_FnVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* v = b.Var(ty.ptr<function, i32>());
@@ -781,12 +818,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinScalar_ShadowedBy_FnVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinScalar_ShadowedBy_FnVar) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* v = b.Var(ty.ptr<function, i32>());
@@ -816,12 +853,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinScalar_ShadowedBy_NamedInst) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinScalar_ShadowedBy_NamedInst) {
     auto* fn = b.Function("f", ty.i32());
     b.Append(fn->Block(), [&] {
         auto* i = b.Add(ty.i32(), 1_i, 2_i);
@@ -842,12 +879,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinScalar_ShadowedBy_NamedInst) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinScalar_ShadowedBy_NamedInst) {
     auto* fn = b.Function("f", ty.f32());
     b.Append(fn->Block(), [&] {
         auto* i = b.Add(ty.i32(), 1_i, 2_i);
@@ -877,12 +914,12 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "function");
     });
@@ -897,12 +934,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinAddressSpace_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "private");
     });
@@ -922,12 +959,12 @@
 
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinAccess_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinAccess_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "read");
     });
@@ -942,12 +979,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinAccess_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinAccess_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         b.ir.SetName(b.Var(ty.ptr<private_, i32>()), "read_write");
     });
@@ -967,12 +1004,12 @@
 
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, NoModify_BuiltinFn_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, NoModify_BuiltinFn_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         auto* v = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(v, "min");
@@ -1000,12 +1037,12 @@
 
     auto* expect = src;
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
-TEST_F(IR_RenameConflictsWGSLTest, Conflict_BuiltinFn_ShadowedBy_RootBlockVar) {
+TEST_F(IRToProgramRenameConflictsTest, Conflict_BuiltinFn_ShadowedBy_RootBlockVar) {
     b.Append(b.RootBlock(), [&] {  //
         auto* v = b.Var(ty.ptr<private_, i32>());
         b.ir.SetName(v, "max");
@@ -1044,10 +1081,10 @@
 }
 )";
 
-    Run<RenameConflictsWGSL>();
+    Run();
 
     EXPECT_EQ(expect, str());
 }
 
 }  // namespace
-}  // namespace tint::ir::transform
+}  // namespace tint::wgsl::writer
