[tint][cmd] Add `--format ir` as an option
We have --dump-ir / --emit-ir which prints the IR along with the requested output, but sometimes you just want to see the IR without something else.
Change-Id: I156fdae7a9c8396624cb195aa9e3c355f9ec69c6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186220
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/cmd/tint/main.cc b/src/tint/cmd/tint/main.cc
index 7ea30107..c0bf14c 100644
--- a/src/tint/cmd/tint/main.cc
+++ b/src/tint/cmd/tint/main.cc
@@ -99,6 +99,12 @@
#include "src/tint/lang/glsl/validate/validate.h"
#endif // TINT_BUILD_GLSL_VALIDATOR
+#if TINT_BUILD_WGSL_READER
+#define WGSL_READER_ONLY(x) x
+#else
+#define WGSL_READER_ONLY(x)
+#endif
+
#if TINT_BUILD_SPV_WRITER
#define SPV_WRITER_ONLY(x) x
#else
@@ -145,6 +151,7 @@
kMsl,
kHlsl,
kGlsl,
+ kIr,
};
#if TINT_BUILD_HLSL_WRITER
@@ -296,6 +303,7 @@
MSL_WRITER_ONLY(format_enum_names.Emplace(Format::kMsl, "msl"));
HLSL_WRITER_ONLY(format_enum_names.Emplace(Format::kHlsl, "hlsl"));
GLSL_WRITER_ONLY(format_enum_names.Emplace(Format::kGlsl, "glsl"));
+ WGSL_READER_ONLY(format_enum_names.Emplace(Format::kIr, "ir"));
OptionSet options;
auto& fmt = options.Add<EnumOption<Format>>("format",
@@ -1199,6 +1207,24 @@
#endif // TINT_BUILD_GLSL_WRITER
}
+/// Generate IR code for a program.
+/// @param program the program to generate
+/// @returns true on success
+bool GenerateIr([[maybe_unused]] const tint::Program& program) {
+#if !TINT_BUILD_WGSL_READER
+ std::cerr << "WGSL reader not enabled in tint build" << std::endl;
+ return false;
+#else
+ auto result = tint::wgsl::reader::ProgramToLoweredIR(program);
+ if (result != tint::Success) {
+ std::cerr << "Failed to build IR from program: " << result.Failure() << "\n";
+ return false;
+ }
+ std::cout << tint::core::ir::Disassemble(result.Get()) << "\n";
+ return true;
+#endif
+}
+
} // namespace
int main(int argc, const char** argv) {
@@ -1336,15 +1362,7 @@
#if TINT_BUILD_WGSL_READER
if (options.dump_ir) {
- auto result = tint::wgsl::reader::ProgramToLoweredIR(info.program);
- if (result != tint::Success) {
- std::cerr << "Failed to build IR from program: " << result.Failure() << "\n";
- } else {
- auto mod = result.Move();
- if (options.dump_ir) {
- std::cout << tint::core::ir::Disassemble(mod) << "\n";
- }
- }
+ GenerateIr(info.program);
}
#endif // TINT_BUILD_WGSL_READER
@@ -1455,6 +1473,9 @@
case Format::kGlsl:
success = GenerateGlsl(program, options);
break;
+ case Format::kIr:
+ success = GenerateIr(program);
+ break;
case Format::kNone:
break;
default: