From 49622bde586deeb8400529fd61bf5bf1abab38e3 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Thu, 30 Apr 2020 10:22:25 -0700 Subject: [PATCH] Use complex load-extend instructions in `optimize_complex_addresses`; fixes #1186 --- cranelift/codegen/src/postopt.rs | 36 ++++++++++++++++++++++++++++++++ tests/all/wast.rs | 7 +------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/cranelift/codegen/src/postopt.rs b/cranelift/codegen/src/postopt.rs index 9e2179982d..3e27c90a39 100644 --- a/cranelift/codegen/src/postopt.rs +++ b/cranelift/codegen/src/postopt.rs @@ -271,6 +271,42 @@ fn optimize_complex_addresses(pos: &mut EncCursor, inst: Inst, isa: &dyn TargetI .replace(inst) .sload32_complex(info.flags, &args, info.offset); } + Opcode::Uload8x8 => { + pos.func + .dfg + .replace(inst) + .uload8x8_complex(info.flags, &args, info.offset); + } + Opcode::Sload8x8 => { + pos.func + .dfg + .replace(inst) + .sload8x8_complex(info.flags, &args, info.offset); + } + Opcode::Uload16x4 => { + pos.func + .dfg + .replace(inst) + .uload16x4_complex(info.flags, &args, info.offset); + } + Opcode::Sload16x4 => { + pos.func + .dfg + .replace(inst) + .sload16x4_complex(info.flags, &args, info.offset); + } + Opcode::Uload32x2 => { + pos.func + .dfg + .replace(inst) + .uload32x2_complex(info.flags, &args, info.offset); + } + Opcode::Sload32x2 => { + pos.func + .dfg + .replace(inst) + .sload32x2_complex(info.flags, &args, info.offset); + } Opcode::Store => { pos.func.dfg.replace(inst).store_complex( info.flags, diff --git a/tests/all/wast.rs b/tests/all/wast.rs index 8bfa5ee353..a95cebe2a0 100644 --- a/tests/all/wast.rs +++ b/tests/all/wast.rs @@ -1,5 +1,5 @@ use std::path::Path; -use wasmtime::{Config, Engine, OptLevel, Store, Strategy}; +use wasmtime::{Config, Engine, Store, Strategy}; use wasmtime_wast::WastContext; include!(concat!(env!("OUT_DIR"), "/wast_testsuite_tests.rs")); @@ -28,11 +28,6 @@ fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> { .strategy(strategy)? .cranelift_debug_verifier(true); - // FIXME: https://github.com/bytecodealliance/wasmtime/issues/1186 - if simd { - cfg.cranelift_opt_level(OptLevel::None); - } - let store = Store::new(&Engine::new(&cfg)); let mut wast_context = WastContext::new(store); wast_context.register_spectest()?;