[tint][wgsl] Migrate IR roundtrip fuzzer to be an IR fuzzer
Instead of a WGSL fuzzer.
Change-Id: I7f994e1b2baace90811a9a0351766e0a493b0390
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/162308
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index 5c9aa4b..406ab8e 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -176,6 +176,7 @@
tint_target_add_dependencies(tint_lang_wgsl_fuzz fuzz
tint_api_common
+ tint_cmd_fuzz_ir_fuzz
tint_lang_core
tint_lang_core_constant
tint_lang_core_ir
@@ -183,7 +184,6 @@
tint_lang_wgsl
tint_lang_wgsl_ast
tint_lang_wgsl_common
- tint_lang_wgsl_helpers
tint_lang_wgsl_program
tint_lang_wgsl_reader_lower
tint_lang_wgsl_resolver
@@ -208,7 +208,6 @@
if(TINT_BUILD_WGSL_READER)
tint_target_add_dependencies(tint_lang_wgsl_fuzz fuzz
- tint_cmd_fuzz_wgsl_fuzz
tint_lang_wgsl_reader_parser
tint_lang_wgsl_reader_program_to_ir
)
diff --git a/src/tint/lang/wgsl/BUILD.gn b/src/tint/lang/wgsl/BUILD.gn
index 9aa5213..ce68bfa 100644
--- a/src/tint/lang/wgsl/BUILD.gn
+++ b/src/tint/lang/wgsl/BUILD.gn
@@ -150,6 +150,7 @@
sources = []
deps = [
"${tint_src_dir}/api/common",
+ "${tint_src_dir}/cmd/fuzz/ir:fuzz",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/ir",
@@ -157,7 +158,6 @@
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/lang/wgsl/common",
- "${tint_src_dir}/lang/wgsl/helpers",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/reader/lower",
"${tint_src_dir}/lang/wgsl/resolver",
@@ -182,7 +182,6 @@
if (tint_build_wgsl_reader) {
deps += [
- "${tint_src_dir}/cmd/fuzz/wgsl:fuzz",
"${tint_src_dir}/lang/wgsl/reader/parser",
"${tint_src_dir}/lang/wgsl/reader/program_to_ir",
]
diff --git a/src/tint/lang/wgsl/ir_roundtrip_fuzz.cc b/src/tint/lang/wgsl/ir_roundtrip_fuzz.cc
index 0ff0abe..12d97c1 100644
--- a/src/tint/lang/wgsl/ir_roundtrip_fuzz.cc
+++ b/src/tint/lang/wgsl/ir_roundtrip_fuzz.cc
@@ -29,9 +29,8 @@
#include <iostream>
-#include "src/tint/cmd/fuzz/wgsl/fuzz.h"
+#include "src/tint/cmd/fuzz/ir/fuzz.h"
#include "src/tint/lang/core/ir/disassembler.h"
-#include "src/tint/lang/wgsl/helpers/apply_substitute_overrides.h"
#include "src/tint/lang/wgsl/reader/lower/lower.h"
#include "src/tint/lang/wgsl/reader/parser/parser.h"
#include "src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h"
@@ -40,57 +39,16 @@
#include "src/tint/lang/wgsl/writer/writer.h"
namespace tint::wgsl {
-namespace {
-bool IsUnsupported(const tint::ast::Enable* enable) {
- for (auto ext : enable->extensions) {
- switch (ext->name) {
- case tint::wgsl::Extension::kChromiumExperimentalDp4A:
- case tint::wgsl::Extension::kChromiumExperimentalFullPtrParameters:
- case tint::wgsl::Extension::kChromiumExperimentalPixelLocal:
- case tint::wgsl::Extension::kChromiumExperimentalPushConstant:
- case tint::wgsl::Extension::kChromiumInternalDualSourceBlending:
- case tint::wgsl::Extension::kChromiumInternalRelaxedUniformLayout:
- return true;
- default:
- break;
- }
- }
- return false;
-}
-
-} // namespace
-
-void IRRoundtripFuzzer(const tint::Program& program) {
- if (program.AST().Enables().Any(IsUnsupported)) {
- return;
- }
-
- auto transformed = tint::wgsl::ApplySubstituteOverrides(program);
- auto& src = transformed ? transformed.value() : program;
- if (!src.IsValid()) {
- return;
- }
-
- auto ir = tint::wgsl::reader::ProgramToIR(src);
- if (!ir) {
- TINT_ICE() << ir.Failure();
- return;
- }
-
- if (auto res = tint::wgsl::reader::Lower(ir.Get()); !res) {
+void IRRoundtripFuzzer(core::ir::Module& ir) {
+ if (auto res = tint::wgsl::writer::Raise(ir); !res) {
TINT_ICE() << res.Failure();
return;
}
- if (auto res = tint::wgsl::writer::Raise(ir.Get()); !res) {
- TINT_ICE() << res.Failure();
- return;
- }
-
- auto dst = tint::wgsl::writer::IRToProgram(ir.Get());
+ auto dst = tint::wgsl::writer::IRToProgram(ir);
if (!dst.IsValid()) {
- std::cerr << "IR:\n" << core::ir::Disassemble(ir.Get()) << std::endl;
+ std::cerr << "IR:\n" << core::ir::Disassemble(ir) << std::endl;
if (auto result = tint::wgsl::writer::Generate(dst, {}); result) {
std::cerr << "WGSL:\n" << result->wgsl << std::endl << std::endl;
}
@@ -103,4 +61,4 @@
} // namespace tint::wgsl
-TINT_WGSL_PROGRAM_FUZZER(tint::wgsl::IRRoundtripFuzzer);
+TINT_IR_MODULE_FUZZER(tint::wgsl::IRRoundtripFuzzer);