[tint] Fix writer benchmarks for multiple entry points

All of the backends now run SingleEntryPoint and need to be
passed the entry point name.

Bug: 445456830
Change-Id: I8315b3db2208c41b1dbe25d1986d097f9b3055a5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/265014
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/bench/glsl/BUILD.bazel b/src/tint/cmd/bench/glsl/BUILD.bazel
index a22b758..a4046e4 100644
--- a/src/tint/cmd/bench/glsl/BUILD.bazel
+++ b/src/tint/cmd/bench/glsl/BUILD.bazel
@@ -47,7 +47,6 @@
     "//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",
diff --git a/src/tint/cmd/bench/glsl/BUILD.cmake b/src/tint/cmd/bench/glsl/BUILD.cmake
index 76ae468..b11d498 100644
--- a/src/tint/cmd/bench/glsl/BUILD.cmake
+++ b/src/tint/cmd/bench/glsl/BUILD.cmake
@@ -49,7 +49,6 @@
   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
diff --git a/src/tint/cmd/bench/glsl/BUILD.gn b/src/tint/cmd/bench/glsl/BUILD.gn
index 5d713ec..18fc2de 100644
--- a/src/tint/cmd/bench/glsl/BUILD.gn
+++ b/src/tint/cmd/bench/glsl/BUILD.gn
@@ -53,7 +53,6 @@
         "${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",
diff --git a/src/tint/cmd/bench/glsl/writer_bench.cc b/src/tint/cmd/bench/glsl/writer_bench.cc
index 67ff588..179f614 100644
--- a/src/tint/cmd/bench/glsl/writer_bench.cc
+++ b/src/tint/cmd/bench/glsl/writer_bench.cc
@@ -26,7 +26,6 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include "src/tint/cmd/bench/bench.h"
-#include "src/tint/lang/core/ir/transform/single_entry_point.h"
 #include "src/tint/lang/glsl/writer/helpers/generate_bindings.h"
 #include "src/tint/lang/glsl/writer/writer.h"
 #include "src/tint/lang/wgsl/ast/identifier.h"
@@ -61,6 +60,7 @@
             }
 
             tint::glsl::writer::Options gen_options = {};
+            gen_options.entry_point_name = name;
             {
                 auto data = tint::glsl::writer::GenerateBindings(ir.Get(), name);
                 gen_options.bindings = std::move(data.bindings);
@@ -68,13 +68,6 @@
                     std::move(data.texture_builtins_from_uniform);
             }
 
-            // Run single entry point to strip the program down to a single entry point.
-            auto single_result = core::ir::transform::SingleEntryPoint(ir.Get(), name);
-            if (single_result != Success) {
-                state.SkipWithError(ir.Failure().reason);
-                return;
-            }
-
             // Generate GLSL.
             auto gen_res = Generate(ir.Get(), gen_options);
             if (gen_res != Success) {
diff --git a/src/tint/cmd/bench/hlsl/writer_bench.cc b/src/tint/cmd/bench/hlsl/writer_bench.cc
index 663323d..f710229 100644
--- a/src/tint/cmd/bench/hlsl/writer_bench.cc
+++ b/src/tint/cmd/bench/hlsl/writer_bench.cc
@@ -52,16 +52,17 @@
     }
 
     for (auto _ : state) {
-        // Convert the AST program to an IR module.
-        auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
-        if (ir != Success) {
-            state.SkipWithError(ir.Failure().reason);
-            return;
-        }
-
         for (auto& name : names) {
+            // Convert the AST program to an IR module.
+            auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
+            if (ir != Success) {
+                state.SkipWithError(ir.Failure().reason);
+                return;
+            }
+
             Options gen_options;
             gen_options.bindings = GenerateBindings(ir.Get(), name, false, false);
+            gen_options.entry_point_name = name;
             auto gen_res = Generate(ir.Get(), gen_options);
             if (gen_res != Success) {
                 state.SkipWithError(gen_res.Failure().reason);
diff --git a/src/tint/cmd/bench/msl/writer_bench.cc b/src/tint/cmd/bench/msl/writer_bench.cc
index 1595656..72926e3 100644
--- a/src/tint/cmd/bench/msl/writer_bench.cc
+++ b/src/tint/cmd/bench/msl/writer_bench.cc
@@ -81,6 +81,7 @@
                 return;
             }
             gen_options.bindings = tint::GenerateBindings(ir.Get(), name, true, true);
+            gen_options.entry_point_name = name;
 
             auto gen_res = Generate(ir.Get(), gen_options);
             if (gen_res != Success) {
diff --git a/src/tint/cmd/bench/spirv/writer_bench.cc b/src/tint/cmd/bench/spirv/writer_bench.cc
index 2a76a71..4c67b30 100644
--- a/src/tint/cmd/bench/spirv/writer_bench.cc
+++ b/src/tint/cmd/bench/spirv/writer_bench.cc
@@ -29,6 +29,8 @@
 
 #include "src/tint/cmd/bench/bench.h"
 #include "src/tint/lang/spirv/writer/writer.h"
+#include "src/tint/lang/wgsl/ast/identifier.h"
+#include "src/tint/lang/wgsl/ast/module.h"
 #include "src/tint/lang/wgsl/reader/reader.h"
 
 #if TINT_BUILD_IS_MSVC
@@ -48,17 +50,31 @@
         state.SkipWithError(res.Failure().reason);
         return;
     }
-    for (auto _ : state) {
-        // Convert the AST program to an IR module.
-        auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
-        if (ir != Success) {
-            state.SkipWithError(ir.Failure().reason);
-            return;
-        }
 
-        auto gen_res = Generate(ir.Get(), {});
-        if (gen_res != Success) {
-            state.SkipWithError(gen_res.Failure().reason);
+    // Get the list of entry point names.
+    std::vector<std::string> names;
+    for (auto func : res->program.AST().Functions()) {
+        if (func->IsEntryPoint()) {
+            names.push_back(func->name->symbol.Name());
+        }
+    }
+
+    for (auto _ : state) {
+        for (auto& name : names) {
+            // Convert the AST program to an IR module.
+            auto ir = tint::wgsl::reader::ProgramToLoweredIR(res->program);
+            if (ir != Success) {
+                state.SkipWithError(ir.Failure().reason);
+                return;
+            }
+
+            spirv::writer::Options options{
+                .entry_point_name = name,
+            };
+            auto gen_res = Generate(ir.Get(), options);
+            if (gen_res != Success) {
+                state.SkipWithError(gen_res.Failure().reason);
+            }
         }
     }
 }
diff --git a/src/tint/cmd/bench/validator_bench.cc b/src/tint/cmd/bench/validator_bench.cc
index f51eb45..b99a0f1 100644
--- a/src/tint/cmd/bench/validator_bench.cc
+++ b/src/tint/cmd/bench/validator_bench.cc
@@ -57,7 +57,9 @@
     }
 
     for (auto _ : state) {
-        auto val_res = Validate(ir.Get(), {});
+        auto val_res = Validate(ir.Get(), Capabilities{
+                                              Capability::kAllowMultipleEntryPoints,
+                                          });
         if (val_res != Success) {
             state.SkipWithError(val_res.Failure().reason);
         }