[tint][exe] Use `lower` when reading SPIR-V to IR

This currently involves printing to WGSL and then parsing it back in
to a WGSL AST. Cleaning this up is tracked by crbug.com/338577206.

Bug: 42250952
Change-Id: If6fab5c013ce16f9d150de8a9b39078c2f7bdadb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186961
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/cmd/common/helper.cc b/src/tint/cmd/common/helper.cc
index a461591..49fcf79 100644
--- a/src/tint/cmd/common/helper.cc
+++ b/src/tint/cmd/common/helper.cc
@@ -124,17 +124,23 @@
             exit(1);
         }
 
-        // Convert the IR module to a WGSL AST program.
-        tint::wgsl::writer::ProgramOptions options;
-        options.allow_non_uniform_derivatives =
+        // Convert the IR module to a WGSL string.
+        tint::wgsl::writer::ProgramOptions writer_options;
+        writer_options.allow_non_uniform_derivatives =
             opts.spirv_reader_options.allow_non_uniform_derivatives;
-        options.allowed_features = opts.spirv_reader_options.allowed_features;
-        auto ast = tint::wgsl::writer::IRToProgram(result.Get(), options);
-        if (!ast.IsValid() || ast.Diagnostics().ContainsErrors()) {
-            std::cerr << "Failed to convert IR to AST:\n\n" << ast.Diagnostics() << "\n";
+        writer_options.allowed_features = opts.spirv_reader_options.allowed_features;
+        auto wgsl_result = tint::wgsl::writer::WgslFromIR(result.Get(), writer_options);
+        if (wgsl_result != Success) {
+            std::cerr << "Failed to convert IR to WGSL:\n\n"
+                      << wgsl_result.Failure().reason << "\n";
             exit(1);
         }
-        return ast;
+
+        // Parse the WGSL string to produce a WGSL AST.
+        tint::wgsl::reader::Options reader_options;
+        reader_options.allowed_features = tint::wgsl::AllowedFeatures::Everything();
+        auto file = std::make_unique<tint::Source::File>(opts.filename, wgsl_result->wgsl);
+        return tint::wgsl::reader::Parse(file.get(), reader_options);
 #else
         std::cerr << "Tint not built with the WGSL writer enabled" << std::endl;
         exit(1);