summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pass.h1
-rw-r--r--src/tools/asm2wasm.cpp8
-rw-r--r--src/tools/optimization-options.h5
-rw-r--r--src/tools/wasm-opt.cpp38
4 files changed, 34 insertions, 18 deletions
diff --git a/src/pass.h b/src/pass.h
index 59f0d3dcb..b4db3e706 100644
--- a/src/pass.h
+++ b/src/pass.h
@@ -57,6 +57,7 @@ private:
struct PassOptions {
bool debug = false; // run passes in debug mode, doing extra validation and timing checks
+ bool validate = true; // whether to run the validator to check for errors
bool validateGlobally = false; // when validating validate globally and not just locally
int optimizeLevel = 0; // 0, 1, 2 correspond to -O0, -O1, -O2, etc.
int shrinkLevel = 0; // 0, 1, 2 correspond to -O0, -Os, -Oz
diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp
index 63367f0f7..986e50c50 100644
--- a/src/tools/asm2wasm.cpp
+++ b/src/tools/asm2wasm.cpp
@@ -215,9 +215,11 @@ int main(int argc, const char *argv[]) {
}
}
- if (!WasmValidator().validate(wasm, options.passOptions.features)) {
- WasmPrinter::printModule(&wasm);
- Fatal() << "error in validating output";
+ if (options.passOptions.validate) {
+ if (!WasmValidator().validate(wasm, options.passOptions.features)) {
+ WasmPrinter::printModule(&wasm);
+ Fatal() << "error in validating output";
+ }
}
if (options.debug) std::cerr << "emitting..." << std::endl;
diff --git a/src/tools/optimization-options.h b/src/tools/optimization-options.h
index 14ce6aa04..9fbba88cb 100644
--- a/src/tools/optimization-options.h
+++ b/src/tools/optimization-options.h
@@ -87,6 +87,11 @@ struct OptimizationOptions : public Options {
[this](Options* o, const std::string& argument) {
passOptions.shrinkLevel = atoi(argument.c_str());
})
+ .add("--no-validation", "-n", "Disables validation, assumes inputs are correct",
+ Options::Arguments::Zero,
+ [this](Options* o, const std::string& argument) {
+ passOptions.validate = false;
+ })
.add("--ignore-implicit-traps", "-iit", "Optimize under the helpful assumption that no surprising traps occur (from load, div/mod, etc.)",
Options::Arguments::Zero,
[this](Options*, const std::string&) {
diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp
index d2189e616..d6ce53c26 100644
--- a/src/tools/wasm-opt.cpp
+++ b/src/tools/wasm-opt.cpp
@@ -132,9 +132,11 @@ int main(int argc, const char* argv[]) {
Fatal() << "error in building module, std::bad_alloc (possibly invalid request for silly amounts of memory)";
}
- if (!WasmValidator().validate(wasm, features)) {
- WasmPrinter::printModule(&wasm);
- Fatal() << "error in validating input";
+ if (options.passOptions.validate) {
+ if (!WasmValidator().validate(wasm, features)) {
+ WasmPrinter::printModule(&wasm);
+ Fatal() << "error in validating input";
+ }
}
} else {
// translate-to-fuzz
@@ -143,10 +145,12 @@ int main(int argc, const char* argv[]) {
reader.pickPasses(options);
}
reader.build();
- if (!WasmValidator().validate(wasm, features)) {
- WasmPrinter::printModule(&wasm);
- std::cerr << "translate-to-fuzz must always generate a valid module";
- abort();
+ if (options.passOptions.validate) {
+ if (!WasmValidator().validate(wasm, features)) {
+ WasmPrinter::printModule(&wasm);
+ std::cerr << "translate-to-fuzz must always generate a valid module";
+ abort();
+ }
}
}
@@ -194,22 +198,26 @@ int main(int argc, const char* argv[]) {
auto input = buffer.getAsChars();
WasmBinaryBuilder parser(other, input, false);
parser.read();
- bool valid = WasmValidator().validate(other, features);
- if (!valid) {
- WasmPrinter::printModule(&other);
+ if (options.passOptions.validate) {
+ bool valid = WasmValidator().validate(other, features);
+ if (!valid) {
+ WasmPrinter::printModule(&other);
+ }
+ assert(valid);
}
- assert(valid);
curr = &other;
}
if (options.runningPasses()) {
if (options.debug) std::cerr << "running passes...\n";
options.runPasses(*curr);
- bool valid = WasmValidator().validate(*curr, features);
- if (!valid) {
- WasmPrinter::printModule(&*curr);
+ if (options.passOptions.validate) {
+ bool valid = WasmValidator().validate(*curr, features);
+ if (!valid) {
+ WasmPrinter::printModule(&*curr);
+ }
+ assert(valid);
}
- assert(valid);
}
if (fuzzExec) {