[loopy] Switch to IR version of SPIR-V backend

Bug: 347699874
Change-Id: I1a990c574636f5243304f0ab17bcce9f2e6b02b8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/202334
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/loopy/main.cc b/src/tint/cmd/loopy/main.cc
index bdbd0ca..681a234 100644
--- a/src/tint/cmd/loopy/main.cc
+++ b/src/tint/cmd/loopy/main.cc
@@ -209,12 +209,22 @@
 #if TINT_BUILD_SPV_WRITER
     tint::spirv::writer::Options gen_options;
     gen_options.bindings = tint::spirv::writer::GenerateBindings(program);
-    auto result = tint::spirv::writer::Generate(program, gen_options);
-    if (result != tint::Success) {
-        tint::cmd::PrintWGSL(std::cerr, program);
-        std::cerr << "Failed to generate: " << result.Failure() << "\n";
+
+    // Convert the AST program to an IR module.
+    auto ir = tint::wgsl::reader::ProgramToLoweredIR(program);
+    if (ir != tint::Success) {
+        std::cerr << "Failed to generate IR: " << ir << "\n";
         return false;
     }
+
+    // Generate SPIR-V from Tint IR.
+    auto result = tint::spirv::writer::Generate(ir.Get(), gen_options);
+    if (result != tint::Success) {
+        tint::cmd::PrintWGSL(std::cerr, program);
+        std::cerr << "Failed to generate SPIR-V: " << result.Failure() << "\n";
+        return false;
+    }
+
     return true;
 #else
     (void)program;