Move benchmark files into cmd/bench.

The benchmark files all depend on the WGSL reader. To fixup layering
validation errors, move the benchmark files into the `cmd/bench` folder.

Change-Id: If1c626cabecea178cdce1424a65878ae25c30b46
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/236396
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: James Price <jrprice@google.com>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/cmd/bench/BUILD.bazel b/src/tint/cmd/bench/BUILD.bazel
index 3b45b10..816c8a6 100644
--- a/src/tint/cmd/bench/BUILD.bazel
+++ b/src/tint/cmd/bench/BUILD.bazel
@@ -40,8 +40,20 @@
   name = "bench",
   alwayslink = True,
   srcs = [
+    "access_bench.cc",
+    "address_space_bench.cc",
+    "attribute_bench.cc",
     "bench.cc",
     "bench.h",
+    "builtin_type_bench.cc",
+    "builtin_value_bench.cc",
+    "diagnostic_rule_bench.cc",
+    "diagnostic_severity_bench.cc",
+    "extension_bench.cc",
+    "interpolation_sampling_bench.cc",
+    "interpolation_type_bench.cc",
+    "texel_format_bench.cc",
+    "validator_bench.cc",
   ],
   deps = [
     "//src/tint/api/common",
@@ -83,12 +95,10 @@
     "//src/tint/lang/core",
     "//src/tint/lang/core/constant",
     "//src/tint/lang/core/type",
-    "//src/tint/lang/core:bench",
     "//src/tint/lang/wgsl",
     "//src/tint/lang/wgsl/ast",
     "//src/tint/lang/wgsl/program",
     "//src/tint/lang/wgsl/sem",
-    "//src/tint/lang/wgsl:bench",
     "//src/tint/utils",
     "//src/tint/utils/containers",
     "//src/tint/utils/diagnostic",
@@ -104,34 +114,32 @@
     "//src/utils",
   ] + select({
     ":tint_build_glsl_writer_and_tint_build_wgsl_reader": [
-      "//src/tint/lang/glsl/writer:bench",
+      "//src/tint/cmd/bench/glsl:bench",
     ],
     "//conditions:default": [],
   }) + select({
     ":tint_build_hlsl_writer_and_tint_build_wgsl_reader": [
-      "//src/tint/lang/hlsl/writer:bench",
+      "//src/tint/cmd/bench/hlsl:bench",
     ],
     "//conditions:default": [],
   }) + select({
     ":tint_build_msl_writer_and_tint_build_wgsl_reader": [
-      "//src/tint/lang/msl/writer:bench",
+      "//src/tint/cmd/bench/msl:bench",
     ],
     "//conditions:default": [],
   }) + select({
     ":tint_build_spv_writer_and_tint_build_wgsl_reader": [
-      "//src/tint/lang/spirv/writer:bench",
+      "//src/tint/cmd/bench/spirv:bench",
     ],
     "//conditions:default": [],
   }) + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/core/ir:bench",
-      "//src/tint/lang/wgsl/reader:bench",
     ],
     "//conditions:default": [],
   }) + select({
     ":tint_build_wgsl_writer_and_tint_build_wgsl_reader": [
-      "//src/tint/lang/wgsl/writer:bench",
+      "//src/tint/cmd/bench/wgsl:bench",
     ],
     "//conditions:default": [],
   }),
diff --git a/src/tint/cmd/bench/BUILD.cmake b/src/tint/cmd/bench/BUILD.cmake
index 668c5a9..4dc16d6 100644
--- a/src/tint/cmd/bench/BUILD.cmake
+++ b/src/tint/cmd/bench/BUILD.cmake
@@ -34,6 +34,12 @@
 #                       Do not modify this file directly
 ################################################################################
 
+include(cmd/bench/glsl/BUILD.cmake)
+include(cmd/bench/hlsl/BUILD.cmake)
+include(cmd/bench/msl/BUILD.cmake)
+include(cmd/bench/spirv/BUILD.cmake)
+include(cmd/bench/wgsl/BUILD.cmake)
+
 if(TINT_BUILD_WGSL_READER)
 ################################################################################
 # Target:    tint_cmd_bench_bench_cmd
@@ -48,12 +54,10 @@
   tint_lang_core
   tint_lang_core_constant
   tint_lang_core_type
-  tint_lang_core_bench
   tint_lang_wgsl
   tint_lang_wgsl_ast
   tint_lang_wgsl_program
   tint_lang_wgsl_sem
-  tint_lang_wgsl_bench
   tint_utils
   tint_utils_containers
   tint_utils_diagnostic
@@ -74,39 +78,37 @@
 
 if(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
-    tint_lang_glsl_writer_bench
+    tint_cmd_bench_glsl_bench
   )
 endif(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
 
 if(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
-    tint_lang_hlsl_writer_bench
+    tint_cmd_bench_hlsl_bench
   )
 endif(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
 
 if(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
-    tint_lang_msl_writer_bench
+    tint_cmd_bench_msl_bench
   )
 endif(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
 
 if(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
-    tint_lang_spirv_writer_bench
+    tint_cmd_bench_spirv_bench
   )
 endif(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
 
 if(TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
     tint_cmd_bench_bench
-    tint_lang_core_ir_bench
-    tint_lang_wgsl_reader_bench
   )
 endif(TINT_BUILD_WGSL_READER)
 
 if(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
-    tint_lang_wgsl_writer_bench
+    tint_cmd_bench_wgsl_bench
   )
 endif(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
 
@@ -120,8 +122,20 @@
 # Condition: TINT_BUILD_WGSL_READER
 ################################################################################
 tint_add_target(tint_cmd_bench_bench bench
+  cmd/bench/access_bench.cc
+  cmd/bench/address_space_bench.cc
+  cmd/bench/attribute_bench.cc
   cmd/bench/bench.cc
   cmd/bench/bench.h
+  cmd/bench/builtin_type_bench.cc
+  cmd/bench/builtin_value_bench.cc
+  cmd/bench/diagnostic_rule_bench.cc
+  cmd/bench/diagnostic_severity_bench.cc
+  cmd/bench/extension_bench.cc
+  cmd/bench/interpolation_sampling_bench.cc
+  cmd/bench/interpolation_type_bench.cc
+  cmd/bench/texel_format_bench.cc
+  cmd/bench/validator_bench.cc
 )
 
 tint_target_add_dependencies(tint_cmd_bench_bench bench
diff --git a/src/tint/cmd/bench/BUILD.gn b/src/tint/cmd/bench/BUILD.gn
index 64152d7..35ca535 100644
--- a/src/tint/cmd/bench/BUILD.gn
+++ b/src/tint/cmd/bench/BUILD.gn
@@ -46,8 +46,20 @@
   if (tint_build_wgsl_reader) {
     tint_benchmarks_source_set("bench") {
       sources = [
+        "access_bench.cc",
+        "address_space_bench.cc",
+        "attribute_bench.cc",
         "bench.cc",
         "bench.h",
+        "builtin_type_bench.cc",
+        "builtin_value_bench.cc",
+        "diagnostic_rule_bench.cc",
+        "diagnostic_severity_bench.cc",
+        "extension_bench.cc",
+        "interpolation_sampling_bench.cc",
+        "interpolation_type_bench.cc",
+        "texel_format_bench.cc",
+        "validator_bench.cc",
       ]
       deps = [
         "${dawn_root}/src/utils:utils",
@@ -89,11 +101,9 @@
         "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core:bench",
         "${tint_src_dir}/lang/core/constant",
         "${tint_src_dir}/lang/core/type",
         "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl:bench",
         "${tint_src_dir}/lang/wgsl/ast",
         "${tint_src_dir}/lang/wgsl/program",
         "${tint_src_dir}/lang/wgsl/sem",
@@ -111,31 +121,27 @@
       ]
 
       if (tint_build_glsl_writer && tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/lang/glsl/writer:bench" ]
+        deps += [ "${tint_src_dir}/cmd/bench/glsl:bench" ]
       }
 
       if (tint_build_hlsl_writer && tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/lang/hlsl/writer:bench" ]
+        deps += [ "${tint_src_dir}/cmd/bench/hlsl:bench" ]
       }
 
       if (tint_build_msl_writer && tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/lang/msl/writer:bench" ]
+        deps += [ "${tint_src_dir}/cmd/bench/msl:bench" ]
       }
 
       if (tint_build_spv_writer && tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/lang/spirv/writer:bench" ]
+        deps += [ "${tint_src_dir}/cmd/bench/spirv:bench" ]
       }
 
       if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/core/ir:bench",
-          "${tint_src_dir}/lang/wgsl/reader:bench",
-        ]
+        deps += [ "${tint_src_dir}/cmd/bench:bench" ]
       }
 
       if (tint_build_wgsl_writer && tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/lang/wgsl/writer:bench" ]
+        deps += [ "${tint_src_dir}/cmd/bench/wgsl:bench" ]
       }
     }
   }
diff --git a/src/tint/lang/core/access_bench.cc b/src/tint/cmd/bench/access_bench.cc
similarity index 97%
rename from src/tint/lang/core/access_bench.cc
rename to src/tint/cmd/bench/access_bench.cc
index b711a4b..2ae747c 100644
--- a/src/tint/lang/core/access_bench.cc
+++ b/src/tint/cmd/bench/access_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/access_bench.cc.tmpl
+//   src/tint/cmd/bench/access_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/access_bench.cc.tmpl b/src/tint/cmd/bench/access_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/access_bench.cc.tmpl
rename to src/tint/cmd/bench/access_bench.cc.tmpl
diff --git a/src/tint/lang/core/address_space_bench.cc b/src/tint/cmd/bench/address_space_bench.cc
similarity index 98%
rename from src/tint/lang/core/address_space_bench.cc
rename to src/tint/cmd/bench/address_space_bench.cc
index bd55c1b..453733d 100644
--- a/src/tint/lang/core/address_space_bench.cc
+++ b/src/tint/cmd/bench/address_space_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/address_space_bench.cc.tmpl
+//   src/tint/cmd/bench/address_space_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/address_space_bench.cc.tmpl b/src/tint/cmd/bench/address_space_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/address_space_bench.cc.tmpl
rename to src/tint/cmd/bench/address_space_bench.cc.tmpl
diff --git a/src/tint/lang/core/attribute_bench.cc b/src/tint/cmd/bench/attribute_bench.cc
similarity index 98%
rename from src/tint/lang/core/attribute_bench.cc
rename to src/tint/cmd/bench/attribute_bench.cc
index 171390e..6180b02 100644
--- a/src/tint/lang/core/attribute_bench.cc
+++ b/src/tint/cmd/bench/attribute_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/attribute_bench.cc.tmpl
+//   src/tint/cmd/bench/attribute_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/attribute_bench.cc.tmpl b/src/tint/cmd/bench/attribute_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/attribute_bench.cc.tmpl
rename to src/tint/cmd/bench/attribute_bench.cc.tmpl
diff --git a/src/tint/lang/core/builtin_type_bench.cc b/src/tint/cmd/bench/builtin_type_bench.cc
similarity index 99%
rename from src/tint/lang/core/builtin_type_bench.cc
rename to src/tint/cmd/bench/builtin_type_bench.cc
index e74bdec..129bdde 100644
--- a/src/tint/lang/core/builtin_type_bench.cc
+++ b/src/tint/cmd/bench/builtin_type_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/builtin_type_bench.cc.tmpl
+//   src/tint/cmd/bench/builtin_type_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/builtin_type_bench.cc.tmpl b/src/tint/cmd/bench/builtin_type_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/builtin_type_bench.cc.tmpl
rename to src/tint/cmd/bench/builtin_type_bench.cc.tmpl
diff --git a/src/tint/lang/core/builtin_value_bench.cc b/src/tint/cmd/bench/builtin_value_bench.cc
similarity index 98%
rename from src/tint/lang/core/builtin_value_bench.cc
rename to src/tint/cmd/bench/builtin_value_bench.cc
index e8dbcad..66f967e 100644
--- a/src/tint/lang/core/builtin_value_bench.cc
+++ b/src/tint/cmd/bench/builtin_value_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/builtin_value_bench.cc.tmpl
+//   src/tint/cmd/bench/builtin_value_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/builtin_value_bench.cc.tmpl b/src/tint/cmd/bench/builtin_value_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/builtin_value_bench.cc.tmpl
rename to src/tint/cmd/bench/builtin_value_bench.cc.tmpl
diff --git a/src/tint/lang/wgsl/diagnostic_rule_bench.cc b/src/tint/cmd/bench/diagnostic_rule_bench.cc
similarity index 98%
rename from src/tint/lang/wgsl/diagnostic_rule_bench.cc
rename to src/tint/cmd/bench/diagnostic_rule_bench.cc
index 7614d2c..edb08ec 100644
--- a/src/tint/lang/wgsl/diagnostic_rule_bench.cc
+++ b/src/tint/cmd/bench/diagnostic_rule_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/wgsl/diagnostic_rule_bench.cc.tmpl
+//   src/tint/cmd/bench/diagnostic_rule_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/wgsl/diagnostic_rule_bench.cc.tmpl b/src/tint/cmd/bench/diagnostic_rule_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/wgsl/diagnostic_rule_bench.cc.tmpl
rename to src/tint/cmd/bench/diagnostic_rule_bench.cc.tmpl
diff --git a/src/tint/lang/wgsl/diagnostic_severity_bench.cc b/src/tint/cmd/bench/diagnostic_severity_bench.cc
similarity index 97%
rename from src/tint/lang/wgsl/diagnostic_severity_bench.cc
rename to src/tint/cmd/bench/diagnostic_severity_bench.cc
index 4de0749..87d88ba 100644
--- a/src/tint/lang/wgsl/diagnostic_severity_bench.cc
+++ b/src/tint/cmd/bench/diagnostic_severity_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/wgsl/diagnostic_severity_bench.cc.tmpl
+//   src/tint/cmd/bench/diagnostic_severity_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/wgsl/diagnostic_severity_bench.cc.tmpl b/src/tint/cmd/bench/diagnostic_severity_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/wgsl/diagnostic_severity_bench.cc.tmpl
rename to src/tint/cmd/bench/diagnostic_severity_bench.cc.tmpl
diff --git a/src/tint/lang/wgsl/extension_bench.cc b/src/tint/cmd/bench/extension_bench.cc
similarity index 98%
rename from src/tint/lang/wgsl/extension_bench.cc
rename to src/tint/cmd/bench/extension_bench.cc
index 4f0e5e7..e6d1256 100644
--- a/src/tint/lang/wgsl/extension_bench.cc
+++ b/src/tint/cmd/bench/extension_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/wgsl/extension_bench.cc.tmpl
+//   src/tint/cmd/bench/extension_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/wgsl/extension_bench.cc.tmpl b/src/tint/cmd/bench/extension_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/wgsl/extension_bench.cc.tmpl
rename to src/tint/cmd/bench/extension_bench.cc.tmpl
diff --git a/src/tint/cmd/bench/glsl/BUILD.bazel b/src/tint/cmd/bench/glsl/BUILD.bazel
new file mode 100644
index 0000000..5a1143e
--- /dev/null
+++ b/src/tint/cmd/bench/glsl/BUILD.bazel
@@ -0,0 +1,105 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "bench",
+  alwayslink = True,
+  srcs = [
+    "writer_bench.cc",
+  ],
+  deps = [
+    "//src/tint/api/common",
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/ir",
+    "//src/tint/lang/core/ir/transform",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/wgsl",
+    "//src/tint/lang/wgsl/ast",
+    "//src/tint/lang/wgsl/ast/transform",
+    "//src/tint/lang/wgsl/inspector",
+    "//src/tint/lang/wgsl/program",
+    "//src/tint/lang/wgsl/sem",
+    "//src/tint/utils",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "@benchmark",
+    "//src/utils",
+  ] + select({
+    ":tint_build_glsl_writer": [
+      "//src/tint/lang/glsl/writer",
+      "//src/tint/lang/glsl/writer/common",
+      "//src/tint/lang/glsl/writer/helpers",
+    ],
+    "//conditions:default": [],
+  }) + select({
+    ":tint_build_wgsl_reader": [
+      "//src/tint/cmd/bench:bench",
+      "//src/tint/lang/wgsl/reader",
+    ],
+    "//conditions:default": [],
+  }),
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
+alias(
+  name = "tint_build_glsl_writer",
+  actual = "//src/tint:tint_build_glsl_writer_true",
+)
+
+alias(
+  name = "tint_build_wgsl_reader",
+  actual = "//src/tint:tint_build_wgsl_reader_true",
+)
+
+selects.config_setting_group(
+    name = "tint_build_glsl_writer_and_tint_build_wgsl_reader",
+    match_all = [
+        ":tint_build_glsl_writer",
+        ":tint_build_wgsl_reader",
+    ],
+)
+
diff --git a/src/tint/cmd/bench/glsl/BUILD.cfg b/src/tint/cmd/bench/glsl/BUILD.cfg
new file mode 100644
index 0000000..e6acff1
--- /dev/null
+++ b/src/tint/cmd/bench/glsl/BUILD.cfg
@@ -0,0 +1,3 @@
+{
+    "Condition": "tint_build_glsl_writer && tint_build_wgsl_reader",
+}
diff --git a/src/tint/cmd/bench/glsl/BUILD.cmake b/src/tint/cmd/bench/glsl/BUILD.cmake
new file mode 100644
index 0000000..e09afa0
--- /dev/null
+++ b/src/tint/cmd/bench/glsl/BUILD.cmake
@@ -0,0 +1,92 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+if(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
+################################################################################
+# Target:    tint_cmd_bench_glsl_bench
+# Kind:      bench
+# Condition: TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER
+################################################################################
+tint_add_target(tint_cmd_bench_glsl_bench bench
+  cmd/bench/glsl/writer_bench.cc
+)
+
+tint_target_add_dependencies(tint_cmd_bench_glsl_bench bench
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_ir
+  tint_lang_core_ir_transform
+  tint_lang_core_type
+  tint_lang_wgsl
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_cmd_bench_glsl_bench bench
+  "google-benchmark"
+  "src_utils"
+)
+
+if(TINT_BUILD_GLSL_WRITER)
+  tint_target_add_dependencies(tint_cmd_bench_glsl_bench bench
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_common
+    tint_lang_glsl_writer_helpers
+  )
+endif(TINT_BUILD_GLSL_WRITER)
+
+if(TINT_BUILD_WGSL_READER)
+  tint_target_add_dependencies(tint_cmd_bench_glsl_bench bench
+    tint_cmd_bench_bench
+    tint_lang_wgsl_reader
+  )
+endif(TINT_BUILD_WGSL_READER)
+
+endif(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/cmd/bench/glsl/BUILD.gn b/src/tint/cmd/bench/glsl/BUILD.gn
new file mode 100644
index 0000000..76a10c6
--- /dev/null
+++ b/src/tint/cmd/bench/glsl/BUILD.gn
@@ -0,0 +1,92 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests || tint_build_benchmarks) {
+  import("//testing/test.gni")
+}
+if (tint_build_benchmarks) {
+  if (tint_build_glsl_writer && tint_build_wgsl_reader) {
+    tint_benchmarks_source_set("bench") {
+      sources = [ "writer_bench.cc" ]
+      deps = [
+        "${dawn_root}/src/utils:utils",
+        "${tint_src_dir}:google_benchmark",
+        "${tint_src_dir}/api/common",
+        "${tint_src_dir}/lang/core",
+        "${tint_src_dir}/lang/core/constant",
+        "${tint_src_dir}/lang/core/ir",
+        "${tint_src_dir}/lang/core/ir/transform",
+        "${tint_src_dir}/lang/core/type",
+        "${tint_src_dir}/lang/wgsl",
+        "${tint_src_dir}/lang/wgsl/ast",
+        "${tint_src_dir}/lang/wgsl/ast/transform",
+        "${tint_src_dir}/lang/wgsl/inspector",
+        "${tint_src_dir}/lang/wgsl/program",
+        "${tint_src_dir}/lang/wgsl/sem",
+        "${tint_src_dir}/utils",
+        "${tint_src_dir}/utils/containers",
+        "${tint_src_dir}/utils/diagnostic",
+        "${tint_src_dir}/utils/ice",
+        "${tint_src_dir}/utils/macros",
+        "${tint_src_dir}/utils/math",
+        "${tint_src_dir}/utils/memory",
+        "${tint_src_dir}/utils/rtti",
+        "${tint_src_dir}/utils/symbol",
+        "${tint_src_dir}/utils/text",
+      ]
+
+      if (tint_build_glsl_writer) {
+        deps += [
+          "${tint_src_dir}/lang/glsl/writer",
+          "${tint_src_dir}/lang/glsl/writer/common",
+          "${tint_src_dir}/lang/glsl/writer/helpers",
+        ]
+      }
+
+      if (tint_build_wgsl_reader) {
+        deps += [
+          "${tint_src_dir}/cmd/bench:bench",
+          "${tint_src_dir}/lang/wgsl/reader",
+        ]
+      }
+    }
+  }
+}
diff --git a/src/tint/lang/glsl/writer/writer_bench.cc b/src/tint/cmd/bench/glsl/writer_bench.cc
similarity index 100%
rename from src/tint/lang/glsl/writer/writer_bench.cc
rename to src/tint/cmd/bench/glsl/writer_bench.cc
diff --git a/src/tint/cmd/bench/hlsl/BUILD.bazel b/src/tint/cmd/bench/hlsl/BUILD.bazel
new file mode 100644
index 0000000..80250e6
--- /dev/null
+++ b/src/tint/cmd/bench/hlsl/BUILD.bazel
@@ -0,0 +1,102 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "bench",
+  alwayslink = True,
+  srcs = [
+    "writer_bench.cc",
+  ],
+  deps = [
+    "//src/tint/api/common",
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/ir",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/hlsl/writer/common",
+    "//src/tint/lang/hlsl/writer/helpers",
+    "//src/tint/lang/wgsl",
+    "//src/tint/lang/wgsl/ast",
+    "//src/tint/lang/wgsl/program",
+    "//src/tint/lang/wgsl/sem",
+    "//src/tint/utils",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "@benchmark",
+    "//src/utils",
+  ] + select({
+    ":tint_build_hlsl_writer": [
+      "//src/tint/lang/hlsl/writer",
+    ],
+    "//conditions:default": [],
+  }) + select({
+    ":tint_build_wgsl_reader": [
+      "//src/tint/cmd/bench:bench",
+      "//src/tint/lang/wgsl/reader",
+    ],
+    "//conditions:default": [],
+  }),
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
+alias(
+  name = "tint_build_hlsl_writer",
+  actual = "//src/tint:tint_build_hlsl_writer_true",
+)
+
+alias(
+  name = "tint_build_wgsl_reader",
+  actual = "//src/tint:tint_build_wgsl_reader_true",
+)
+
+selects.config_setting_group(
+    name = "tint_build_hlsl_writer_and_tint_build_wgsl_reader",
+    match_all = [
+        ":tint_build_hlsl_writer",
+        ":tint_build_wgsl_reader",
+    ],
+)
+
diff --git a/src/tint/cmd/bench/hlsl/BUILD.cfg b/src/tint/cmd/bench/hlsl/BUILD.cfg
new file mode 100644
index 0000000..97fd0d1
--- /dev/null
+++ b/src/tint/cmd/bench/hlsl/BUILD.cfg
@@ -0,0 +1,3 @@
+{
+    "Condition": "tint_build_hlsl_writer && tint_build_wgsl_reader",
+}
diff --git a/src/tint/cmd/bench/hlsl/BUILD.cmake b/src/tint/cmd/bench/hlsl/BUILD.cmake
new file mode 100644
index 0000000..155227f
--- /dev/null
+++ b/src/tint/cmd/bench/hlsl/BUILD.cmake
@@ -0,0 +1,89 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+if(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
+################################################################################
+# Target:    tint_cmd_bench_hlsl_bench
+# Kind:      bench
+# Condition: TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER
+################################################################################
+tint_add_target(tint_cmd_bench_hlsl_bench bench
+  cmd/bench/hlsl/writer_bench.cc
+)
+
+tint_target_add_dependencies(tint_cmd_bench_hlsl_bench bench
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_ir
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_hlsl_writer_helpers
+  tint_lang_wgsl
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_cmd_bench_hlsl_bench bench
+  "google-benchmark"
+  "src_utils"
+)
+
+if(TINT_BUILD_HLSL_WRITER)
+  tint_target_add_dependencies(tint_cmd_bench_hlsl_bench bench
+    tint_lang_hlsl_writer
+  )
+endif(TINT_BUILD_HLSL_WRITER)
+
+if(TINT_BUILD_WGSL_READER)
+  tint_target_add_dependencies(tint_cmd_bench_hlsl_bench bench
+    tint_cmd_bench_bench
+    tint_lang_wgsl_reader
+  )
+endif(TINT_BUILD_WGSL_READER)
+
+endif(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/cmd/bench/hlsl/BUILD.gn b/src/tint/cmd/bench/hlsl/BUILD.gn
new file mode 100644
index 0000000..88cf31e
--- /dev/null
+++ b/src/tint/cmd/bench/hlsl/BUILD.gn
@@ -0,0 +1,87 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests || tint_build_benchmarks) {
+  import("//testing/test.gni")
+}
+if (tint_build_benchmarks) {
+  if (tint_build_hlsl_writer && tint_build_wgsl_reader) {
+    tint_benchmarks_source_set("bench") {
+      sources = [ "writer_bench.cc" ]
+      deps = [
+        "${dawn_root}/src/utils:utils",
+        "${tint_src_dir}:google_benchmark",
+        "${tint_src_dir}/api/common",
+        "${tint_src_dir}/lang/core",
+        "${tint_src_dir}/lang/core/constant",
+        "${tint_src_dir}/lang/core/ir",
+        "${tint_src_dir}/lang/core/type",
+        "${tint_src_dir}/lang/hlsl/writer/common",
+        "${tint_src_dir}/lang/hlsl/writer/helpers",
+        "${tint_src_dir}/lang/wgsl",
+        "${tint_src_dir}/lang/wgsl/ast",
+        "${tint_src_dir}/lang/wgsl/program",
+        "${tint_src_dir}/lang/wgsl/sem",
+        "${tint_src_dir}/utils",
+        "${tint_src_dir}/utils/containers",
+        "${tint_src_dir}/utils/diagnostic",
+        "${tint_src_dir}/utils/ice",
+        "${tint_src_dir}/utils/macros",
+        "${tint_src_dir}/utils/math",
+        "${tint_src_dir}/utils/memory",
+        "${tint_src_dir}/utils/rtti",
+        "${tint_src_dir}/utils/symbol",
+        "${tint_src_dir}/utils/text",
+      ]
+
+      if (tint_build_hlsl_writer) {
+        deps += [ "${tint_src_dir}/lang/hlsl/writer" ]
+      }
+
+      if (tint_build_wgsl_reader) {
+        deps += [
+          "${tint_src_dir}/cmd/bench:bench",
+          "${tint_src_dir}/lang/wgsl/reader",
+        ]
+      }
+    }
+  }
+}
diff --git a/src/tint/lang/hlsl/writer/writer_bench.cc b/src/tint/cmd/bench/hlsl/writer_bench.cc
similarity index 100%
rename from src/tint/lang/hlsl/writer/writer_bench.cc
rename to src/tint/cmd/bench/hlsl/writer_bench.cc
diff --git a/src/tint/lang/core/interpolation_sampling_bench.cc b/src/tint/cmd/bench/interpolation_sampling_bench.cc
similarity index 97%
rename from src/tint/lang/core/interpolation_sampling_bench.cc
rename to src/tint/cmd/bench/interpolation_sampling_bench.cc
index 460a150..90a0153 100644
--- a/src/tint/lang/core/interpolation_sampling_bench.cc
+++ b/src/tint/cmd/bench/interpolation_sampling_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/interpolation_sampling_bench.cc.tmpl
+//   src/tint/cmd/bench/interpolation_sampling_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/interpolation_sampling_bench.cc.tmpl b/src/tint/cmd/bench/interpolation_sampling_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/interpolation_sampling_bench.cc.tmpl
rename to src/tint/cmd/bench/interpolation_sampling_bench.cc.tmpl
diff --git a/src/tint/lang/core/interpolation_type_bench.cc b/src/tint/cmd/bench/interpolation_type_bench.cc
similarity index 97%
rename from src/tint/lang/core/interpolation_type_bench.cc
rename to src/tint/cmd/bench/interpolation_type_bench.cc
index 4fcd9c6..a39127e 100644
--- a/src/tint/lang/core/interpolation_type_bench.cc
+++ b/src/tint/cmd/bench/interpolation_type_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/interpolation_type_bench.cc.tmpl
+//   src/tint/cmd/bench/interpolation_type_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/interpolation_type_bench.cc.tmpl b/src/tint/cmd/bench/interpolation_type_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/interpolation_type_bench.cc.tmpl
rename to src/tint/cmd/bench/interpolation_type_bench.cc.tmpl
diff --git a/src/tint/cmd/bench/msl/BUILD.bazel b/src/tint/cmd/bench/msl/BUILD.bazel
new file mode 100644
index 0000000..bfbb324
--- /dev/null
+++ b/src/tint/cmd/bench/msl/BUILD.bazel
@@ -0,0 +1,103 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "bench",
+  alwayslink = True,
+  srcs = [
+    "writer_bench.cc",
+  ],
+  deps = [
+    "//src/tint/api/common",
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/ir",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/msl/ir/transform",
+    "//src/tint/lang/wgsl",
+    "//src/tint/lang/wgsl/ast",
+    "//src/tint/lang/wgsl/program",
+    "//src/tint/lang/wgsl/sem",
+    "//src/tint/utils",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "@benchmark",
+    "//src/utils",
+  ] + select({
+    ":tint_build_msl_writer": [
+      "//src/tint/lang/msl/writer",
+      "//src/tint/lang/msl/writer/common",
+      "//src/tint/lang/msl/writer/helpers",
+    ],
+    "//conditions:default": [],
+  }) + select({
+    ":tint_build_wgsl_reader": [
+      "//src/tint/cmd/bench:bench",
+      "//src/tint/lang/wgsl/reader",
+    ],
+    "//conditions:default": [],
+  }),
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
+alias(
+  name = "tint_build_msl_writer",
+  actual = "//src/tint:tint_build_msl_writer_true",
+)
+
+alias(
+  name = "tint_build_wgsl_reader",
+  actual = "//src/tint:tint_build_wgsl_reader_true",
+)
+
+selects.config_setting_group(
+    name = "tint_build_msl_writer_and_tint_build_wgsl_reader",
+    match_all = [
+        ":tint_build_msl_writer",
+        ":tint_build_wgsl_reader",
+    ],
+)
+
diff --git a/src/tint/cmd/bench/msl/BUILD.cfg b/src/tint/cmd/bench/msl/BUILD.cfg
new file mode 100644
index 0000000..ff19760
--- /dev/null
+++ b/src/tint/cmd/bench/msl/BUILD.cfg
@@ -0,0 +1,3 @@
+{
+    "Condition": "tint_build_msl_writer && tint_build_wgsl_reader",
+}
diff --git a/src/tint/cmd/bench/msl/BUILD.cmake b/src/tint/cmd/bench/msl/BUILD.cmake
new file mode 100644
index 0000000..cf5e502
--- /dev/null
+++ b/src/tint/cmd/bench/msl/BUILD.cmake
@@ -0,0 +1,90 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+if(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
+################################################################################
+# Target:    tint_cmd_bench_msl_bench
+# Kind:      bench
+# Condition: TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER
+################################################################################
+tint_add_target(tint_cmd_bench_msl_bench bench
+  cmd/bench/msl/writer_bench.cc
+)
+
+tint_target_add_dependencies(tint_cmd_bench_msl_bench bench
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_ir
+  tint_lang_core_type
+  tint_lang_msl_ir_transform
+  tint_lang_wgsl
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_cmd_bench_msl_bench bench
+  "google-benchmark"
+  "src_utils"
+)
+
+if(TINT_BUILD_MSL_WRITER)
+  tint_target_add_dependencies(tint_cmd_bench_msl_bench bench
+    tint_lang_msl_writer
+    tint_lang_msl_writer_common
+    tint_lang_msl_writer_helpers
+  )
+endif(TINT_BUILD_MSL_WRITER)
+
+if(TINT_BUILD_WGSL_READER)
+  tint_target_add_dependencies(tint_cmd_bench_msl_bench bench
+    tint_cmd_bench_bench
+    tint_lang_wgsl_reader
+  )
+endif(TINT_BUILD_WGSL_READER)
+
+endif(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/cmd/bench/msl/BUILD.gn b/src/tint/cmd/bench/msl/BUILD.gn
new file mode 100644
index 0000000..c23cd15
--- /dev/null
+++ b/src/tint/cmd/bench/msl/BUILD.gn
@@ -0,0 +1,90 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests || tint_build_benchmarks) {
+  import("//testing/test.gni")
+}
+if (tint_build_benchmarks) {
+  if (tint_build_msl_writer && tint_build_wgsl_reader) {
+    tint_benchmarks_source_set("bench") {
+      sources = [ "writer_bench.cc" ]
+      deps = [
+        "${dawn_root}/src/utils:utils",
+        "${tint_src_dir}:google_benchmark",
+        "${tint_src_dir}/api/common",
+        "${tint_src_dir}/lang/core",
+        "${tint_src_dir}/lang/core/constant",
+        "${tint_src_dir}/lang/core/ir",
+        "${tint_src_dir}/lang/core/type",
+        "${tint_src_dir}/lang/msl/ir/transform",
+        "${tint_src_dir}/lang/wgsl",
+        "${tint_src_dir}/lang/wgsl/ast",
+        "${tint_src_dir}/lang/wgsl/program",
+        "${tint_src_dir}/lang/wgsl/sem",
+        "${tint_src_dir}/utils",
+        "${tint_src_dir}/utils/containers",
+        "${tint_src_dir}/utils/diagnostic",
+        "${tint_src_dir}/utils/ice",
+        "${tint_src_dir}/utils/macros",
+        "${tint_src_dir}/utils/math",
+        "${tint_src_dir}/utils/memory",
+        "${tint_src_dir}/utils/rtti",
+        "${tint_src_dir}/utils/symbol",
+        "${tint_src_dir}/utils/text",
+      ]
+
+      if (tint_build_msl_writer) {
+        deps += [
+          "${tint_src_dir}/lang/msl/writer",
+          "${tint_src_dir}/lang/msl/writer/common",
+          "${tint_src_dir}/lang/msl/writer/helpers",
+        ]
+      }
+
+      if (tint_build_wgsl_reader) {
+        deps += [
+          "${tint_src_dir}/cmd/bench:bench",
+          "${tint_src_dir}/lang/wgsl/reader",
+        ]
+      }
+    }
+  }
+}
diff --git a/src/tint/lang/msl/writer/writer_bench.cc b/src/tint/cmd/bench/msl/writer_bench.cc
similarity index 100%
rename from src/tint/lang/msl/writer/writer_bench.cc
rename to src/tint/cmd/bench/msl/writer_bench.cc
diff --git a/src/tint/cmd/bench/spirv/BUILD.bazel b/src/tint/cmd/bench/spirv/BUILD.bazel
new file mode 100644
index 0000000..c4029de
--- /dev/null
+++ b/src/tint/cmd/bench/spirv/BUILD.bazel
@@ -0,0 +1,101 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "bench",
+  alwayslink = True,
+  srcs = [
+    "writer_bench.cc",
+  ],
+  deps = [
+    "//src/tint/api/common",
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/ir",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/wgsl",
+    "//src/tint/lang/wgsl/ast",
+    "//src/tint/lang/wgsl/program",
+    "//src/tint/lang/wgsl/sem",
+    "//src/tint/utils",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "@benchmark",
+    "//src/utils",
+  ] + select({
+    ":tint_build_spv_writer": [
+      "//src/tint/lang/spirv/writer",
+      "//src/tint/lang/spirv/writer/common",
+    ],
+    "//conditions:default": [],
+  }) + select({
+    ":tint_build_wgsl_reader": [
+      "//src/tint/cmd/bench:bench",
+      "//src/tint/lang/wgsl/reader",
+    ],
+    "//conditions:default": [],
+  }),
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
+alias(
+  name = "tint_build_spv_writer",
+  actual = "//src/tint:tint_build_spv_writer_true",
+)
+
+alias(
+  name = "tint_build_wgsl_reader",
+  actual = "//src/tint:tint_build_wgsl_reader_true",
+)
+
+selects.config_setting_group(
+    name = "tint_build_spv_writer_and_tint_build_wgsl_reader",
+    match_all = [
+        ":tint_build_spv_writer",
+        ":tint_build_wgsl_reader",
+    ],
+)
+
diff --git a/src/tint/cmd/bench/spirv/BUILD.cfg b/src/tint/cmd/bench/spirv/BUILD.cfg
new file mode 100644
index 0000000..3a209c5
--- /dev/null
+++ b/src/tint/cmd/bench/spirv/BUILD.cfg
@@ -0,0 +1,3 @@
+{
+    "Condition": "tint_build_spv_writer && tint_build_wgsl_reader",
+}
diff --git a/src/tint/cmd/bench/spirv/BUILD.cmake b/src/tint/cmd/bench/spirv/BUILD.cmake
new file mode 100644
index 0000000..558e7c6
--- /dev/null
+++ b/src/tint/cmd/bench/spirv/BUILD.cmake
@@ -0,0 +1,88 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+if(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
+################################################################################
+# Target:    tint_cmd_bench_spirv_bench
+# Kind:      bench
+# Condition: TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER
+################################################################################
+tint_add_target(tint_cmd_bench_spirv_bench bench
+  cmd/bench/spirv/writer_bench.cc
+)
+
+tint_target_add_dependencies(tint_cmd_bench_spirv_bench bench
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_ir
+  tint_lang_core_type
+  tint_lang_wgsl
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_cmd_bench_spirv_bench bench
+  "google-benchmark"
+  "src_utils"
+)
+
+if(TINT_BUILD_SPV_WRITER)
+  tint_target_add_dependencies(tint_cmd_bench_spirv_bench bench
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_common
+  )
+endif(TINT_BUILD_SPV_WRITER)
+
+if(TINT_BUILD_WGSL_READER)
+  tint_target_add_dependencies(tint_cmd_bench_spirv_bench bench
+    tint_cmd_bench_bench
+    tint_lang_wgsl_reader
+  )
+endif(TINT_BUILD_WGSL_READER)
+
+endif(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/cmd/bench/spirv/BUILD.gn b/src/tint/cmd/bench/spirv/BUILD.gn
new file mode 100644
index 0000000..f025161
--- /dev/null
+++ b/src/tint/cmd/bench/spirv/BUILD.gn
@@ -0,0 +1,88 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests || tint_build_benchmarks) {
+  import("//testing/test.gni")
+}
+if (tint_build_benchmarks) {
+  if (tint_build_spv_writer && tint_build_wgsl_reader) {
+    tint_benchmarks_source_set("bench") {
+      sources = [ "writer_bench.cc" ]
+      deps = [
+        "${dawn_root}/src/utils:utils",
+        "${tint_src_dir}:google_benchmark",
+        "${tint_src_dir}/api/common",
+        "${tint_src_dir}/lang/core",
+        "${tint_src_dir}/lang/core/constant",
+        "${tint_src_dir}/lang/core/ir",
+        "${tint_src_dir}/lang/core/type",
+        "${tint_src_dir}/lang/wgsl",
+        "${tint_src_dir}/lang/wgsl/ast",
+        "${tint_src_dir}/lang/wgsl/program",
+        "${tint_src_dir}/lang/wgsl/sem",
+        "${tint_src_dir}/utils",
+        "${tint_src_dir}/utils/containers",
+        "${tint_src_dir}/utils/diagnostic",
+        "${tint_src_dir}/utils/ice",
+        "${tint_src_dir}/utils/macros",
+        "${tint_src_dir}/utils/math",
+        "${tint_src_dir}/utils/memory",
+        "${tint_src_dir}/utils/rtti",
+        "${tint_src_dir}/utils/symbol",
+        "${tint_src_dir}/utils/text",
+      ]
+
+      if (tint_build_spv_writer) {
+        deps += [
+          "${tint_src_dir}/lang/spirv/writer",
+          "${tint_src_dir}/lang/spirv/writer/common",
+        ]
+      }
+
+      if (tint_build_wgsl_reader) {
+        deps += [
+          "${tint_src_dir}/cmd/bench:bench",
+          "${tint_src_dir}/lang/wgsl/reader",
+        ]
+      }
+    }
+  }
+}
diff --git a/src/tint/lang/spirv/writer/writer_bench.cc b/src/tint/cmd/bench/spirv/writer_bench.cc
similarity index 100%
rename from src/tint/lang/spirv/writer/writer_bench.cc
rename to src/tint/cmd/bench/spirv/writer_bench.cc
diff --git a/src/tint/lang/core/texel_format_bench.cc b/src/tint/cmd/bench/texel_format_bench.cc
similarity index 98%
rename from src/tint/lang/core/texel_format_bench.cc
rename to src/tint/cmd/bench/texel_format_bench.cc
index 33f4455..447e267 100644
--- a/src/tint/lang/core/texel_format_bench.cc
+++ b/src/tint/cmd/bench/texel_format_bench.cc
@@ -27,7 +27,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 // File generated by 'tools/src/cmd/gen' using the template:
-//   src/tint/lang/core/texel_format_bench.cc.tmpl
+//   src/tint/cmd/bench/texel_format_bench.cc.tmpl
 //
 // To regenerate run: './tools/run gen'
 //
diff --git a/src/tint/lang/core/texel_format_bench.cc.tmpl b/src/tint/cmd/bench/texel_format_bench.cc.tmpl
similarity index 100%
rename from src/tint/lang/core/texel_format_bench.cc.tmpl
rename to src/tint/cmd/bench/texel_format_bench.cc.tmpl
diff --git a/src/tint/lang/core/ir/validator_bench.cc b/src/tint/cmd/bench/validator_bench.cc
similarity index 100%
rename from src/tint/lang/core/ir/validator_bench.cc
rename to src/tint/cmd/bench/validator_bench.cc
diff --git a/src/tint/cmd/bench/wgsl/BUILD.bazel b/src/tint/cmd/bench/wgsl/BUILD.bazel
new file mode 100644
index 0000000..4406aac
--- /dev/null
+++ b/src/tint/cmd/bench/wgsl/BUILD.bazel
@@ -0,0 +1,102 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "bench",
+  alwayslink = True,
+  srcs = [
+    "reader_bench.cc",
+    "writer_bench.cc",
+  ],
+  deps = [
+    "//src/tint/api/common",
+    "//src/tint/lang/core",
+    "//src/tint/lang/core/constant",
+    "//src/tint/lang/core/ir",
+    "//src/tint/lang/core/type",
+    "//src/tint/lang/wgsl",
+    "//src/tint/lang/wgsl/ast",
+    "//src/tint/lang/wgsl/program",
+    "//src/tint/lang/wgsl/sem",
+    "//src/tint/lang/wgsl/writer/ir_to_program",
+    "//src/tint/utils",
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/symbol",
+    "//src/tint/utils/text",
+    "@benchmark",
+    "//src/utils",
+  ] + select({
+    ":tint_build_wgsl_reader": [
+      "//src/tint/cmd/bench:bench",
+      "//src/tint/lang/wgsl/reader",
+    ],
+    "//conditions:default": [],
+  }) + select({
+    ":tint_build_wgsl_writer": [
+      "//src/tint/lang/wgsl/writer",
+    ],
+    "//conditions:default": [],
+  }),
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
+alias(
+  name = "tint_build_wgsl_reader",
+  actual = "//src/tint:tint_build_wgsl_reader_true",
+)
+
+alias(
+  name = "tint_build_wgsl_writer",
+  actual = "//src/tint:tint_build_wgsl_writer_true",
+)
+
+selects.config_setting_group(
+    name = "tint_build_wgsl_writer_and_tint_build_wgsl_reader",
+    match_all = [
+        ":tint_build_wgsl_writer",
+        ":tint_build_wgsl_reader",
+    ],
+)
+
diff --git a/src/tint/cmd/bench/wgsl/BUILD.cfg b/src/tint/cmd/bench/wgsl/BUILD.cfg
new file mode 100644
index 0000000..aee0ca0
--- /dev/null
+++ b/src/tint/cmd/bench/wgsl/BUILD.cfg
@@ -0,0 +1,3 @@
+{
+    "Condition": "tint_build_wgsl_writer && tint_build_wgsl_reader",
+}
diff --git a/src/tint/cmd/bench/wgsl/BUILD.cmake b/src/tint/cmd/bench/wgsl/BUILD.cmake
new file mode 100644
index 0000000..1eb5171
--- /dev/null
+++ b/src/tint/cmd/bench/wgsl/BUILD.cmake
@@ -0,0 +1,89 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+if(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
+################################################################################
+# Target:    tint_cmd_bench_wgsl_bench
+# Kind:      bench
+# Condition: TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER
+################################################################################
+tint_add_target(tint_cmd_bench_wgsl_bench bench
+  cmd/bench/wgsl/reader_bench.cc
+  cmd/bench/wgsl/writer_bench.cc
+)
+
+tint_target_add_dependencies(tint_cmd_bench_wgsl_bench bench
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_ir
+  tint_lang_core_type
+  tint_lang_wgsl
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer_ir_to_program
+  tint_utils
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_cmd_bench_wgsl_bench bench
+  "google-benchmark"
+  "src_utils"
+)
+
+if(TINT_BUILD_WGSL_READER)
+  tint_target_add_dependencies(tint_cmd_bench_wgsl_bench bench
+    tint_cmd_bench_bench
+    tint_lang_wgsl_reader
+  )
+endif(TINT_BUILD_WGSL_READER)
+
+if(TINT_BUILD_WGSL_WRITER)
+  tint_target_add_dependencies(tint_cmd_bench_wgsl_bench bench
+    tint_lang_wgsl_writer
+  )
+endif(TINT_BUILD_WGSL_WRITER)
+
+endif(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/cmd/bench/wgsl/BUILD.gn b/src/tint/cmd/bench/wgsl/BUILD.gn
new file mode 100644
index 0000000..fa97d9d
--- /dev/null
+++ b/src/tint/cmd/bench/wgsl/BUILD.gn
@@ -0,0 +1,89 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# 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.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests || tint_build_benchmarks) {
+  import("//testing/test.gni")
+}
+if (tint_build_benchmarks) {
+  if (tint_build_wgsl_writer && tint_build_wgsl_reader) {
+    tint_benchmarks_source_set("bench") {
+      sources = [
+        "reader_bench.cc",
+        "writer_bench.cc",
+      ]
+      deps = [
+        "${dawn_root}/src/utils:utils",
+        "${tint_src_dir}:google_benchmark",
+        "${tint_src_dir}/api/common",
+        "${tint_src_dir}/lang/core",
+        "${tint_src_dir}/lang/core/constant",
+        "${tint_src_dir}/lang/core/ir",
+        "${tint_src_dir}/lang/core/type",
+        "${tint_src_dir}/lang/wgsl",
+        "${tint_src_dir}/lang/wgsl/ast",
+        "${tint_src_dir}/lang/wgsl/program",
+        "${tint_src_dir}/lang/wgsl/sem",
+        "${tint_src_dir}/lang/wgsl/writer/ir_to_program",
+        "${tint_src_dir}/utils",
+        "${tint_src_dir}/utils/containers",
+        "${tint_src_dir}/utils/diagnostic",
+        "${tint_src_dir}/utils/ice",
+        "${tint_src_dir}/utils/macros",
+        "${tint_src_dir}/utils/math",
+        "${tint_src_dir}/utils/memory",
+        "${tint_src_dir}/utils/rtti",
+        "${tint_src_dir}/utils/symbol",
+        "${tint_src_dir}/utils/text",
+      ]
+
+      if (tint_build_wgsl_reader) {
+        deps += [
+          "${tint_src_dir}/cmd/bench:bench",
+          "${tint_src_dir}/lang/wgsl/reader",
+        ]
+      }
+
+      if (tint_build_wgsl_writer) {
+        deps += [ "${tint_src_dir}/lang/wgsl/writer" ]
+      }
+    }
+  }
+}
diff --git a/src/tint/lang/wgsl/reader/reader_bench.cc b/src/tint/cmd/bench/wgsl/reader_bench.cc
similarity index 100%
rename from src/tint/lang/wgsl/reader/reader_bench.cc
rename to src/tint/cmd/bench/wgsl/reader_bench.cc
diff --git a/src/tint/lang/wgsl/writer/writer_bench.cc b/src/tint/cmd/bench/wgsl/writer_bench.cc
similarity index 100%
rename from src/tint/lang/wgsl/writer/writer_bench.cc
rename to src/tint/cmd/bench/wgsl/writer_bench.cc
diff --git a/src/tint/lang/core/BUILD.bazel b/src/tint/lang/core/BUILD.bazel
index 1d981f2..a1ac336 100644
--- a/src/tint/lang/core/BUILD.bazel
+++ b/src/tint/lang/core/BUILD.bazel
@@ -118,32 +118,4 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "access_bench.cc",
-    "address_space_bench.cc",
-    "attribute_bench.cc",
-    "builtin_type_bench.cc",
-    "builtin_value_bench.cc",
-    "interpolation_sampling_bench.cc",
-    "interpolation_type_bench.cc",
-    "texel_format_bench.cc",
-  ],
-  deps = [
-    "//src/tint/lang/core",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "@benchmark",
-    "//src/utils",
-  ],
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
diff --git a/src/tint/lang/core/BUILD.cmake b/src/tint/lang/core/BUILD.cmake
index 96666be..8caa03c 100644
--- a/src/tint/lang/core/BUILD.cmake
+++ b/src/tint/lang/core/BUILD.cmake
@@ -125,34 +125,3 @@
   "gtest"
   "src_utils"
 )
-
-################################################################################
-# Target:    tint_lang_core_bench
-# Kind:      bench
-################################################################################
-tint_add_target(tint_lang_core_bench bench
-  lang/core/access_bench.cc
-  lang/core/address_space_bench.cc
-  lang/core/attribute_bench.cc
-  lang/core/builtin_type_bench.cc
-  lang/core/builtin_value_bench.cc
-  lang/core/interpolation_sampling_bench.cc
-  lang/core/interpolation_type_bench.cc
-  lang/core/texel_format_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_core_bench bench
-  tint_lang_core
-  tint_utils
-  tint_utils_containers
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-)
-
-tint_target_add_external_dependencies(tint_lang_core_bench bench
-  "google-benchmark"
-  "src_utils"
-)
diff --git a/src/tint/lang/core/BUILD.gn b/src/tint/lang/core/BUILD.gn
index d7f13d1..faa3bf4 100644
--- a/src/tint/lang/core/BUILD.gn
+++ b/src/tint/lang/core/BUILD.gn
@@ -118,29 +118,3 @@
     ]
   }
 }
-if (tint_build_benchmarks) {
-  tint_benchmarks_source_set("bench") {
-    sources = [
-      "access_bench.cc",
-      "address_space_bench.cc",
-      "attribute_bench.cc",
-      "builtin_type_bench.cc",
-      "builtin_value_bench.cc",
-      "interpolation_sampling_bench.cc",
-      "interpolation_type_bench.cc",
-      "texel_format_bench.cc",
-    ]
-    deps = [
-      "${dawn_root}/src/utils:utils",
-      "${tint_src_dir}:google_benchmark",
-      "${tint_src_dir}/lang/core",
-      "${tint_src_dir}/utils",
-      "${tint_src_dir}/utils/containers",
-      "${tint_src_dir}/utils/ice",
-      "${tint_src_dir}/utils/macros",
-      "${tint_src_dir}/utils/math",
-      "${tint_src_dir}/utils/memory",
-      "${tint_src_dir}/utils/rtti",
-    ]
-  }
-}
diff --git a/src/tint/lang/core/ir/BUILD.bazel b/src/tint/lang/core/ir/BUILD.bazel
index 9966269..e613089 100644
--- a/src/tint/lang/core/ir/BUILD.bazel
+++ b/src/tint/lang/core/ir/BUILD.bazel
@@ -272,47 +272,4 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "validator_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
-
-alias(
-  name = "tint_build_wgsl_reader",
-  actual = "//src/tint:tint_build_wgsl_reader_true",
-)
 
diff --git a/src/tint/lang/core/ir/BUILD.cfg b/src/tint/lang/core/ir/BUILD.cfg
deleted file mode 100644
index 4166f62..0000000
--- a/src/tint/lang/core/ir/BUILD.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    }
-}
diff --git a/src/tint/lang/core/ir/BUILD.cmake b/src/tint/lang/core/ir/BUILD.cmake
index a297ce6..a321e7f 100644
--- a/src/tint/lang/core/ir/BUILD.cmake
+++ b/src/tint/lang/core/ir/BUILD.cmake
@@ -279,49 +279,3 @@
   "gtest"
   "src_utils"
 )
-
-if(TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_core_ir_bench
-# Kind:      bench
-# Condition: TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_core_ir_bench bench
-  lang/core/ir/validator_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_core_ir_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_type
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_core_ir_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_core_ir_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-endif(TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/lang/core/ir/BUILD.gn b/src/tint/lang/core/ir/BUILD.gn
index ba16ad8..3acba56 100644
--- a/src/tint/lang/core/ir/BUILD.gn
+++ b/src/tint/lang/core/ir/BUILD.gn
@@ -272,40 +272,3 @@
     ]
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "validator_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
diff --git a/src/tint/lang/glsl/writer/BUILD.bazel b/src/tint/lang/glsl/writer/BUILD.bazel
index 53994b7..c7756c8 100644
--- a/src/tint/lang/glsl/writer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/BUILD.bazel
@@ -144,54 +144,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "writer_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/ir/transform",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/ast/transform",
-    "//src/tint/lang/wgsl/inspector",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_glsl_writer": [
-      "//src/tint/lang/glsl/writer",
-      "//src/tint/lang/glsl/writer/common",
-      "//src/tint/lang/glsl/writer/helpers",
-    ],
-    "//conditions:default": [],
-  }) + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_glsl_validator",
@@ -203,11 +155,6 @@
   actual = "//src/tint:tint_build_glsl_writer_true",
 )
 
-alias(
-  name = "tint_build_wgsl_reader",
-  actual = "//src/tint:tint_build_wgsl_reader_true",
-)
-
 selects.config_setting_group(
     name = "tint_build_glsl_writer_and_tint_build_glsl_validator",
     match_all = [
@@ -215,11 +162,4 @@
         ":tint_build_glsl_validator",
     ],
 )
-selects.config_setting_group(
-    name = "tint_build_glsl_writer_and_tint_build_wgsl_reader",
-    match_all = [
-        ":tint_build_glsl_writer",
-        ":tint_build_wgsl_reader",
-    ],
-)
 
diff --git a/src/tint/lang/glsl/writer/BUILD.cfg b/src/tint/lang/glsl/writer/BUILD.cfg
index 77527f8..cd6a5a5 100644
--- a/src/tint/lang/glsl/writer/BUILD.cfg
+++ b/src/tint/lang/glsl/writer/BUILD.cfg
@@ -1,8 +1,5 @@
 {
     "condition": "tint_build_glsl_writer",
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    },
     "test": {
         "condition": "tint_build_glsl_validator",
     }
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index dcce4e7..a01b26f 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -157,62 +157,6 @@
 endif(TINT_BUILD_GLSL_WRITER)
 
 endif(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_GLSL_VALIDATOR)
-if(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_glsl_writer_bench
-# Kind:      bench
-# Condition: TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_glsl_writer_bench bench
-  lang/glsl/writer/writer_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_glsl_writer_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_ir_transform
-  tint_lang_core_type
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_ast_transform
-  tint_lang_wgsl_inspector
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_glsl_writer_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies(tint_lang_glsl_writer_bench bench
-    tint_lang_glsl_writer
-    tint_lang_glsl_writer_common
-    tint_lang_glsl_writer_helpers
-  )
-endif(TINT_BUILD_GLSL_WRITER)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_glsl_writer_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-endif(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
 # Target:    tint_lang_glsl_writer_fuzz
diff --git a/src/tint/lang/glsl/writer/BUILD.gn b/src/tint/lang/glsl/writer/BUILD.gn
index 92f0651..372c4ea 100644
--- a/src/tint/lang/glsl/writer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/BUILD.gn
@@ -142,54 +142,6 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_glsl_writer && tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "writer_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/ir/transform",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/ast/transform",
-        "${tint_src_dir}/lang/wgsl/inspector",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_glsl_writer) {
-        deps += [
-          "${tint_src_dir}/lang/glsl/writer",
-          "${tint_src_dir}/lang/glsl/writer/common",
-          "${tint_src_dir}/lang/glsl/writer/helpers",
-        ]
-      }
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
 if (tint_build_glsl_writer) {
   tint_fuzz_source_set("fuzz") {
     sources = [ "writer_fuzz.cc" ]
diff --git a/src/tint/lang/hlsl/writer/BUILD.bazel b/src/tint/lang/hlsl/writer/BUILD.bazel
index 5041501..0e84209 100644
--- a/src/tint/lang/hlsl/writer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/BUILD.bazel
@@ -133,51 +133,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "writer_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/hlsl/writer/common",
-    "//src/tint/lang/hlsl/writer/helpers",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_hlsl_writer": [
-      "//src/tint/lang/hlsl/writer",
-    ],
-    "//conditions:default": [],
-  }) + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_hlsl_writer",
@@ -189,11 +144,3 @@
   actual = "//src/tint:tint_build_wgsl_reader_true",
 )
 
-selects.config_setting_group(
-    name = "tint_build_hlsl_writer_and_tint_build_wgsl_reader",
-    match_all = [
-        ":tint_build_hlsl_writer",
-        ":tint_build_wgsl_reader",
-    ],
-)
-
diff --git a/src/tint/lang/hlsl/writer/BUILD.cfg b/src/tint/lang/hlsl/writer/BUILD.cfg
index 32b58a0..b6a2e0d 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cfg
+++ b/src/tint/lang/hlsl/writer/BUILD.cfg
@@ -1,6 +1,3 @@
 {
     "condition": "tint_build_hlsl_writer",
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    }
 }
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index 94eb3d1..6ee58ca 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -151,59 +151,6 @@
 endif(TINT_BUILD_HLSL_WRITER)
 
 endif(TINT_BUILD_HLSL_WRITER)
-if(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_hlsl_writer_bench
-# Kind:      bench
-# Condition: TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_hlsl_writer_bench bench
-  lang/hlsl/writer/writer_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_hlsl_writer_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_type
-  tint_lang_hlsl_writer_common
-  tint_lang_hlsl_writer_helpers
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_hlsl_writer_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies(tint_lang_hlsl_writer_bench bench
-    tint_lang_hlsl_writer
-  )
-endif(TINT_BUILD_HLSL_WRITER)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_hlsl_writer_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-endif(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
 # Target:    tint_lang_hlsl_writer_fuzz
diff --git a/src/tint/lang/hlsl/writer/BUILD.gn b/src/tint/lang/hlsl/writer/BUILD.gn
index 33ceb44..b2a8e49 100644
--- a/src/tint/lang/hlsl/writer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/BUILD.gn
@@ -138,49 +138,6 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_hlsl_writer && tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "writer_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/hlsl/writer/common",
-        "${tint_src_dir}/lang/hlsl/writer/helpers",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_hlsl_writer) {
-        deps += [ "${tint_src_dir}/lang/hlsl/writer" ]
-      }
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
 if (tint_build_hlsl_writer) {
   tint_fuzz_source_set("fuzz") {
     sources = [ "writer_fuzz.cc" ]
diff --git a/src/tint/lang/msl/writer/BUILD.bazel b/src/tint/lang/msl/writer/BUILD.bazel
index 2c9dcd4..14e2494 100644
--- a/src/tint/lang/msl/writer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/BUILD.bazel
@@ -121,68 +121,9 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "writer_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/msl/ir/transform",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_msl_writer": [
-      "//src/tint/lang/msl/writer",
-      "//src/tint/lang/msl/writer/common",
-      "//src/tint/lang/msl/writer/helpers",
-    ],
-    "//conditions:default": [],
-  }) + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_msl_writer",
   actual = "//src/tint:tint_build_msl_writer_true",
 )
 
-alias(
-  name = "tint_build_wgsl_reader",
-  actual = "//src/tint:tint_build_wgsl_reader_true",
-)
-
-selects.config_setting_group(
-    name = "tint_build_msl_writer_and_tint_build_wgsl_reader",
-    match_all = [
-        ":tint_build_msl_writer",
-        ":tint_build_wgsl_reader",
-    ],
-)
-
diff --git a/src/tint/lang/msl/writer/BUILD.cfg b/src/tint/lang/msl/writer/BUILD.cfg
index 52536a2..45e346e 100644
--- a/src/tint/lang/msl/writer/BUILD.cfg
+++ b/src/tint/lang/msl/writer/BUILD.cfg
@@ -1,6 +1,3 @@
 {
     "condition": "tint_build_msl_writer",
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    }
 }
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index cbb9047..6a69fae 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -137,60 +137,6 @@
 endif(TINT_BUILD_MSL_WRITER)
 
 endif(TINT_BUILD_MSL_WRITER)
-if(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_msl_writer_bench
-# Kind:      bench
-# Condition: TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_msl_writer_bench bench
-  lang/msl/writer/writer_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_msl_writer_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_type
-  tint_lang_msl_ir_transform
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_msl_writer_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies(tint_lang_msl_writer_bench bench
-    tint_lang_msl_writer
-    tint_lang_msl_writer_common
-    tint_lang_msl_writer_helpers
-  )
-endif(TINT_BUILD_MSL_WRITER)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_msl_writer_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-endif(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
 # Target:    tint_lang_msl_writer_fuzz
diff --git a/src/tint/lang/msl/writer/BUILD.gn b/src/tint/lang/msl/writer/BUILD.gn
index 68ca4f4..de4d62e 100644
--- a/src/tint/lang/msl/writer/BUILD.gn
+++ b/src/tint/lang/msl/writer/BUILD.gn
@@ -126,52 +126,6 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_msl_writer && tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "writer_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/msl/ir/transform",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_msl_writer) {
-        deps += [
-          "${tint_src_dir}/lang/msl/writer",
-          "${tint_src_dir}/lang/msl/writer/common",
-          "${tint_src_dir}/lang/msl/writer/helpers",
-        ]
-      }
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
 if (tint_build_msl_writer) {
   tint_fuzz_source_set("fuzz") {
     sources = [ "writer_fuzz.cc" ]
diff --git a/src/tint/lang/spirv/writer/BUILD.bazel b/src/tint/lang/spirv/writer/BUILD.bazel
index b3fb378..5f3372c 100644
--- a/src/tint/lang/spirv/writer/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/BUILD.bazel
@@ -139,50 +139,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "writer_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_spv_writer": [
-      "//src/tint/lang/spirv/writer",
-      "//src/tint/lang/spirv/writer/common",
-    ],
-    "//conditions:default": [],
-  }) + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_spv_reader",
@@ -194,11 +150,6 @@
   actual = "//src/tint:tint_build_spv_writer_true",
 )
 
-alias(
-  name = "tint_build_wgsl_reader",
-  actual = "//src/tint:tint_build_wgsl_reader_true",
-)
-
 selects.config_setting_group(
     name = "tint_build_spv_reader_or_tint_build_spv_writer",
     match_any = [
@@ -207,11 +158,3 @@
     ],
 )
 
-selects.config_setting_group(
-    name = "tint_build_spv_writer_and_tint_build_wgsl_reader",
-    match_all = [
-        ":tint_build_spv_writer",
-        ":tint_build_wgsl_reader",
-    ],
-)
-
diff --git a/src/tint/lang/spirv/writer/BUILD.cfg b/src/tint/lang/spirv/writer/BUILD.cfg
index d53bc34..82803e1 100644
--- a/src/tint/lang/spirv/writer/BUILD.cfg
+++ b/src/tint/lang/spirv/writer/BUILD.cfg
@@ -1,6 +1,3 @@
 {
     "condition": "tint_build_spv_writer",
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    }
 }
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index d53367f..1e81d00 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -157,58 +157,6 @@
 endif(TINT_BUILD_SPV_WRITER)
 
 endif(TINT_BUILD_SPV_WRITER)
-if(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_spirv_writer_bench
-# Kind:      bench
-# Condition: TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_spirv_writer_bench bench
-  lang/spirv/writer/writer_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_spirv_writer_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_type
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_spirv_writer_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies(tint_lang_spirv_writer_bench bench
-    tint_lang_spirv_writer
-    tint_lang_spirv_writer_common
-  )
-endif(TINT_BUILD_SPV_WRITER)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_spirv_writer_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-endif(TINT_BUILD_SPV_WRITER AND TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
 # Target:    tint_lang_spirv_writer_fuzz
diff --git a/src/tint/lang/spirv/writer/BUILD.gn b/src/tint/lang/spirv/writer/BUILD.gn
index 3ca5caf..2c91907 100644
--- a/src/tint/lang/spirv/writer/BUILD.gn
+++ b/src/tint/lang/spirv/writer/BUILD.gn
@@ -145,50 +145,6 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_spv_writer && tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "writer_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_spv_writer) {
-        deps += [
-          "${tint_src_dir}/lang/spirv/writer",
-          "${tint_src_dir}/lang/spirv/writer/common",
-        ]
-      }
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
 if (tint_build_spv_writer) {
   tint_fuzz_source_set("fuzz") {
     sources = [ "writer_fuzz.cc" ]
diff --git a/src/tint/lang/wgsl/BUILD.bazel b/src/tint/lang/wgsl/BUILD.bazel
index 43968e7..ab45c5d 100644
--- a/src/tint/lang/wgsl/BUILD.bazel
+++ b/src/tint/lang/wgsl/BUILD.bazel
@@ -133,31 +133,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "diagnostic_rule_bench.cc",
-    "diagnostic_severity_bench.cc",
-    "extension_bench.cc",
-  ],
-  deps = [
-    "//src/tint/lang/wgsl",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ],
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_wgsl_reader",
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index 5191e91..c4baf01 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -143,31 +143,3 @@
     tint_lang_wgsl_writer
   )
 endif(TINT_BUILD_WGSL_WRITER)
-
-################################################################################
-# Target:    tint_lang_wgsl_bench
-# Kind:      bench
-################################################################################
-tint_add_target(tint_lang_wgsl_bench bench
-  lang/wgsl/diagnostic_rule_bench.cc
-  lang/wgsl/diagnostic_severity_bench.cc
-  lang/wgsl/extension_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_wgsl_bench bench
-  tint_lang_wgsl
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_wgsl_bench bench
-  "google-benchmark"
-  "src_utils"
-)
diff --git a/src/tint/lang/wgsl/BUILD.gn b/src/tint/lang/wgsl/BUILD.gn
index 407dd57..3e27659 100644
--- a/src/tint/lang/wgsl/BUILD.gn
+++ b/src/tint/lang/wgsl/BUILD.gn
@@ -126,26 +126,3 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  tint_benchmarks_source_set("bench") {
-    sources = [
-      "diagnostic_rule_bench.cc",
-      "diagnostic_severity_bench.cc",
-      "extension_bench.cc",
-    ]
-    deps = [
-      "${dawn_root}/src/utils:utils",
-      "${tint_src_dir}:google_benchmark",
-      "${tint_src_dir}/lang/wgsl",
-      "${tint_src_dir}/utils",
-      "${tint_src_dir}/utils/containers",
-      "${tint_src_dir}/utils/diagnostic",
-      "${tint_src_dir}/utils/ice",
-      "${tint_src_dir}/utils/macros",
-      "${tint_src_dir}/utils/math",
-      "${tint_src_dir}/utils/memory",
-      "${tint_src_dir}/utils/rtti",
-      "${tint_src_dir}/utils/text",
-    ]
-  }
-}
diff --git a/src/tint/lang/wgsl/reader/BUILD.bazel b/src/tint/lang/wgsl/reader/BUILD.bazel
index cae93c0..b88e902 100644
--- a/src/tint/lang/wgsl/reader/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/BUILD.bazel
@@ -104,44 +104,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "reader_bench.cc",
-  ],
-  deps = [
-    "//src/tint/api/common",
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/ir",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-      "//src/tint/lang/wgsl/reader",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_wgsl_reader",
diff --git a/src/tint/lang/wgsl/reader/BUILD.cmake b/src/tint/lang/wgsl/reader/BUILD.cmake
index 27d7321..f839f23 100644
--- a/src/tint/lang/wgsl/reader/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/BUILD.cmake
@@ -118,49 +118,4 @@
   )
 endif(TINT_BUILD_WGSL_READER)
 
-endif(TINT_BUILD_WGSL_READER)
-if(TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_wgsl_reader_bench
-# Kind:      bench
-# Condition: TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_wgsl_reader_bench bench
-  lang/wgsl/reader/reader_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_wgsl_reader_bench bench
-  tint_api_common
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_ir
-  tint_lang_core_type
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_wgsl_reader_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_wgsl_reader_bench bench
-    tint_cmd_bench_bench
-    tint_lang_wgsl_reader
-  )
-endif(TINT_BUILD_WGSL_READER)
-
 endif(TINT_BUILD_WGSL_READER)
\ No newline at end of file
diff --git a/src/tint/lang/wgsl/reader/BUILD.gn b/src/tint/lang/wgsl/reader/BUILD.gn
index 8f70713..228ecf6 100644
--- a/src/tint/lang/wgsl/reader/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/BUILD.gn
@@ -105,40 +105,3 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "reader_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/api/common",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/ir",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_wgsl_reader) {
-        deps += [
-          "${tint_src_dir}/cmd/bench:bench",
-          "${tint_src_dir}/lang/wgsl/reader",
-        ]
-      }
-    }
-  }
-}
diff --git a/src/tint/lang/wgsl/writer/BUILD.bazel b/src/tint/lang/wgsl/writer/BUILD.bazel
index 84fdcff..940ab9c 100644
--- a/src/tint/lang/wgsl/writer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/BUILD.bazel
@@ -124,47 +124,6 @@
   copts = COPTS,
   visibility = ["//visibility:public"],
 )
-cc_library(
-  name = "bench",
-  alwayslink = True,
-  srcs = [
-    "writer_bench.cc",
-  ],
-  deps = [
-    "//src/tint/lang/core",
-    "//src/tint/lang/core/constant",
-    "//src/tint/lang/core/type",
-    "//src/tint/lang/wgsl",
-    "//src/tint/lang/wgsl/ast",
-    "//src/tint/lang/wgsl/program",
-    "//src/tint/lang/wgsl/sem",
-    "//src/tint/lang/wgsl/writer/ir_to_program",
-    "//src/tint/utils",
-    "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
-    "//src/tint/utils/ice",
-    "//src/tint/utils/macros",
-    "//src/tint/utils/math",
-    "//src/tint/utils/memory",
-    "//src/tint/utils/rtti",
-    "//src/tint/utils/symbol",
-    "//src/tint/utils/text",
-    "@benchmark",
-    "//src/utils",
-  ] + select({
-    ":tint_build_wgsl_reader": [
-      "//src/tint/cmd/bench:bench",
-    ],
-    "//conditions:default": [],
-  }) + select({
-    ":tint_build_wgsl_writer": [
-      "//src/tint/lang/wgsl/writer",
-    ],
-    "//conditions:default": [],
-  }),
-  copts = COPTS,
-  visibility = ["//visibility:public"],
-)
 
 alias(
   name = "tint_build_wgsl_reader",
@@ -176,11 +135,3 @@
   actual = "//src/tint:tint_build_wgsl_writer_true",
 )
 
-selects.config_setting_group(
-    name = "tint_build_wgsl_writer_and_tint_build_wgsl_reader",
-    match_all = [
-        ":tint_build_wgsl_writer",
-        ":tint_build_wgsl_reader",
-    ],
-)
-
diff --git a/src/tint/lang/wgsl/writer/BUILD.cfg b/src/tint/lang/wgsl/writer/BUILD.cfg
index 0b16c81..e9d5251 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cfg
+++ b/src/tint/lang/wgsl/writer/BUILD.cfg
@@ -1,6 +1,3 @@
 {
     "condition": "tint_build_wgsl_writer",
-    "bench": {
-        "Condition": "tint_build_wgsl_reader",
-    }
 }
diff --git a/src/tint/lang/wgsl/writer/BUILD.cmake b/src/tint/lang/wgsl/writer/BUILD.cmake
index 8cb5b86..4bb1316 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/BUILD.cmake
@@ -140,55 +140,6 @@
 endif(TINT_BUILD_WGSL_WRITER)
 
 endif(TINT_BUILD_WGSL_WRITER)
-if(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
-################################################################################
-# Target:    tint_lang_wgsl_writer_bench
-# Kind:      bench
-# Condition: TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER
-################################################################################
-tint_add_target(tint_lang_wgsl_writer_bench bench
-  lang/wgsl/writer/writer_bench.cc
-)
-
-tint_target_add_dependencies(tint_lang_wgsl_writer_bench bench
-  tint_lang_core
-  tint_lang_core_constant
-  tint_lang_core_type
-  tint_lang_wgsl
-  tint_lang_wgsl_ast
-  tint_lang_wgsl_program
-  tint_lang_wgsl_sem
-  tint_lang_wgsl_writer_ir_to_program
-  tint_utils
-  tint_utils_containers
-  tint_utils_diagnostic
-  tint_utils_ice
-  tint_utils_macros
-  tint_utils_math
-  tint_utils_memory
-  tint_utils_rtti
-  tint_utils_symbol
-  tint_utils_text
-)
-
-tint_target_add_external_dependencies(tint_lang_wgsl_writer_bench bench
-  "google-benchmark"
-  "src_utils"
-)
-
-if(TINT_BUILD_WGSL_READER)
-  tint_target_add_dependencies(tint_lang_wgsl_writer_bench bench
-    tint_cmd_bench_bench
-  )
-endif(TINT_BUILD_WGSL_READER)
-
-if(TINT_BUILD_WGSL_WRITER)
-  tint_target_add_dependencies(tint_lang_wgsl_writer_bench bench
-    tint_lang_wgsl_writer
-  )
-endif(TINT_BUILD_WGSL_WRITER)
-
-endif(TINT_BUILD_WGSL_WRITER AND TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_WGSL_WRITER)
 ################################################################################
 # Target:    tint_lang_wgsl_writer_fuzz
diff --git a/src/tint/lang/wgsl/writer/BUILD.gn b/src/tint/lang/wgsl/writer/BUILD.gn
index caa2186..7afa8bb 100644
--- a/src/tint/lang/wgsl/writer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/BUILD.gn
@@ -125,43 +125,6 @@
     }
   }
 }
-if (tint_build_benchmarks) {
-  if (tint_build_wgsl_writer && tint_build_wgsl_reader) {
-    tint_benchmarks_source_set("bench") {
-      sources = [ "writer_bench.cc" ]
-      deps = [
-        "${dawn_root}/src/utils:utils",
-        "${tint_src_dir}:google_benchmark",
-        "${tint_src_dir}/lang/core",
-        "${tint_src_dir}/lang/core/constant",
-        "${tint_src_dir}/lang/core/type",
-        "${tint_src_dir}/lang/wgsl",
-        "${tint_src_dir}/lang/wgsl/ast",
-        "${tint_src_dir}/lang/wgsl/program",
-        "${tint_src_dir}/lang/wgsl/sem",
-        "${tint_src_dir}/lang/wgsl/writer/ir_to_program",
-        "${tint_src_dir}/utils",
-        "${tint_src_dir}/utils/containers",
-        "${tint_src_dir}/utils/diagnostic",
-        "${tint_src_dir}/utils/ice",
-        "${tint_src_dir}/utils/macros",
-        "${tint_src_dir}/utils/math",
-        "${tint_src_dir}/utils/memory",
-        "${tint_src_dir}/utils/rtti",
-        "${tint_src_dir}/utils/symbol",
-        "${tint_src_dir}/utils/text",
-      ]
-
-      if (tint_build_wgsl_reader) {
-        deps += [ "${tint_src_dir}/cmd/bench:bench" ]
-      }
-
-      if (tint_build_wgsl_writer) {
-        deps += [ "${tint_src_dir}/lang/wgsl/writer" ]
-      }
-    }
-  }
-}
 if (tint_build_wgsl_writer) {
   tint_fuzz_source_set("fuzz") {
     sources = []