[ir][spirv-writer] Add benchmark

This will let us track performance using perfmon.

Bug: tint:1906
Change-Id: I0540186b2e6670a3201f89c300eb25cb14ebf7f7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143081
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
Auto-Submit: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/spirv/ast_writer/generator_bench.cc b/src/tint/lang/spirv/ast_writer/generator_bench.cc
index 09ee791..c7897de 100644
--- a/src/tint/lang/spirv/ast_writer/generator_bench.cc
+++ b/src/tint/lang/spirv/ast_writer/generator_bench.cc
@@ -19,7 +19,7 @@
 namespace tint::writer::spirv {
 namespace {
 
-void GenerateSPIRV(benchmark::State& state, std::string input_name) {
+void RunBenchmark(benchmark::State& state, std::string input_name, Options options) {
     auto res = bench::LoadProgram(input_name);
     if (auto err = std::get_if<bench::Error>(&res)) {
         state.SkipWithError(err->msg.c_str());
@@ -27,14 +27,25 @@
     }
     auto& program = std::get<bench::ProgramAndFile>(res).program;
     for (auto _ : state) {
-        auto res = Generate(&program, {});
+        auto res = Generate(&program, options);
         if (!res.error.empty()) {
             state.SkipWithError(res.error.c_str());
         }
     }
 }
 
+void GenerateSPIRV(benchmark::State& state, std::string input_name) {
+    RunBenchmark(state, input_name, {});
+}
+
+void GenerateSPIRV_UseIR(benchmark::State& state, std::string input_name) {
+    Options options;
+    options.use_tint_ir = true;
+    RunBenchmark(state, input_name, std::move(options));
+}
+
 TINT_BENCHMARK_PROGRAMS(GenerateSPIRV);
+TINT_BENCHMARK_PROGRAMS(GenerateSPIRV_UseIR);
 
 }  // namespace
 }  // namespace tint::writer::spirv