diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b7545e..d658a3d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -119,15 +119,15 @@ jobs: run: git submodule update --init --recursive - run: cargo test --manifest-path components/conformance-tests/Cargo.toml - dwarf: - name: Dwarf feature + non-dwarf: + name: Without dwarf feature runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Checkout submodule run: git submodule update --init --recursive - - run: cargo test --features=dwarf - - run: cargo test --features=dwarf --manifest-path components/conformance-tests/Cargo.toml + - run: cargo test --no-default-features + - run: cargo test --no-default-features --manifest-path components/conformance-tests/Cargo.toml fmt: name: Cargo fmt diff --git a/Cargo.lock b/Cargo.lock index 5de1039..abcd8b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -272,7 +272,7 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "wasm-opt" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "libc", @@ -286,7 +286,7 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "cxx", @@ -296,7 +296,7 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "cc", diff --git a/binaryen b/binaryen index 1fb1a2e..11dba9b 160000 --- a/binaryen +++ b/binaryen @@ -1 +1 @@ -Subproject commit 1fb1a2e2970472e9e93f9de94c8a2c674d0a0581 +Subproject commit 11dba9b1c2ad988500b329727f39f4d8786918c5 diff --git a/components/conformance-tests/Cargo.lock b/components/conformance-tests/Cargo.lock index 736e27c..4873bc1 100644 --- a/components/conformance-tests/Cargo.lock +++ b/components/conformance-tests/Cargo.lock @@ -41,7 +41,7 @@ dependencies = [ [[package]] name = "conformance-tests" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "tempfile", @@ -281,7 +281,7 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "wasm-opt" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "libc", @@ -295,7 +295,7 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "cxx", @@ -305,7 +305,7 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.114.1" +version = "0.116.0" dependencies = [ "anyhow", "cc", diff --git a/components/conformance-tests/Cargo.toml b/components/conformance-tests/Cargo.toml index b928c4e..476edb8 100644 --- a/components/conformance-tests/Cargo.toml +++ b/components/conformance-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "conformance-tests" -version = "0.114.2" +version = "0.116.0" description = "Tests against binaryen" license = "MIT / Apache-2.0" edition = "2018" @@ -11,9 +11,9 @@ anyhow = "1.0.58" [dev-dependencies] anyhow = "1.0.58" -wasm-opt = { path = "../wasm-opt", version = "0.114.2" } +wasm-opt = { path = "../wasm-opt", version = "0.116.0", default-features = false } tempfile = "3.3.0" [features] -default = [] +default = ["dwarf"] dwarf = ["wasm-opt/dwarf"] diff --git a/components/conformance-tests/build.rs b/components/conformance-tests/build.rs index 6f35a6b..d8aca97 100644 --- a/components/conformance-tests/build.rs +++ b/components/conformance-tests/build.rs @@ -65,8 +65,7 @@ fn build_rust_wasm_opt() -> Result<()> { let dirs = get_dirs()?; let mut cmd = Command::new("cargo"); - cmd - .current_dir(dirs.workspace) + cmd.current_dir(dirs.workspace) .args(["build", "-p", "wasm-opt", "--release"]); #[cfg(feature = "dwarf")] diff --git a/components/wasm-opt-cxx-sys/Cargo.toml b/components/wasm-opt-cxx-sys/Cargo.toml index c2b2b8d..38bd9e4 100644 --- a/components/wasm-opt-cxx-sys/Cargo.toml +++ b/components/wasm-opt-cxx-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasm-opt-cxx-sys" -version = "0.114.2" +version = "0.116.0" description = "wasm-opt bindings via cxx" license = "MIT / Apache-2.0" edition = "2018" @@ -11,7 +11,7 @@ readme = "README.md" [dependencies] anyhow = "1.0.58" cxx = "1.0.79" -wasm-opt-sys = { path = "../wasm-opt-sys", version = "0.114.2" } +wasm-opt-sys = { path = "../wasm-opt-sys", version = "0.116.0", default-features = false } [build-dependencies] anyhow = "1.0.58" diff --git a/components/wasm-opt-cxx-sys/src/shims.h b/components/wasm-opt-cxx-sys/src/shims.h index 8633e69..d2dee3c 100644 --- a/components/wasm-opt-cxx-sys/src/shims.h +++ b/components/wasm-opt-cxx-sys/src/shims.h @@ -259,16 +259,14 @@ namespace wasm_shims { f.push_back(wasm::FeatureSet::Feature::Multivalue); f.push_back(wasm::FeatureSet::Feature::GC); f.push_back(wasm::FeatureSet::Feature::Memory64); - f.push_back(wasm::FeatureSet::Feature::GCNNLocals); f.push_back(wasm::FeatureSet::Feature::RelaxedSIMD); f.push_back(wasm::FeatureSet::Feature::ExtendedConst); f.push_back(wasm::FeatureSet::Feature::Strings); - f.push_back(wasm::FeatureSet::Feature::MultiMemories); + f.push_back(wasm::FeatureSet::Feature::MultiMemory); // This is not part of the Rust API because it has the same value as None. // f.push_back(wasm::FeatureSet::Feature::MVP); f.push_back(wasm::FeatureSet::Feature::Default); f.push_back(wasm::FeatureSet::Feature::All); - f.push_back(wasm::FeatureSet::Feature::AllPossible); return std::make_unique>(f); } diff --git a/components/wasm-opt-sys/Cargo.toml b/components/wasm-opt-sys/Cargo.toml index 40b27e6..79cf74d 100644 --- a/components/wasm-opt-sys/Cargo.toml +++ b/components/wasm-opt-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasm-opt-sys" -version = "0.114.2" +version = "0.116.0" description = "Native wasm-opt build" license = "MIT / Apache-2.0" edition = "2018" @@ -18,5 +18,5 @@ cxx-build = "1.0.79" cxx = "1.0.79" [features] -default = [] +default = ["dwarf"] dwarf = [] \ No newline at end of file diff --git a/components/wasm-opt-sys/build.rs b/components/wasm-opt-sys/build.rs index 68e5c54..2cb2e9e 100644 --- a/components/wasm-opt-sys/build.rs +++ b/components/wasm-opt-sys/build.rs @@ -147,6 +147,10 @@ fn get_converted_wasm_opt_cpp(src_dir: &Path) -> anyhow::Result { } fn get_src_files(src_dir: &Path) -> anyhow::Result> { + let analysis_dir = src_dir.join("analysis"); + let analysis_files = ["cfg.cpp"]; + let analysis_files = analysis_files.iter().map(|f| analysis_dir.join(f)); + let wasm_dir = src_dir.join("wasm"); let wasm_files = [ "literal.cpp", @@ -155,6 +159,7 @@ fn get_src_files(src_dir: &Path) -> anyhow::Result> { "wasm-debug.cpp", "wasm-emscripten.cpp", "wasm-interpreter.cpp", + "wasm-ir-builder.cpp", "wasm-io.cpp", "wasm-stack.cpp", "wasm-s-parser.cpp", @@ -222,6 +227,7 @@ fn get_src_files(src_dir: &Path) -> anyhow::Result> { let src_files: Vec<_> = None .into_iter() + .chain(analysis_files) .chain(wasm_files) .chain(support_files) .chain(ir_files) @@ -338,7 +344,7 @@ fn create_config_header() -> anyhow::Result<()> { let output_dir = Path::new(&output_dir); let config_file = output_dir.join("config.h"); - let config_text = "#define PROJECT_VERSION \"114 (version_114)\""; + let config_text = "#define PROJECT_VERSION \"116 (version_116)\""; fs::write(&config_file, config_text)?; diff --git a/components/wasm-opt/Cargo.toml b/components/wasm-opt/Cargo.toml index d06a06e..1c0bea9 100644 --- a/components/wasm-opt/Cargo.toml +++ b/components/wasm-opt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasm-opt" -version = "0.114.2" +version = "0.116.0" description = "wasm-opt bindings" license = "MIT / Apache-2.0" edition = "2018" @@ -12,13 +12,13 @@ readme = "README.md" [dependencies] anyhow = "1.0.58" libc = "0.2.126" -wasm-opt-sys = { path = "../wasm-opt-sys", version = "0.114.2" } -wasm-opt-cxx-sys = { path = "../wasm-opt-cxx-sys", version = "0.114.2" } +wasm-opt-sys = { path = "../wasm-opt-sys", version = "0.116.0", default-features = false } +wasm-opt-cxx-sys = { path = "../wasm-opt-cxx-sys", version = "0.116.0" } strum = "0.24" strum_macros = "0.24" thiserror = "1.0.32" tempfile = "3.3.0" [features] -default = [] +default = ["dwarf"] dwarf = ["wasm-opt-sys/dwarf"] \ No newline at end of file diff --git a/components/wasm-opt/src/base.rs b/components/wasm-opt/src/base.rs index 02cfe9a..02366cc 100644 --- a/components/wasm-opt/src/base.rs +++ b/components/wasm-opt/src/base.rs @@ -320,20 +320,17 @@ pub enum Feature { Multivalue = 1 << 9, Gc = 1 << 10, Memory64 = 1 << 11, - // TODO: Remove this feature when the wasm spec stabilizes. - GcNnLocals = 1 << 12, - RelaxedSimd = 1 << 13, - ExtendedConst = 1 << 14, - Strings = 1 << 15, - MultiMemories = 1 << 16, + RelaxedSimd = 1 << 12, + ExtendedConst = 1 << 13, + Strings = 1 << 14, + MultiMemory = 1 << 15, // MVP has the same value as None. // Mvp = 0, Default = 1 << 5 | 1 << 1, // SignExt | MutableGlobals, // GCNNLocals are opt-in: merely asking for "All" does not apply them. To // get all possible values use AllPossible. See setAll() below for more // details. - All = ((1 << 17) - 1) & !(1 << 12), // All = ((1 << 17) - 1) & ~GCNNLocals, - AllPossible = (1 << 17) - 1, + All = (1 << 16) - 1, } pub struct PassRunner<'wasm>(cxx::UniquePtr>); diff --git a/components/wasm-opt/src/features.rs b/components/wasm-opt/src/features.rs index ad85605..3ef8f94 100644 --- a/components/wasm-opt/src/features.rs +++ b/components/wasm-opt/src/features.rs @@ -70,8 +70,6 @@ pub enum Feature { /// [Specification](https://github.com/WebAssembly/memory64/blob/main/proposals/memory64/Overview.md). #[strum(serialize = "memory64")] Memory64, - #[strum(serialize = "gc-nn-locals")] - GcNnLocals, /// Relaxed SIMD. /// /// [Specification](https://github.com/WebAssembly/relaxed-simd/tree/main/proposals/relaxed-simd). @@ -84,11 +82,11 @@ pub enum Feature { ExtendedConst, #[strum(serialize = "strings")] Strings, - /// Multiple memories. + /// Multiple memory. /// /// [Specification](https://github.com/WebAssembly/multi-memory/blob/master/proposals/multi-memory/Overview.md). - #[strum(serialize = "multi-memories")] - MultiMemories, + #[strum(serialize = "multi-memory")] + MultiMemory, /// The original WebAssembly specification. /// /// It has the same value as `None`. @@ -99,10 +97,7 @@ pub enum Feature { /// Includes [`Feature::SignExt`] and [`Feature::MutableGlobals`]. #[strum(disabled)] Default, - /// All features, excluding [`Feature::GcNnLocals`]. - #[strum(disabled)] - All, /// All features. #[strum(disabled)] - AllPossible, + All, } diff --git a/components/wasm-opt/src/passes.rs b/components/wasm-opt/src/passes.rs index 3031d45..b99e880 100644 --- a/components/wasm-opt/src/passes.rs +++ b/components/wasm-opt/src/passes.rs @@ -81,6 +81,8 @@ pub enum Pass { /// /// Optimize the entire program using information about what content can actually appear in each location. Gufa, + /// GUFA plus add casts for all inferences. + GufaCastAll, /// Gufa plus local optimizations in functions we modified. GufaOptimizing, /// Apply more specific subtypes to type fields where possible. @@ -207,6 +209,8 @@ pub enum Pass { RemoveUnusedNames, /// Remove unused private GC types. RemoveUnusedTypes, + /// Sorts functions by name (useful for debugging). + ReorderFunctionsByName, /// Sorts functions by access frequency. ReorderFunctions, /// Sorts globals by access frequency. @@ -325,6 +329,7 @@ impl Pass { Gto => "gto", Gsi => "gsi", Gufa => "gufa", + GufaCastAll => "gufa-cast-all", GufaOptimizing => "gufa-optimizing", TypeRefining => "type-refining", Heap2Local => "heap2local", @@ -388,6 +393,7 @@ impl Pass { RemoveUnusedNonfunctionModuleElements => "remove-unused-nonfunction-module-elements", RemoveUnusedNames => "remove-unused-names", RemoveUnusedTypes => "remove-unused-types", + ReorderFunctionsByName => "reorder-functions-by-name", ReorderFunctions => "reorder-functions", ReorderGlobals => "reorder-globals", RecorderLocals => "reorder-locals", diff --git a/components/wasm-opt/src/run.rs b/components/wasm-opt/src/run.rs index a4be86b..23c145b 100644 --- a/components/wasm-opt/src/run.rs +++ b/components/wasm-opt/src/run.rs @@ -313,15 +313,13 @@ fn convert_feature(feature: &Feature) -> BaseFeature { Feature::Multivalue => BaseFeature::Multivalue, Feature::Gc => BaseFeature::Gc, Feature::Memory64 => BaseFeature::Memory64, - Feature::GcNnLocals => BaseFeature::GcNnLocals, Feature::RelaxedSimd => BaseFeature::RelaxedSimd, Feature::ExtendedConst => BaseFeature::ExtendedConst, Feature::Strings => BaseFeature::Strings, - Feature::MultiMemories => BaseFeature::MultiMemories, + Feature::MultiMemory => BaseFeature::MultiMemory, Feature::Mvp => BaseFeature::None, Feature::Default => BaseFeature::Default, Feature::All => BaseFeature::All, - Feature::AllPossible => BaseFeature::AllPossible, } }